二十五:视图之类视图中使用装饰器

对于url的保护,一般是通过装饰器实现,如:某个页面需要登录后才能访问

函数视图实现

from flask import Flask, render_template, request
from functools import wraps
app = 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_required
def setting():
return '设置页'

类视图实现
类视图中的装饰器,需要重写类视图的一个类属性:decorators,这个列属性是列表或者元祖都可以,需要用多个装饰器时,按执行顺序放进去就行,会按里面的装饰器顺序执行,View中源码如下

如:以上面那个案例修改

from flask import Flask, render_template, request, views
from functools import wraps
app = 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
class 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'))

猜你喜欢

转载自www.cnblogs.com/zhongyehai/p/11795649.html