对于url的保护,一般是通过装饰器实现,如:某个页面需要登录后才能访问
函数视图实现
from flask import Flask, render_template, requestfrom functools import wrapsapp = Flask(__name__)def login_required(func): @wraps(func) def wrapper(*args, **kwargs): username = request.args.get(‘username‘) return func(*args, **kwargs) if username == ‘aaa‘ else ‘请先登录‘ return wrapper@app.route(‘/setting/‘)@login_requireddef setting(): return ‘设置页‘
类视图实现
类视图中的装饰器,需要重写类视图的一个类属性:decorators,这个列属性是列表或者元祖都可以,需要用多个装饰器时,按执行顺序放进去就行,会按里面的装饰器顺序执行,View中源码如下
如:以上面那个案例修改
from flask import Flask, render_template, request, viewsfrom functools import wrapsapp = Flask(__name__)def login_required(func): @wraps(func) def wrapper(*args, **kwargs): username = request.args.get(‘username‘) return func(*args, **kwargs) if username == ‘aaa‘ else ‘请先登录‘ return wrapperclass Setting(views.View): decorators = [login_required] # 将自己实现的装饰器放在decorators的列表中即可,decorators为flask.views.View下定义的属性 def dispatch_request(self): return ‘设置页‘app.add_url_rule(‘/setting/‘, view_func=Setting.as_view(‘setting‘))
原文地址:https://www.cnblogs.com/zhongyehai/p/11795649.html
时间: 2024-07-31 00:11:05