Source code for app.views.auth
from flask import abort
from flask import Blueprint
from flask import redirect
from flask import render_template
from flask import url_for
from flask_login import login_required
from flask_login import login_user
from flask_login import logout_user
from app import db
from app.models.forms import LoginForm
from app.models.forms import RegistrationForm
from app.models.persons import User
bp = Blueprint("auth", __name__)
[docs]@bp.route("/register", methods=("GET", "POST"))
def register():
"""Registers a new doctor (user) from form data."""
registration_form = RegistrationForm()
if registration_form.validate_on_submit():
firstname = registration_form.firstname.data
lastname = registration_form.lastname.data
username = registration_form.username.data
password = registration_form.password.data
email = registration_form.email.data
user_count = (
User.query.filter_by(username=username).count()
+ User.query.filter_by(email=email).count()
)
if user_count > 0:
return f"<h1>Error! Existing user: {username} OR e-mail: {email} </h1>", 401
else:
user = User(firstname, lastname, username, email, password)
db.session.add(user)
db.session.commit()
return redirect(url_for(".login"))
return render_template("auth/register.html", form=registration_form)
[docs]@bp.route("/login", methods=["GET", "POST"])
def login():
"""Logs in a returning doctor (user)."""
login_form = LoginForm()
if login_form.validate_on_submit():
username = login_form.username.data
password = login_form.password.data
# Look for it in the database.
user = User.query.filter_by(username=username).first()
# Login and validate the user; take them to dashboard page.
if user:
if user.check_password(password):
login_user(user)
return redirect(url_for("patients.patients"))
abort(401)
abort(401)
return render_template("auth/login.html", form=login_form)
[docs]@bp.route("/logout")
@login_required
def logout():
"""Log out the current user."""
logout_user()
return redirect(url_for("home.index"))
[docs]@bp.route("/forgot_password")
def forgot_password():
"""Render form for users to reset their password."""
return render_template("auth/forgot_password.html")