Advertisement
ksieradzinski

Untitled

Feb 28th, 2025
15
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.37 KB | None | 0 0
  1. from flask import Flask, render_template, flash, redirect
  2. from flask_sqlalchemy import SQLAlchemy
  3. from flask_login import UserMixin, LoginManager, login_user, login_required, logout_user, current_user
  4. from forms.authentication import RegisterForm, LoginForm
  5. from forms.todo import TodoForm
  6. from sqlalchemy.exc import IntegrityError
  7. from werkzeug.security import generate_password_hash, check_password_hash
  8.  
  9.  
  10. app = Flask(__name__)
  11. app.config["SECRET_KEY"] = "JSystems1234!"
  12. app.config["SQLALCHEMY_DATABASE_URI"] = "postgresql://postgres:Password!@localhost:5432/projekt"
  13.  
  14. db = SQLAlchemy(app)
  15.  
  16. login_manager = LoginManager()
  17. login_manager.init_app(app)
  18.  
  19.  
  20. class User(UserMixin, db.Model):
  21. id = db.Column(db.Integer, primary_key=True)
  22. email = db.Column(db.String(150), unique=True, nullable=False)
  23. password = db.Column(db.String(255), nullable=False)
  24. todos = db.relationship('Todo', backref='user')
  25.  
  26.  
  27. class Todo(db.Model):
  28. id = db.Column(db.Integer, primary_key=True)
  29. title = db.Column(db.String(300), nullable=False)
  30. due_date = db.Column(db.DateTime, nullable=True)
  31. completed = db.Column(db.Boolean, default=False)
  32. user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
  33.  
  34.  
  35. @login_manager.user_loader
  36. def load_user(user_id):
  37. return User.query.get(user_id)
  38.  
  39.  
  40. @app.route("/")
  41. def mainpage():
  42. return render_template("mainpage.html")
  43.  
  44. @app.route("/register", methods=["GET", "POST"])
  45. def register():
  46. register_form = RegisterForm()
  47. if register_form.validate_on_submit():
  48. email = register_form.email.data
  49. hashed_password = generate_password_hash(register_form.password.data)
  50.  
  51. try:
  52. new_user = User(email=email, password=hashed_password)
  53. db.session.add(new_user)
  54. db.session.commit()
  55. flash('Użytkownik został zarejestrowany', 'success')
  56. except IntegrityError:
  57. flash('Ten login jest już zajęty', 'error')
  58.  
  59. return redirect('/register')
  60.  
  61. return render_template("register.html", form=register_form)
  62.  
  63.  
  64. @app.route("/login", methods=["GET", "POST"])
  65. def login():
  66. login_form = LoginForm()
  67.  
  68. if login_form.validate_on_submit():
  69. email = login_form.email.data
  70. user = User.query.filter_by(email=email).first()
  71.  
  72. if user and check_password_hash(user.password, login_form.password.data):
  73. login_user(user)
  74. return redirect('/tasks')
  75. else:
  76. flash('Błędne dane logowania', 'error')
  77.  
  78. return render_template("login.html", form=login_form)
  79.  
  80.  
  81. @app.route('/logout')
  82. @login_required
  83. def logout():
  84. logout_user()
  85. return redirect('/login')
  86.  
  87.  
  88. @app.route('/todos', methods=["GET", "POST"])
  89. @login_required
  90. def todos_list():
  91. todos = Todo.query.filter_by(user_id=current_user.id).order_by(Todo.due_date.desc()).all()
  92. todo_form = TodoForm()
  93.  
  94. if todo_form.validate_on_submit():
  95. todo = Todo(
  96. title = todo_form.title.data,
  97. due_date = todo_form.due_date.data,
  98. completed = todo_form.completed.data,
  99. user_id = current_user.id
  100. )
  101. db.session.add(todo)
  102. db.session.commit()
  103.  
  104. flash("Nowe zadnie zostało dodane", "sucess")
  105. return redirect("/todos")
  106.  
  107. return render_template("todos.html", todos=todos, form=todo_form)
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement