![afbdd2182e053aebe3e0d4c57040e7a3.png](https://i-blog.csdnimg.cn/blog_migrate/38d007683943c66363ea838f2815f95c.jpeg)
类是编程的重要思想,也是继承相同部分的主要方式。之前我们用extends继承模板,那Flask中有没有类继承呢?
当然有,类视图就是!
之前我们接触的视图都是函数,所以一般简称为视图函数。其实视图函数也可以基于类来实现,类视图的好处是支持继承,可以把一些共性的东西放在父类中,其他子类可以继承。
编写完类视图需要通过app.add_url_rule(url_rule, view_func)来进行注册,Flask类视图一般分为标准类视图和基于调度方法的类视图。
一、标准类视图
标准类视图的特点:
l 必须继承flask.views.Views
l 必须实现dispatch_request方法,但凡遇到请求过来,都会执行这个方法,这个方法的返回值相当于之前的视图函数,必须返回Response或者子类的对象,或者是字符串、元组。
l 必须通过app.add_url_rule(url_rule, view_func)来做URL与视图的映射,view_func参数需要使用as_view类方法转换。
l 如果指定了endpoint,那么在使用url_for反转时就必须使用endpoint指定的那个值;如果没有指定endpoint,那么就可以使用as_view(视图名称)中指定的视图名称来作为反转。
如果一个网站有首页、注册页和登陆页面,每个页面要求放置一个同样的对联广告,使用类视图函数如何实现呢?
新建login.html、register.html和index.html及app.py文件。app.py文件内容如下:
from flask import Flask,render_template,views
app = Flask(__name__)
class Ads(views.View):
def __init__(self) :
super().__init__()
self.context = {
'ads':'这是对联广告!'
}
class Index(Ads) :