flask开发的一些经验(二)

作者:清一

类别:flask   

发布时间:2019/02/09 22:29:10   更新时间:2019/06/20 11:50:16


大型程序的结构

flask框架并没有给出项目结构。只是《Flask Web开发》中的第七章“大型程序的结构”中,建议了一个代码结构。取其精髓,核心的部分,就是如下这样子的:

 

sdk:云上的一些sdk包。

env:virtualenv产生的env。

main:主代码程序

 - Config.py:环境配置全局变量。

 - Mangage.py:启动程序。

 - app :一个应用app文件夹。

    -   Common.py:公共函数。

    -   Decorator.py:装饰器。

    -   Init.py:app的初始化函数。

    -   Models.py:数据模型。

    -   __init__.py:app的模块初始化文件。用来写app的工厂函数。

    -

    -   api:restful接口文件夹。

    -   -  Errors.py:错误返回api的接口。

    -   - Resource.py:api的资源(api数据产生的处理函数)。

    -   - Route.py:api的路由。

    -   - __init__.py

    -

    -   page:后端推送html文件夹。

    -   - Errors.py:错误页面推送。

    -   - Route.py:后端推送的路由。

    -   - Views.py:后端推送的视图函数。

    -   - __init__.py

    -

    -   static:前端静态文件夹。

    -   -   css

    -   - -   xxx.css

    -   - -   img

    -   - -   xxx.png

    -   - -   js

    -   - -  xxx.js

    -   templates:html模板文件夹。

    -   - Error_404.html

    -   - Index.html

    -   - Login.html

 

后边本文的讲解,会用到这个目录里的文件名。

Config.py

class Config:
   @staticmethod
    def init_app(app):
        global global_app

#储存一下全局app。
        global_app = app
        return 0

 

class DevelopmentConfig(Config):
    #DevelopmentConfig环境的flask默认打印级别是debug。
    #这个调试模式,可以让程序变更自动加载,并在错误时提供调试模式,但是有巨大安全隐患,产品模式不可用。
    #debug模式,会启动两次初始化代码。会在文件更新时自动重启,会在页面返回比较漂亮的错误打印。
    DEBUG = True
    SECRET_KEY = app_name + "_secret_key"

#restful使用的配置。
    RESTFUL_JSON = {"ensure_ascii": False, "encoding": "utf-8"}

#文件上传使用的配置。
    UPLOADS_DEFAULT_DEST = load_dir
    UPLOADS_DEFAULT_ALLOW = DATA
    #数据库使用的配置。
    SQLALCHEMY_DATABASE_URI = "mysql://" + app_name + ":"  + app_name + "@localhost/" + app_name
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS = True

 

#环境类通用全局变量
config = \
{
    "development": DevelopmentConfig,
    "testing": TestingConfig,
    "production": ProductionConfig,
    "default": DevelopmentConfig
}

Mangage.py

#注意,导入一个包的时候,首先自动执行里边的__init__.py文件,它是包初始化文件。
from app import creat_app
from app import socketio
from Config import app_ip
from Config import app_port

 

#用工厂函数创建app
app = creat_app("default")

if __name__ == "__main__":

    #flask自带web服务器
    #app_run(host = "0.0.0.0",  port=1125, threaded=True)
    #app_run(host = "0.0.0.0",  port=1125, processes=3)

    #加入socketio的启动。
    socketio.run(app, host=app_ip, port=app_port)


本文属于原创文章,未经许可,任何媒体、公司或个人不得刊发或转载。

本文网址:https://www.pyfield.com/blog/?id=4