Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import Flask, render_template, flash, redirect
- from flask_sqlalchemy import SQLAlchemy
- from flask_login import UserMixin, LoginManager, login_user, login_required, logout_user, current_user
- from forms.authentication import RegisterForm, LoginForm
- from forms.todo import TodoForm
- from sqlalchemy.exc import IntegrityError
- from werkzeug.security import generate_password_hash, check_password_hash
- app = Flask(__name__)
- app.config["SECRET_KEY"] = "JSystems1234!"
- app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://postgres:Password!@localhost:5432/projekt"
- db = SQLAlchemy(app)
- login_manager = LoginManager()
- login_manager.init_app(app)
- class User(UserMixin, db.Model):
- id = db.Column(db.Integer, primary_key=True)
- email = db.Column(db.String(150), unique=True, nullable=False)
- password = db.Column(db.String(255), nullable=False)
- todos = db.relationship('Todo', backref='user')
- class Todo(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- title = db.Column(db.String(300), nullable=False)
- due_date = db.Column(db.DateTime, nullable=True)
- completed = db.Column(db.Boolean, default=False)
- user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
- @login_manager.user_loader
- def load_user(user_id):
- return User.query.get(user_id)
- @app.route("/")
- def mainpage():
- return render_template("mainpage.html")
- @app.route("/register", methods=["GET", "POST"])
- def register():
- register_form = RegisterForm()
- if register_form.validate_on_submit():
- email = register_form.email.data
- hashed_password = generate_password_hash(register_form.password.data)
- try:
- new_user = User(email=email, password=hashed_password)
- db.session.add(new_user)
- db.session.commit()
- flash('Użytkownik został zarejestrowany', 'success')
- except IntegrityError:
- flash('Ten login jest już zajęty', 'error')
- return redirect('/register')
- return render_template("register.html", form=register_form)
- @app.route("/login", methods=["GET", "POST"])
- def login():
- login_form = LoginForm()
- if login_form.validate_on_submit():
- email = login_form.email.data
- user = User.query.filter_by(email=email).first()
- if user and check_password_hash(user.password, login_form.password.data):
- login_user(user)
- return redirect('/tasks')
- else:
- flash('Błędne dane logowania', 'error')
- return render_template("login.html", form=login_form)
- @app.route('/logout')
- @login_required
- def logout():
- logout_user()
- return redirect('/login')
- @app.route('/todos', methods=["GET", "POST"])
- @login_required
- def todos_list():
- todos = Todo.query.filter_by(user_id=current_user.id).order_by(Todo.due_date.desc()).all()
- todo_form = TodoForm()
- if todo_form.validate_on_submit():
- todo = Todo(
- title = todo_form.title.data,
- due_date = todo_form.due_date.data,
- completed = todo_form.completed.data,
- user_id = current_user.id
- )
- db.session.add(todo)
- db.session.commit()
- flash("Nowe zadnie zostało dodane", "sucess")
- return redirect("/todos")
- return render_template("todos.html", todos=todos, form=todo_form)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement