目录
4、修改apps下__init__创建一个flask得app函数
2、user下新建resgister.html show.html login.html
1、templates/user下新增update.html
Flask 使用了 蓝图 的概念在一个应用或者跨应用中构建应用组件以及支持通用模式。 蓝图很好地简化了大型应用工作的方式,并提供给 Flask 扩展在应用上注册操作的核心方法。 一个 Blueprint
对象与 Flask
应用对象的工作方式很像,但它确实不是一个应用, 而是一个描述如何构建或扩展应用的 蓝图 。
一、为什么用蓝图?
Flask中的蓝图旨在针对这些情况:
- 把一个应用分解成一系列的蓝图。对于大型的应用是理想化的;一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图。
- 以一个 URL 前缀和/或子域在一个应用上注册蓝图。 URL 前缀/子域名中的参数即成为这个蓝图下的所有视图函数的共同的视图参数(默认情况下)。
- 在一个应用中用不同的 URL 规则多次注册一个蓝图。
- 通过蓝图提供模板过滤器、静态文件、模板和其它功能。一个蓝图不一定要实现应用或视图函数。
- 初始化一个 Flask 扩展时,在这些情况中注册蓝图。
Flask 中的蓝图不是即插应用,因为它实际上并不是一个应用 – 它是可以注册,甚至可以多次注册到应用上的操作集合。为什么不使用多个应用对象?你可以做到那样 (见 应用调度 ),但是你的应用会有分开的配置,并在 WSGI 层管理。
蓝图作为 Flask 层提供分割的替代,共享应用配置,并且可以更改所注册的应用对象。其短板是你不能在应用创建后撤销注册一个蓝图而不销毁整个应用对象。
二、蓝图的概念
蓝图的基本设想是它们记录注册到一个应用时的操作执行情况。 当从一个端点到另一端分发请求和生成 URL 时,Flask 关联视图函数和蓝图。
三、简单示例
1、新增apps包
2、apps下新增包user、order、goods
3、在包user下创建view.py
from flask import Blueprint
user_bp = Blueprint('user', __name__)
@user_bp.route('/')
def user_center():
return '用户中心'
@user_bp.route('/register', methods=['GET', 'POST'])
def register():
return '用户注册'
@user_bp.route('/login', methods=['GET', 'POST'])
def login():
return '用户登录'
@user_bp.route('/logout', methods=['GET', 'POST'])
def logout():
return '用户退出'
4、修改apps下__init__创建一个flask得app函数
from flask import Flask
import settings
from apps.user.view import user_bp
def create_app():
app = Flask(__name__)
# 加载配置
app.config.from_object(settings)
# 蓝图 ,将蓝图对象绑定到app上
app.register_blueprint(user_bp)
print(app.url_map)
return app
if __name__ == '__main__':
app = create_app()
app.run()
5、改造app.py
from flask import Flask
from apps import create_app
app = create_app()
if __name__ == '__main__':
app.run()
6、启动服务
一个简单示例完成
四、改造简单示例
1、templates下新建user文件夹
2、user下新建resgister.html show.html login.html
3、templates下新建base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>
{% block title %} 父模板的title{% endblock %}
</title>
<style>
#head{
height: 50px;
background-color: bisque;
}
#head ul{
list-style: none;
height: 50px;
}
#head ul li{
float: left;
width: 100px;
text-align: center;
font-size: 15px;
line-height: 50px;
}
#middle{
height: 100%;
background-color: azure;
}
#foot{
height: 50px;
line-height: 50px;
background-color: darkolivegreen;
}
</style>
{% block modle_style %}{% endblock %}
</head>
<body>
<div id="head">
<ul>
<li><a href="">首页</a></li>
<li><a href="">秒杀</a><</li>
<li><a href="">