当前位置: 代码迷 >> 综合 >> flask 中类视图的使用(一)
  详细解决方案

flask 中类视图的使用(一)

热度:78   发布时间:2023-11-27 21:50:38.0

类视图

     之前我们接触的视图都是函数,所以一般简称视图函数。其实视图也可以基于类来实现,类视图的好处是支持继承,但是类视图不能跟函数视图一样,写完类视图还需要通过app.add_url_rule(url_rule,view_func)来进行注册。以下先对标准类视图进行讲解

1.标准类视图使用步骤

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(视图名字)`中指定的视图名字来作为反转。

from flask import Flask,views,url_forapp = Flask(__name__)@app.route('/')
def hello_world():return 'Hello World!'#定义一个类视图
class  ListView(views.View):def dispatch_request(self):return "这是List列表"#注册类视图
app.add_url_rule('/list/',endpoint='mlist',view_func=ListView.as_view('my_list'))with  app.test_request_context():#若注册url时,没有指定endpoint,使用as_view()方法中的名称  来构建url# print(url_for('my_list'))# 若注册url时,有指定endpoint,就不能再使用as_view()方法中的名称 来构建url,而要使用endpoint的值来构建urlprint(url_for('mlist'))

2.类视图的好处

     1.可以继承,把一些共性的东西抽取出来放到父视图中,子视图直接拿来用就可以了。

     2.但是也不是说所有的视图都要使用类视图,这个要根据情况而定。视图函数用得最多

#类视图的好处:
#需求:以后有 好几个url,都需要返回json对象的格式
class  ListView2(views.View):def  getData(self):raise  NotImplementedErrordef  dispatch_request(self):return  jsonify(self.getData())class  JSONView(ListView2):def getData(self):return {'uname':'momo','age':'22'}class  JSONView2(ListView2):def getData(self):return {'bname':'水浒传','price':'89'}app.add_url_rule('/json/',view_func=JSONView.as_view('my_json'))
app.add_url_rule('/json2/',view_func=JSONView2.as_view('my_json2')