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/
本文来自博客园,作者:橘子偏爱橙子,转载请注明原文链接:https://www.cnblogs.com/xfbk/p/16759484.html
分类:
flask系列
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!