Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 需要默认登录,而不是到处添加装饰程序_Python_Flask_Flask Httpauth - Fatal编程技术网

Python 需要默认登录,而不是到处添加装饰程序

Python 需要默认登录,而不是到处添加装饰程序,python,flask,flask-httpauth,Python,Flask,Flask Httpauth,我正在使用Flask HTTPAuth在我的应用程序中处理身份验证。我有很多视图,我不想将login\u required添加到每个视图中。默认情况下,如何使登录成为必需 from flask.ext.httpauth import HTTPBasicAuth auth = HTTPBasicAuth() @auth.verify_password def verify_password(username, password): return username == '111' and

我正在使用Flask HTTPAuth在我的应用程序中处理身份验证。我有很多视图,我不想将
login\u required
添加到每个视图中。默认情况下,如何使登录成为必需

from flask.ext.httpauth import HTTPBasicAuth
auth = HTTPBasicAuth()

@auth.verify_password
def verify_password(username, password):
    return username == '111' and password == '222'

@app.route('/')
@app.route('/home/')
@auth.login_required
def index():
    return 'Hello'

@app.route('/route2/')
def route2():
    return 'route2'

app.secret_key = 'A0Zr98j/3yX R~XHH!jmN]LWX/,?RT'

您可以在请求之前添加一个
函数,默认情况下需要登录,并为少数不需要它的路由创建一个简单的
login\u豁免
装饰器

确保免除静态文件,否则未经身份验证的用户将无法加载静态文件

Flask HTTPAuth的
login\u required
无法将require逻辑与视图装饰程序分开,您需要经历一个小过程来要求auth而不运行视图

def login_exempt(f):
    f.login_exempt = True
    return f

# a dummy callable to execute the login_required logic
login_required_dummy_view = auth.login_required(lambda: None)

@app.before_request
def default_login_required():
    # exclude 404 errors and static routes
    # uses split to handle blueprint static routes as well
    if not request.endpoint or request.endpoint.rsplit('.', 1)[-1] == 'static':
        return

     view = current_app.view_functions[request.endpoint]

     if getattr(view, 'login_exempt', False):
         return

     return login_required_dummy_view()

# for example, the login page shouldn't require login
@app.route('/login', methods=['GET', 'POST'])
@login_exempt
def login():
    pass