1. add_url_rule(rule,endponint=None,view_func)
这个方法用来添加url与视图函数的映射。如果没有填写 endpoint
这个参数,那么使用 view_func
的名字作为 endpoint
参数。以后在使用url_for()
函数时,就应该使用endpoint
这个字符串。
2. app.route(rule,**options)
装饰器
这个装饰器底层也是使用的 add_url_rule()
这个函数实现的url与视图函数的映射的。
3. 类视图
视图也可以通过类来实现,类视图的好处是支持继承,类视图不像函数视图一样,类视图还需要注册,通过add_url_rule(url_rule,view_func)
来注册
标准视图
标准视图继承自 flask.views.View
,并且在子类中必须实现dispatch_request
方法,这个方法类似于 视图函数,也要返回一个基于 Response
或其子类的对象。
注册的时候,使用 view_func
参数 ,使用类视图.as_views(视图名称)
这类方法。例如:
# step1:定义标准视图类
class UserView(View):
def dispatch_request(self):
return '用户页面'
# step2: 添加映射
app.add_url_rule(rule='/user/', endpoint='user', view_func=UserView.as_view('user'))
基于调度方法的视图
Flask
还为我们提供了一种类视图 flask.views.MethodView
,
对每个 HTTP 方法执行不同的函数(映射到对应方法的同名小写的方法上),
这对 Restful API
尤其有用,例子如下:
# step1:定义类
class ApiView(MethodView):
def get(self):
return 'get'
def post(self):
return 'post'
# step2:映射
app.add_url_rule(rule='/api/', endpoint='api', view_func=ApiView.as_view('api'))
类视图函数装饰
- 普通函数装饰器,需要放在
app.route()
这个装饰器的后面,否则不能起作用 - 类视图函数中的装饰器,需要重写类属性
decorators
,这个属性是列表或则元组
装的是所有的自定义的装饰器,示例如下:
# 装饰函数,用于判断用户是否登陆过,限制对部分页面的访问
def login_require(func):
@wraps(func)
def wrapper(*args, **kwargs):
# 此处模拟 验证过程
username = request.args.get('username')
if username and username == 'ck':
return func(*args, **kwargs)
else:
return '请先登陆'
return wrapper
# 视图类
class ProfileView(views.View):
decorators = [login_require] # 添加自定义的装饰器
def dispatch_request(self):
return '这是个人中心页面'
app.add_url_rule('/profile/', view_func=ProfileView.as_view('profile'))