即插视图

来源:互联网 发布:加拿大地缘政治知乎 编辑:程序博客网 时间:2024/05/17 08:00
#__________________即插视图________________#例子说明:如果有一个从数据库载入对象,然后渲染的函数#1.最简单的是实现方法@app.route('/users/')def show_users():users = User.query.all()return render_template('user.html',users=users)#2.改进下第一种方法from flask.views import Viewclass ShowUsers(View):def dispatch_request(self):users = User.query.all()return render_template('user.html',object=users)app.add_url_rule('/users/',ShowUsers.as_view('show_users'))#3.前两种方法复用性不高,重新优化一下class ListView(View):def get_template_name(self):raise NotImplementedError()#父类传空值,子类负责继承重写def render_template(self,context):return render_template(self.get_template_name,**context)    #重写render_template函数,第一个参数写传参的模板名称,第二个参数传所要填充的数据def dispatch_request(self):context = {'objects':self.get_ojects()}return self.render_template(context)#处理请求从子类填充实例数据,构成完整的渲染请求class UserView(ListView):def get_template_name(self):return 'users.html'def get_objects(self):return User.query.all()class RenderTemplateView(View):    def __init__(self,template_name):    self.template_name = template_name    def dispatch_request(self):    return render_template(self.template_name)#子类负责传输数据,父类负责构建模板#父类相当于一个工厂函数,需要子类向其提供数据#子类中的get_template_name告诉父类要渲染的视图函数名称#子类中的get_object告诉父类要渲染的实例数据app.add_url_rule(UserView)

原创粉丝点击