使用
创建user.py
<span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Blueprint
<span class="hljs-comment"># 创建蓝本对象</span>
user = Blueprint(<span class="hljs-string">'user'</span>, __name__)
<span class="hljs-comment"># 添加路由(视图函数)</span>
<span class="hljs-meta">@user.route('/login/')</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">login</span><span class="hljs-params">()</span>:</span>
<span class="hljs-keyword">return</span> <span class="hljs-string">'欢迎登录'</span>
manage.py
<span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Flask
<span class="hljs-keyword">from</span> user <span class="hljs-keyword">import</span> user <span class="hljs-comment"># 导入蓝本对象user</span>
app = Flask(__name__)
<span class="hljs-comment"># 注册蓝本对象</span>
app.register_blueprint(user)
app.register_blueprint(user, url_prefix=<span class="hljs-string">'/user'</span>)
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
app.run()
访问
http://127.0.0.1:5000/login/
http://127.0.0.1:5000/user/login/
project/
--|app.py 初始化整个应用的文件
--|configs 配置目录
--|--|__init__.py 声明configs为一个包
--|--|defaultConfig.py 默认配置模块
--|--|developmentConfig.py 开发环境配置模块
--|--|productionConfig.py 生产环境配置模块
--|--|testingConfig.py 测试配置模块
--|exts 加载第三方扩展库目录
--|--|__init__.py 声明exts为一个包
--|--|db.py 操作数据库的模块
--|myApp 包含整个应用文件目录
--|--|__init__.py 声明myApp为一个包
--|--|api 包含所有蓝本文件的目录
--|--|--|__init__.py 声明api为一个包
--|--|index.py 包含首页操作的视图蓝本文件
--|--|models 包含所有模型文件的目录
--|--|--|__init__.py 声明models为一个包
--|static 静态资源目录
--|--|img 图片文件
--|--|css css样式文件
--|--|js js文件
--|templates 模板目录
--|manage.py 工程启动文件
myApp 应用
在工程目录下创建包目录(目前起名为myApp,以后视情况而修改)
api 路由视图
解决:flask提供的解决方案是蓝图
在应用目录下创建名为api的包目录:
__init__.py
from .main import main
main.py
<span class="hljs-comment"># 蓝图类</span>
<span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Blueprint
main = Blueprint(<span class="hljs-string">"main"</span>, __name__)
<span class="hljs-meta">@main.route('/')</span>
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">hello_world</span><span class="hljs-params">()</span>:</span>
<span class="hljs-keyword">return</span> <span class="hljs-string">'lucky is a good man'</span>
在app.py文件中注册蓝图对象
exts 导出
作用:一般三方对象在该目录下定义
在工程目录下创建名为exts的包目录
__init__.py
作用:导出三方对象
示例:from exts.db import db
数据库对象
在exts目录下创建名为db.py文件
<span class="hljs-keyword">from</span> flask_sqlalchemy <span class="hljs-keyword">import</span> SQLAlchemy
db = SQLAlchemy()
在app.py文件中加载三方对象
configs 配置文件
位置:在工程目录下创建名为configs的包目录
__init__.py
<span class="hljs-keyword">from</span> .developmentConfig <span class="hljs-keyword">import</span> DevelopmentConfig
<span class="hljs-keyword">from</span> .productionConfig <span class="hljs-keyword">import</span> ProductiongConfig
<span class="hljs-keyword">from</span> .testingConfig <span class="hljs-keyword">import</span> TestingConfig
defaultConfig.py 基本配置
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DefaultConfig</span><span class="hljs-params">()</span>:</span>
SQLALCHEMY_DATABASE_URI = <span class="hljs-string">"mysql+pymysql://root:lucky@127.0.0.1:3306/lucky"</span>
SQLALCHEMY_TRACK_MODIFICATIONS = <span class="hljs-keyword">False</span>
developmentConfig.py 开发配置
<span class="hljs-keyword">from</span> configs.defaultConfig <span class="hljs-keyword">import</span> DefaultConfig
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">DevelopmentConfig</span><span class="hljs-params">(DefaultConfig)</span>:</span>
DEBUG = <span class="hljs-keyword">True</span>
TESTING = <span class="hljs-keyword">False</span>
productionConfig.py 生产配置
<span class="hljs-keyword">from</span> configs.defaultConfig <span class="hljs-keyword">import</span> DefaultConfig
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">ProductiongConfig</span><span class="hljs-params">(DefaultConfig)</span>:</span>
DEBUG = <span class="hljs-keyword">False</span>
TESTING = <span class="hljs-keyword">False</span>
testingConfig.py 测试配置
<span class="hljs-keyword">from</span> configs.defaultConfig <span class="hljs-keyword">import</span> DefaultConfig
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">TestingConfig</span><span class="hljs-params">(DefaultConfig)</span>:</span>
DEBUG = <span class="hljs-keyword">False</span>
TESTING = <span class="hljs-keyword">True</span>
在app.py文件中注册配置
models 模型
位置:在应用目录下创建名为models的包目录
说明:一个模型就是一个py文件
__init__.py
:导出所有的模型
app.py
位置:在工程目录下创建名为app.py的文件
<span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Flask
<span class="hljs-comment">#引入蓝图对象</span>
<span class="hljs-keyword">from</span> myApp.api <span class="hljs-keyword">import</span> main
<span class="hljs-keyword">from</span> exts <span class="hljs-keyword">import</span> db
<span class="hljs-keyword">from</span> configs <span class="hljs-keyword">import</span> DevelopmentConfig
<span class="hljs-keyword">from</span> configs <span class="hljs-keyword">import</span> ProductiongConfig
<span class="hljs-keyword">from</span> configs <span class="hljs-keyword">import</span> TestingConfig
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">create_app</span><span class="hljs-params">(name)</span>:</span>
app = Flask(name)
<span class="hljs-comment">#加载配置</span>
app.config.from_object(DevelopmentConfig)
<span class="hljs-comment">#加载三方对象</span>
db.init_app(app)
<span class="hljs-comment">#注册蓝图</span>
app.register_blueprint(main)
<span class="hljs-keyword">return</span> app
manage.py 工程启动文件
位置:在应用目录下创建名为manage.py模块
<span class="hljs-keyword">from</span> flask_script <span class="hljs-keyword">import</span> Manager
<span class="hljs-keyword">from</span> app <span class="hljs-keyword">import</span> create_app
app = create_app(__name__)
manager = Manager(app)
<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:
manager.run()