123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- """
- Backend
- """
- from flask_login import login_required, login_user, logout_user, current_user
- from flask_menu import Menu, register_menu
- from flask import render_template, request, redirect, url_for, flash, Blueprint, abort
- from jinja2 import TemplateNotFound
- from app import app, login_manager, db
- from app.models import User, Page
- BLUEPRINT = Blueprint(
- 'backend',
- __name__,
- template_folder='templates'
- )
- @BLUEPRINT.route("/login", methods=["GET", "POST"])
- def login():
- """Handle login page and data"""
- if request.method == 'POST':
- email = request.form['email']
- password = request.form['password']
- user = User.query.filter(User.email == email).first()
- if user is not None:
- if user.check_password(password):
- login_user(user, remember=True)
- flash('You were successfully logged in.', 'success')
- if request.args.get("next") is not None:
- return redirect(request.args.get("next"))
- return redirect(url_for('index'))
- flash('Incorrect password.', 'danger')
- else:
- flash('User not found.', 'danger')
- return redirect(url_for('login'))
- return render_template('user/login.j2')
- @BLUEPRINT.route("/register", methods=["POST"])
- def register():
- """Register a new user"""
- name = request.form['name'] if 'name' in request.form else None
- email = request.form['email'] if 'email' in request.form else None
- password = request.form['password'] if 'email' in request.form else None
- if name is None:
- flash('Fill in the name.', 'warning')
- return render_template('user/login.j2')
- if email is None:
- flash('Fill in the email.', 'warning')
- return render_template(
- 'user/login.j2',
- name=name
- )
- if password is None:
- flash('Fill in the password.', 'warning')
- return render_template(
- 'user/login.j2',
- name=name,
- email=email
- )
- user = User.query.filter(User.email == email).first()
- if user is not None:
- flash('Email already taken.', 'warning')
- return render_template(
- 'user/login.j2',
- name=name,
- )
- user = User()
- user.name = name
- user.email = email
- user.password = password
- db.session.add(user)
- db.session.commit()
- login_user(user, remember=True)
- flash('Successfully registered account "%s".' % (user.name), 'success')
- if request.args.get("next") is not None:
- return redirect(request.args.get("next"))
- return redirect(url_for('backend.index'))
- @BLUEPRINT.route("/logout")
- @login_required
- def logout():
- """Logout function for users"""
- logout_user()
- flash('Successfully logged out.', 'success')
- return redirect(url_for('login'))
- @BLUEPRINT.route('/')
- @register_menu(BLUEPRINT, 'index', 'Home')
- @login_required
- def index():
- """Show homepage"""
- pages = Page.query.all()
- return render_template('site/index.j2', pages=pages)
- @BLUEPRINT.route('/page/create', methods=["GET", "POST"])
- @register_menu(BLUEPRINT, 'page_create', 'Create page')
- @login_required
- def create_page():
- """Page creating"""
- if request.method == 'POST':
- page = Page()
- page.title = request.form['title']
- page.source = request.form['source']
- page.user_id = current_user.id
- db.session.add(page)
- db.session.commit()
- flash('Page "%s" successfully created' % page.title, 'success')
- return render_template('page/create.j2')
- @BLUEPRINT.route('/page/edit/<int:page_id>', methods=["GET", "POST"])
- @login_required
- def edit_page(page_id):
- """Page editing"""
- page = Page.query.get(page_id)
- if request.method == 'POST':
- page.title = request.form['title']
- page.source = request.form['source']
- page.user_id = current_user.id
- db.session.add(page)
- db.session.commit()
- flash('Page "%s" successfully edit' % page.title, 'success')
- return render_template('page/edit.j2', page=page)
- @BLUEPRINT.route('/page/view/<int:page_id>')
- @login_required
- def view_page(page_id):
- """Display page"""
- page = Page.query.get(page_id)
- return render_template('page/view.j2', page=page)
|