Python flask实战订餐系统微信小程序-14手写MVC框架

网友投稿 365 2022-08-28

Python flask实战订餐系统微信小程序-14手写MVC框架

一、代码结构

一个好的框架是易扩展的。

├─.idea├─common 公用代码│ ├─libs 公用代码或类│ └─models 所有数据库的Model├─config 配置文件├─docs 文档存放├─jobs 定时任务│ └─tasks └─web HTTP相关 └─controllers 所有的控制层都放在这里

二、实战简单MVC框架

2.1项目框架的搭建

先删除之前的代码,创建​​common​​​这个​​python文件夹​​​ 以及它的2个子文件夹​​libs​​​和​​models​​。

其次,创建​​config​​​文件夹,在虾米那创建​​base_etting.py​​​和​​local_setting.py​​​以及​​production_setting.py​​

添加​​docs​​​目录,并添加​​mysql.md​​文件用于说明数据库的使用

创建​​jobs​​​文件夹,在那创建​​tasks​​文件夹

再创建​​web​​目录:

创建​​application.py​​等外部文件夹:

以上就完成了项目最基本的代码框架的搭建。

2.2 app封装

2.2.1简单封装

首先再​​application​​里面进行app封装:

# -*- coding: utf-8 -*-from flask import Flaskfrom flask_sqlalchemy import SQLAlchemyclass Application( Flask ): def __init__(self,import_name): super( Application,self ).__init__( import_name ) self.config.from_pyfile( 'config/base_setting.py' ) db.init_app( self )db = SQLAlchemy()app = Application( __name__ )

​​manager.py​​添加:

# -*- coding: utf-8 -*-from application import appdef main(): app.run(host='0.0.0.0', debug=True) # manager.run( )if __name__ == '__main__': try: import sys sys.exit( main() ) except Exception as e: import traceback traceback.print_exc( )

2.2.2添加配置

​​base_setting.py​​添加配置文件,去除代码警告

SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1/mysql?charset=utf8mb4'SQLALCHEMY_TRACK_MODIFICATIONS = False

2.2.3安装flask-script扩展

为管理manager入口,我们需要引入flask_script库,它为flask框架提供了扩展的能力

​​install Flask-Script

2.2.4调用flask-script自定义启动参数

因为flask-script有一些特性可供我们扩展、它可以自定义命令。

​​application.py​​

# -*- coding: utf-8 -*-from flask import Flaskfrom flask_script import Managerfrom flask_sqlalchemy import SQLAlchemyclass Application( Flask ): def __init__(self,import_name): super( Application,self ).__init__( import_name ) self.config.from_pyfile( 'config/base_setting.py' ) db.init_app( self )db = SQLAlchemy()app = Application( __name__ )# app包装manager = Manager( app )

​​manager.py​​

# -*- coding: utf-8 -*-from application import app,managerfrom flask_script import Server##web servermanager.add_command( "runserver", Server( host='0.0.0.0',port=5000,use_debugger = True ,use_reloader = True) )def main(): manager.run( ) # app.run(host='0.0.0.0', debug=True)if __name__ == '__main__': try: import sys sys.exit( main() ) except Exception as e: import traceback traceback.print_exc( )

运行:

2.2.5端口配置化

​​base_setting.py​​添加配置文件

SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1/mysql?charset=utf8mb4'SQLALCHEMY_TRACK_MODIFICATIONS = FalseSERVER_PORT = 8999

​​manager.pu​​

# -*- coding: utf-8 -*-from application import app,managerfrom flask_script import Server##web servermanager.add_command( "runserver", Server( host='0.0.0.0',port=app.config['SERVER_PORT'],use_debugger = True ,use_reloader = True) )

这样 既可以通过8999这个端口访问了:

2.2.6加载不同环境的配置实现

​​application.py添加如下语句​​

# -*- coding: utf-8 -*-from flask import Flaskfrom flask_script import Managerfrom flask_sqlalchemy import SQLAlchemyimport osclass Application( Flask ): def __init__(self,import_name): super( Application,self ).__init__( import_name ) self.config.from_pyfile( 'config/base_setting.py' ) if "ops_config" in os.environ: self.config.from_pyfile( 'config/%s_setting.py'%os.environ['ops_config'] )

将SERVER_PORT = 9000这个设置从​​base_setting.py​​​拷贝到​​local_setting.py​​

修改环境变量:

windwos下修改

Linux下修改:

export ops_config=local

再次运行:

2.2.7配置统一规划

base_setting.py

# -*- coding: utf-8 -*-SERVER_PORT = 8999DEBUG = FalseSQLALCHEMY_ECHO = False

local_setting.py

# -*- coding: utf-8 -*-SQLALCHEMY_DATABASE_URI = 'mysql://root:123456@127.0.0.1/mysql?charset=utf8mb4'SQLALCHEMY_TRACK_MODIFICATIONS = FalseDEBUG = TrueSQLALCHEMY_ECHO = TrueSQLALCHEMY_ENCODING = "utf8mb4"

2.2.8入口页面的添加

web创建​​controllers​​层,然后创建index.py文件

# -*- coding: utf-8 -*-from flask import Blueprintroute_index = Blueprint( 'index_page',__name__ )@route_index.route("/")def index(): return "Hello World"

​​py​​​添加​​Blueprnit​​

# -*- coding: utf-8 -*-from application import appfrom web.controllers.index import route_indexapp.register_blueprint( route_index,url_prefix = "/" )

入喉文件引入

访问

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Python flask实战订餐系统微信小程序-13Linux操作系统下数据库ORM
下一篇:中超提前3轮夺冠,山东泰山下一冠瞄准足协杯!(2021中超第七轮山东泰山比赛回放)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~