auth.py — flask Source File
Architecture documentation for auth.py, a python file in the flask codebase. 5 imports, 1 dependents.
Entity Profile
Dependency Diagram
graph LR 749d9792_d880_75ed_5ccb_68e2218e2db3["auth.py"] 09048b06_50a3_09e1_0ff4_ee97994a3e9b["db.py"] 749d9792_d880_75ed_5ccb_68e2218e2db3 --> 09048b06_50a3_09e1_0ff4_ee97994a3e9b adc04a87_eacf_cc39_8808_98d7d38c7044["get_db"] 749d9792_d880_75ed_5ccb_68e2218e2db3 --> adc04a87_eacf_cc39_8808_98d7d38c7044 3eebf5bc_1ef0_6524_701b_beec8ec8524a["functools"] 749d9792_d880_75ed_5ccb_68e2218e2db3 --> 3eebf5bc_1ef0_6524_701b_beec8ec8524a 8c762fc5_c0b6_0d4d_3889_896d80fbf225["flask"] 749d9792_d880_75ed_5ccb_68e2218e2db3 --> 8c762fc5_c0b6_0d4d_3889_896d80fbf225 c064b645_acb1_3269_4e88_d0ee8232789e["werkzeug.security"] 749d9792_d880_75ed_5ccb_68e2218e2db3 --> c064b645_acb1_3269_4e88_d0ee8232789e bf08e60d_e030_cf15_e246_1de85afd9b5e["blog.py"] bf08e60d_e030_cf15_e246_1de85afd9b5e --> 749d9792_d880_75ed_5ccb_68e2218e2db3 style 749d9792_d880_75ed_5ccb_68e2218e2db3 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
import functools
from flask import Blueprint
from flask import flash
from flask import g
from flask import redirect
from flask import render_template
from flask import request
from flask import session
from flask import url_for
from werkzeug.security import check_password_hash
from werkzeug.security import generate_password_hash
from .db import get_db
bp = Blueprint("auth", __name__, url_prefix="/auth")
def login_required(view):
"""View decorator that redirects anonymous users to the login page."""
@functools.wraps(view)
def wrapped_view(**kwargs):
if g.user is None:
return redirect(url_for("auth.login"))
return view(**kwargs)
return wrapped_view
@bp.before_app_request
def load_logged_in_user():
"""If a user id is stored in the session, load the user object from
the database into ``g.user``."""
user_id = session.get("user_id")
if user_id is None:
g.user = None
else:
g.user = (
get_db().execute("SELECT * FROM user WHERE id = ?", (user_id,)).fetchone()
)
@bp.route("/register", methods=("GET", "POST"))
def register():
"""Register a new user.
Validates that the username is not already taken. Hashes the
password for security.
"""
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
db = get_db()
error = None
if not username:
error = "Username is required."
elif not password:
error = "Password is required."
if error is None:
try:
db.execute(
"INSERT INTO user (username, password) VALUES (?, ?)",
(username, generate_password_hash(password)),
)
db.commit()
except db.IntegrityError:
# The username was already taken, which caused the
# commit to fail. Show a validation error.
error = f"User {username} is already registered."
else:
# Success, go to the login page.
return redirect(url_for("auth.login"))
flash(error)
return render_template("auth/register.html")
@bp.route("/login", methods=("GET", "POST"))
def login():
"""Log in a registered user by adding the user id to the session."""
if request.method == "POST":
username = request.form["username"]
password = request.form["password"]
db = get_db()
error = None
user = db.execute(
"SELECT * FROM user WHERE username = ?", (username,)
).fetchone()
if user is None:
error = "Incorrect username."
elif not check_password_hash(user["password"], password):
error = "Incorrect password."
if error is None:
# store the user id in a new session and return to the index
session.clear()
session["user_id"] = user["id"]
return redirect(url_for("index"))
flash(error)
return render_template("auth/login.html")
@bp.route("/logout")
def logout():
"""Clear the current session, including the stored user id."""
session.clear()
return redirect(url_for("index"))
Domain
Subdomains
Imported By
Source
Frequently Asked Questions
What does auth.py do?
auth.py is a source file in the flask codebase, written in python. It belongs to the ApplicationCore domain, ExtensionRegistry subdomain.
What functions are defined in auth.py?
auth.py defines 5 function(s): load_logged_in_user, login, login_required, logout, register.
What does auth.py depend on?
auth.py imports 5 module(s): db.py, flask, functools, get_db, werkzeug.security.
What files import auth.py?
auth.py is imported by 1 file(s): blog.py.
Where is auth.py in the architecture?
auth.py is located at examples/tutorial/flaskr/auth.py (domain: ApplicationCore, subdomain: ExtensionRegistry, directory: examples/tutorial/flaskr).
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free