flask中的登录验证 装饰器版 befor_request版

一,第一种登录验证

  

@app01.route('/login',methods=["GET","POST"])
def login():
    if request.method == "GET":
        return render_template('login.html')

    username = request.form.get("username")
    password = request.form.get("password")
    if username == "chen" and password == "123":
        session['user'] = username

        return redirect('/index')
    return render_template('login.html',error="用户名或密码错误")
    # return render_template('login.html',**{"error":"用户名或密码错误"})

@app01.route('/index')
def index():
    user = session.get("user")
    print(user)
    if not user:
        return redirect('/login')

    return render_template('index.html')

二 第二种登录验证---装饰器版

  

import functools
def check_login(func):
@functools.wraps(func)

def inner(*args,**kwargs):
next_url = request.path #获取登录之前的页面路径
print("=====",next_url)

if session.get('user'):
return func(*args,**kwargs)
else:
return redirect(url_for('login',next=next_url))

return inner

@app.route('/login',methods=["GET","POST"])
def login():
if request.method == "GET":
return render_template("login.html")
username = request.form.get("username")
password = request.form.get("password")
if username == "chen" and password == "123":
session["user"] = username
print("====")
print(request.args.get('next'))
print("====")
next_url = request.args.get('next')
print(request.full_path)

return redirect(next_url) #跳转到登录之前的页面


return render_template("login.html")
@app.route('/logout')
def logout():
# 删除所有当前请求相关的session
session.pop("user")
return redirect(url_for('login'))

@app.route('/index')
@check_login
def index():

print(request.full_path)
print(request.path)
print(request.url)
print(request.url_root)
print(request.url_rule)

return render_template("index.html",sut_dict = STUDENT_DICT)


@app.route('/detail/<int:nid>')
@check_login
def detail(nid):
info = STUDENT_DICT[nid]

return render_template("detail.html",info=info)


@app.route('/delete/<int:nid>')
@check_login
def delete(nid):
del STUDENT_DICT[nid]
return redirect(url_for('index'))

三  第三种登录验证 before_request

  

@app.before_request
def check_login():
    if request.path == '/login':
        return None
    if session.get('user'):
        return None
    return redirect('/login')


@app.route('/login',methods=["GET","POST"])
def login():
    if request.method == "GET":
        return render_template("login.html")
    username = request.form.get("username")
    password = request.form.get("password")
    if username == "chen" and password == "123":
        session["user"] = username
        return redirect('/index')

    return render_template("login.html")

@app.route('/index')
def index():
    user = session.get("user")
    if not user:
        return redirect('/login')
    return render_template("index.html",sut_dict = STUDENT_DICT)


@app.route('/detail/<int:nid>')
def detail(nid):
    info = STUDENT_DICT[nid]

    return render_template("detail.html",info=info)


@app.route('/delete/<int:nid>')
def delete(nid):
    del STUDENT_DICT[nid]
    return redirect(url_for('index'))
原文地址:https://www.cnblogs.com/chvv/p/9851230.html