zoukankan      html  css  js  c++  java
  • Flask登录认证

    login函数

    @app.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
        # POST
        user = request.form.get('user')
        pwd = request.form.get('pwd')
        if user == 'tom' and pwd == '123':
            session['user'] = user
            return redirect('/index/')
        else:
            return render_template('login.html', error='账号或密码错误')

    1、判断逻辑直接写在视图函数中(low)

    @app.route('/index/')
    def index():
        if session.get('user'):
            return render_template('index.html')
        return redirect('/login/')

    2、使用装饰器(适用于,需要登录较少的网站)

    def wrapper(func):
        @wraps(func)
        def inner(*args, **kwargs):
            if not session.get('user'):
                return redirect('/login/')
            ret = func(*args, **kwargs)
            return ret
        return inner
    @app.route('/index/')
    @wrapper
    def index():
        # if session.get('user'):
        #     return render_template('index.html')
        # return redirect('/login/')
        return render_template('index.html')

    3、befer_request ===>相当于Django中的process_request

    # -*- encoding: utf-8 -*-
    from flask import Flask, render_template, request, redirect, session
    from functools import wraps
    app = Flask(__name__)
    app.secret_key = 'abc'
    
    
    # def wrapper(func):
    #     @wraps(func)
    #     def inner(*args, **kwargs):
    #         if not session.get('user'):
    #             return redirect('/login/')
    #         ret = func(*args, **kwargs)
    #         return ret
    #     return inner
    @app.before_request
    def auth():
        if request.path == '/login/':
            return None
        if session.get('user'):
            return None
        else:
            return redirect('/login/')
    
    
    @app.route('/login/', methods=['GET', 'POST'])
    def login():
        if request.method == 'GET':
            return render_template('login.html')
        # POST
        user = request.form.get('user')
        pwd = request.form.get('pwd')
        if user == 'tom' and pwd == '123':
            session['user'] = user
            return redirect('/index/')
        else:
            return render_template('login.html', error='账号或密码错误')
    
    
    @app.route('/test/')
    def test():
        return render_template('test.html')
    
    
    @app.route('/index/')
    def index():
        # if session.get('user'):
        #     return render_template('index.html')
        # return redirect('/login/')
        return render_template('index.html')
    #
    
    
    if __name__ == '__main__':
        app.run()
  • 相关阅读:
    Java并发编程:线程池的使用
    AlarmManager与PendingIntent
    ConnectivityManager与检查网络连接的使用
    IntentService的使用
    Service(Local Service)简介
    Looper、Hander、HandlerThread
    XML_PULL解析
    android AsyncTask 的使用(转载)
    android 连接网络的简单实例
    xml drawable
  • 原文地址:https://www.cnblogs.com/wt7018/p/11599279.html
Copyright © 2011-2022 走看看