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'))

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 == '[email protected]' 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'))

猜你喜欢

转载自blog.csdn.net/weixin_51484460/article/details/122641547