Flask学习与项目实战4:视图高级之蓝图和子域名、类视图
蓝图与子域名
对于大项目,代码都不放在app.py里面,需要分类。
即类似javaspringboot中的分层?每个功能分为一个更小规格的层次。
url_prefix 就是 蓝图的前缀。
和book相关的都在book中,和用户有关的都在user中。
然后在主视图中即app.py中进行导入即可。
现在就是不同模块根据功能分类了,然后统一注册,通过register_blueprint去注册即可使用了。
如果蓝图中想要渲染模板,还是会从templates中去寻找的。(静态文件也是如此,也是去static中寻找的。)
类视图
上述的过程中接触的都是函数视图,这些视图也可以基于类来实现的。
类视图实现的好处就是支持继承。但是类视图不能跟函数视图一样,写完类视图还需要通过app.add_url_rule(url_rule,view_func)来进行注册。以下将对两种类视图进行讲解:
1、标准类视图
标准类视图是继承自flask.views.View,并且在子类中必须实现dispatch_request方法,这个方法类似于视图函数,也要返回一个基于Response或者其子类的对象。
from flask.views import View
class PersonalView(View):
def dispatch_request(self):
return "知了课堂"
# 类视图通过add_url_rule方法和url做映射
app.add_url_rule('/users/',view_func=PersonalView.as_view('personalview'))
- 1
- 2
- 3
- 4
- 5
- 6
2、基于调度方法的视图
Flask还为我们提供了另外一种类视图flask.views.MethodView,对每个HTTP方法执行不同的函数(映射到对应方法的小写的同名方法上。
class LoginView(views.MethodView):
# 当客户端通过get方法进行访问的时候执行的函数
def get(self):
return render_template("login.html")
# 当客户端通过post方法进行访问的时候执行的函数
def post(self):
email = request.form.get("email")
password = request.form.get("password")
if email == 'xx@qq.com' and password == '111111':
return "登录成功!"
else:
return "用户名或密码错误!"
# 通过add_url_rule添加类视图和url的映射,并且在as_view方法中指定该url的名称,方便url_for函数调用
app.add_url_rule('/myuser/',view_func=LoginView.as_view('loginview'))
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
文章来源: blog.csdn.net,作者:洲的学习笔记,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_51484460/article/details/122641547
- 点赞
- 收藏
- 关注作者
评论(0)