Fork me on GitHub

Flask学习笔记(十)-标准类视图及使用场景

一、定义规则

1. 标准类视图,必须继承自`flask.views.View`.
2. 必须实现`dipatch_request`方法,以后请求过来后,都会执行这个方法。这个方法的返回值就相当于是之前的函数视图一样。也必须返回`Response`或者子类的对象,或者是字符串,或者是元组。
3. 必须通过`app.add_url_rule(rule,endpoint,view_func)`来做url与视图的映射。`view_func`这个参数,需要使用类视图下的`as_view`类方法类转换:`ListView.as_view('list')`。
4. 如果指定了`endpoint`,那么在使用`url_for`反转的时候就必须使用`endpoint`指定的那个值。如果没有指定`endpoint`,那么就可以使用`as_view(视图名字)`中指定的视图名字来作为反转。
5. 类视图有以下好处:可以继承,把一些共性的东西抽取出来放到父视图中,子视图直接拿来用就可以了。但是也不是说所有的视图都要使用类视图,这个要根据情况而定。

二、标准类视图及使用场景

login.html

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>这是登录页面</title>
</head>
<body>
    这是登录页面
    <p>{{ ads  }}</p>
    登录用户名显示
    <h1>{{ username }}</h1>
</body>
</html>

regist.html  

1
2
3
4
5
6
7
8
9
10
11
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册页面</title>
</head>
<body>
    这是注册页面
    <p>{{ ads }}</p>
</body>
</html>

视图函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
from flask import Flask, render_template, request, views, jsonify
# 实例化app
app = Flask(__name__)
 
#案例01-将jsonify格式的模板抽离出来
class BaseView(views.View):
    # 自定义方法,用来获取模板路径
    def get_data(self):
        raise NotImplementedError()
    # 必须实现的方法,用来处理请求的
    def dispatch_request(self):
        return jsonify(self.get_data())
 
#继承父类
class UserView(BaseView):
    # 重写获取数据的方法
    def get_data(self):
        return {
            'username': 'fake',
            'avatar': 'http://www.baidu.com/'
        }
 
# 类视图通过add_url_rule方法和url做映射
app.add_url_rule('/users/',view_func=UserView.as_view('userview'))
 
 
#案例02-将公共模板变量抽离出来
class ADSview(views.View):
    def __init__(self):
        super(ADSview,self).__init__()
        self.context={
            'ads':'今年过节不收礼'
        }
 
class loginview(ADSview):
    """
    登录视图
    """
    def dispatch_request(self):
        #自定义参数
        self.context.update({'username':'xiaofeng'})
        return render_template('login.html',**self.context)
 
class registview(ADSview):
    """
    注册视图
    """
    def dispatch_request(self):
        return render_template('regist.html',**self.context)
 
# 类视图通过add_url_rule方法和url做映射
app.add_url_rule('/login/',view_func=loginview.as_view('loginview'))
app.add_url_rule('/regist/',view_func=registview.as_view('registview'))
 
if __name__ == '__main__':
    app.run(debug=True)

分别访问:

http://127.0.0.1:5000/login/

 

 http://127.0.0.1:5000/regist/

 

 

 

 

posted @   橘子偏爱橙子  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示