zoukankan      html  css  js  c++  java
  • 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'))
  • 相关阅读:
    DHCP Option 60 的理解
    几种开源分词工具的比較
    推荐交互设计师阅读的一本书
    iOS IAP教程
    艰苦的RAW格式数据恢复之旅
    BestCoder Round #11 (Div. 2) 前三题题解
    罗马数字
    mysql 加入列,改动列,删除列。
    杂项:ASP.NET Web API
    杂项:Web API
  • 原文地址:https://www.cnblogs.com/chvv/p/9851230.html
Copyright © 2011-2022 走看看