flask 视图高级知识笔记

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'))

类视图函数装饰

  1. 普通函数装饰器,需要放在 app.route() 这个装饰器的后面,否则不能起作用
  2. 类视图函数中的装饰器,需要重写类属性 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'))

你可能感兴趣的:(flask 视图高级知识笔记)