Flask学习笔记(2):类视图

类视图分为标准类视图和基于请求方法的类视图。

标准类视图

注意:

1、标准类视图必须继承自flask.views.View;
2、必须重写dispatch_request()方法,其返回值跟以前的视图函数返回值一样;

3、必须通过add_url_rule()方法建立起url规则和视图函数之间的映射关系;
4、view_func本来为视图函数名,但在类视图中不存在视图函数,故通过调用类方法as_view()传入一个视图函数名;

5、对于endpoint,指定则在url_for反转时用指定值,不指定则在url_for反转时直接用as_view()中传入的视图函数名。

基于请求方法的类视图

在之前的视图函数中用if判断语句判断客户端的请求方法是什么,get或post,再根据请求方法来返回相应的模板或做进一步处理,如在登录过程中验证登录信息是否正确等。现在通过类视图来实现这种功能。

以用户登录为例:

这里将渲染模板操作抽离成一个私有方法,在get或post方法里调用;

该类继承自flask.view.MethodView,可根据用户的请求方式执行对应的get或post或其他方法。在post请求中对请求数据做了些基本的必要验证。

前端html代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>login</title>
 6 </head>
 7 <body>
 8 <form action="" method="post">
 9     <table>
10         <tr>
11             <td>用户名:</td>
12             <td><input type="text" name="username" ></td>
13         </tr>
14         <tr>
15             <td>密码:</td>
16             <td><input type="password" name="password" ></td>
17         </tr>
18         <tr>
19             <td></td>
20             <td><input type="submit" value="立即登录" ></td>
21         </tr>
22     </table>
23 </form>
24     {% if error %}
25         <p style="color: red">{{ error }}</p>
26     {% endif %}
27 
28 </body>
29 </html>

 

请求结果:

 

 

 

类视图的装饰器

假如有个需求,只有登录状态下才能查看用户个人中心。

先写个装饰器函数login_required,对视图函数profiles()进行装饰,注意,这里从functools导入了wraps装饰器对wrapper函数进行了内部装饰,

至于为什么这么做我也不太清楚,没看懂wraps里面的partial这个类。但是加不加这个装饰器有个区别体现在视图函数里面的print(xxx.__name__)的输出内容,

加wraps装饰器的结果是:profiles;不加则是:wrapper。

不加的时候很好理解,内层装饰器login_required相当于: profiles = login_required(profiles)=wrapper。

 

 这样一来直接访问个人中心会提示:

加上用户名参数后:

 

 

现在在类视图里添加装饰器:

定义一个类视图,直接在里面的decorators属性里加入装饰器名称即可。

 

 访问结果:

 

 

posted @ 2020-04-11 20:01  天青色wy  阅读(663)  评论(0编辑  收藏  举报