• 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属性里加入装饰器名称即可。

     访问结果:

  • 相关阅读:
    Math类操作数据
    java之静态方法与非静态方法
    使用Date和SimpleDateFormat类表示时间
    Java 中基本类型和字符串之间的转换
    Python基础
    生成对抗网络
    机器翻译
    语义角色标注
    个性化推荐
    词向量
  • 原文地址:https://www.cnblogs.com/wangyi0419/p/12677442.html
Copyright © 2020-2023  润新知