前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Flask 项目工程拆分

Flask 项目工程拆分

作者头像
星哥玩云
发布2022-09-14 18:39:31
2910
发布2022-09-14 18:39:31
举报
文章被收录于专栏:开源部署

一、蓝本 blueprint

  • 说明 当我们的代码越来越复杂时,将所有的视图函数放在一个文件中很明显时不合适的;如果能够根据功能模块进行划分,存储在不同的文件中,蓝本就是为解决此问题而生的

使用

创建user.py

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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/

2、目录结构

代码语言:javascript
复制
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  工程启动文件

3、操作

myApp 应用

在工程目录下创建包目录(目前起名为myApp,以后视情况而修改)

api 路由视图

解决:flask提供的解决方案是蓝图

在应用目录下创建名为api的包目录:

__init__.py

from .main import main

main.py

代码语言:javascript
复制
<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文件

代码语言:javascript
复制
<span class="hljs-keyword">from</span> flask_sqlalchemy <span class="hljs-keyword">import</span> SQLAlchemy
db = SQLAlchemy()

在app.py文件中加载三方对象

configs 配置文件

位置:在工程目录下创建名为configs的包目录

__init__.py

代码语言:javascript
复制
<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 基本配置

代码语言:javascript
复制
<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 开发配置

代码语言:javascript
复制
<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 生产配置

代码语言:javascript
复制
<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 测试配置

代码语言:javascript
复制
<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的文件

代码语言:javascript
复制
<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模块

代码语言:javascript
复制
<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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、蓝本 blueprint
    • 2、目录结构
      • 3、操作
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档