app.py 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. """
  2. Backend
  3. """
  4. from flask_login import login_required, login_user, logout_user, current_user
  5. from flask_menu import Menu, register_menu
  6. from flask import render_template, request, redirect, url_for, flash, Blueprint, abort
  7. from jinja2 import TemplateNotFound
  8. from app import app, login_manager, db
  9. from app.models import User, Page
  10. BLUEPRINT = Blueprint(
  11. 'backend',
  12. __name__,
  13. template_folder='templates'
  14. )
  15. @BLUEPRINT.route("/login", methods=["GET", "POST"])
  16. def login():
  17. """Handle login page and data"""
  18. if request.method == 'POST':
  19. email = request.form['email']
  20. password = request.form['password']
  21. user = User.query.filter(User.email == email).first()
  22. if user is not None:
  23. if user.check_password(password):
  24. login_user(user, remember=True)
  25. flash('You were successfully logged in.', 'success')
  26. if request.args.get("next") is not None:
  27. return redirect(request.args.get("next"))
  28. return redirect(url_for('index'))
  29. flash('Incorrect password.', 'danger')
  30. else:
  31. flash('User not found.', 'danger')
  32. return redirect(url_for('login'))
  33. return render_template('user/login.j2')
  34. @BLUEPRINT.route("/register", methods=["POST"])
  35. def register():
  36. """Register a new user"""
  37. name = request.form['name'] if 'name' in request.form else None
  38. email = request.form['email'] if 'email' in request.form else None
  39. password = request.form['password'] if 'email' in request.form else None
  40. if name is None:
  41. flash('Fill in the name.', 'warning')
  42. return render_template('user/login.j2')
  43. if email is None:
  44. flash('Fill in the email.', 'warning')
  45. return render_template(
  46. 'user/login.j2',
  47. name=name
  48. )
  49. if password is None:
  50. flash('Fill in the password.', 'warning')
  51. return render_template(
  52. 'user/login.j2',
  53. name=name,
  54. email=email
  55. )
  56. user = User.query.filter(User.email == email).first()
  57. if user is not None:
  58. flash('Email already taken.', 'warning')
  59. return render_template(
  60. 'user/login.j2',
  61. name=name,
  62. )
  63. user = User()
  64. user.name = name
  65. user.email = email
  66. user.password = password
  67. db.session.add(user)
  68. db.session.commit()
  69. login_user(user, remember=True)
  70. flash('Successfully registered account "%s".' % (user.name), 'success')
  71. if request.args.get("next") is not None:
  72. return redirect(request.args.get("next"))
  73. return redirect(url_for('backend.index'))
  74. @BLUEPRINT.route("/logout")
  75. @login_required
  76. def logout():
  77. """Logout function for users"""
  78. logout_user()
  79. flash('Successfully logged out.', 'success')
  80. return redirect(url_for('login'))
  81. @BLUEPRINT.route('/')
  82. @register_menu(BLUEPRINT, 'index', 'Home')
  83. @login_required
  84. def index():
  85. """Show homepage"""
  86. pages = Page.query.all()
  87. return render_template('site/index.j2', pages=pages)
  88. @BLUEPRINT.route('/page/create', methods=["GET", "POST"])
  89. @register_menu(BLUEPRINT, 'page_create', 'Create page')
  90. @login_required
  91. def create_page():
  92. """Page creating"""
  93. if request.method == 'POST':
  94. page = Page()
  95. page.title = request.form['title']
  96. page.source = request.form['source']
  97. page.user_id = current_user.id
  98. db.session.add(page)
  99. db.session.commit()
  100. flash('Page "%s" successfully created' % page.title, 'success')
  101. return render_template('page/create.j2')
  102. @BLUEPRINT.route('/page/edit/<int:page_id>', methods=["GET", "POST"])
  103. @login_required
  104. def edit_page(page_id):
  105. """Page editing"""
  106. page = Page.query.get(page_id)
  107. if request.method == 'POST':
  108. page.title = request.form['title']
  109. page.source = request.form['source']
  110. page.user_id = current_user.id
  111. db.session.add(page)
  112. db.session.commit()
  113. flash('Page "%s" successfully edit' % page.title, 'success')
  114. return render_template('page/edit.j2', page=page)
  115. @BLUEPRINT.route('/page/view/<int:page_id>')
  116. @login_required
  117. def view_page(page_id):
  118. """Display page"""
  119. page = Page.query.get(page_id)
  120. return render_template('page/view.j2', page=page)