flask拆分为Django样式二
- 二级改装
- 最终项目结构
- 在App文件夹里新建settings.py文件
- 在settings中在配置开发环境
- 在first_blue里添加
- 在App/__init__.py中修改为
- 在manage.py中
- 在ext.py 文件里做如下修改
- 在manage.py 修改
- 运行命令
二级改装
最终项目结构
├── App
│ ├── ext.py
│ ├── init.py
│ ├── models.py
│ ├── pycache
│ ├── settings.py
│ ├── static
│ ├── templates
│ └── views
├── manage.py
本次项目拆分需结合上一篇文章.
在App文件夹里新建settings.py文件
在settings中在配置开发环境
import os# 获取当前根目录BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))def get_db_uri(dbinfo):engine = dbinfo.get(\"ENGINE\") or \"sqlite\"driver = dbinfo.get(\"DRIVER\") or \"sqlite\"user = dbinfo.get(\"USER\") or \"\"password = dbinfo.get(\"PASSWORD\") or \"\"host = dbinfo.get(\"HOST\") or \"\"port = dbinfo.get(\"PORT\") or \"\"name = dbinfo.get(\"NAME\") or \"\"return \"{}+{}://{}:{}@{}:{}/{}\".format(engine,driver,user,password,host,port,name)class Config:DEBUG = FalseTESTING = FalseSQLALCHEMY_TRACK_MODIFICATIONS = Falseclass DevelopConfig(Config):DEBUG = Truedbinfo = {\"ENGINE\": \"mysql\",\"DRIVER\": \"pymysql\",\"USER\": \"root\",\"PASSWORD\": \"123456\",\"HOST\": \"localhost\",\"PORT\": \"3306\",\"NAME\": \"HelloFlask\"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class TestConfig(Config):TESTING = Truedbinfo = {\"ENGINE\": \"mysql\",\"DRIVER\": \"pymysql\",\"USER\": \"root\",\"PASSWORD\": \"rock1204\",\"HOST\": \"localhost\",\"PORT\": \"3306\",\"NAME\": \"GP1HelloFlask\"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class StagingConfig(Config):dbinfo = {\"ENGINE\": \"mysql\",\"DRIVER\": \"pymysql\",\"USER\": \"root\",\"PASSWORD\": \"rock1204\",\"HOST\": \"localhost\",\"PORT\": \"3306\",\"NAME\": \"GP1HelloFlask\"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)class ProductConfig(Config):dbinfo = {\"ENGINE\": \"mysql\",\"DRIVER\": \"pymysql\",\"USER\": \"root\",\"PASSWORD\": \"rock1204\",\"HOST\": \"localhost\",\"PORT\": \"3306\",\"NAME\": \"GP1HelloFlask\"}SQLALCHEMY_DATABASE_URI = get_db_uri(dbinfo)envs = {\'develop\': DevelopConfig,\'testing\': TestConfig,\'staging\': StagingConfig,\'product\': ProductConfig,\'default\': DevelopConfig}
在first_blue里添加
from App.models import [email protected](\'/createuser/\')def creaetuser():user = User()user.username = \"tom\"user.save()return \'创建成功\'
在App/init.py中修改为
def create_app(env):app = Flask(__name__)# app.config[\'SQLALCHEMY_DATABASE_URI\'] = \"mysql+pymysql://root:123456@localhost:3306/testflask\"# app.config[\'SQLALCHEMY_TRACK_MODIFICATIONS\'] = False# init_model(app)app.config.from_object(envs.get(env))init_ext(app)init_view(app)return app
在manage.py中
import osenv = os.environ.get(\"FLASK_ENV\",\"develop\")app = create_app(env)
这样做的好处为 当电脑为开发者的电脑 则自动获取到开发者环境, 当电脑为测试环境的电脑 则自动获取到测试
原理就是:
vim ~/.bashrcexport FLASK_ENV=\'develop\'
这时候便可以运行访问
http://127.0.0.1:5000/createuser/
进行创建
进行迁移命令的改装
每次写新表都需要访问浏览器或者在
Python shell
里进行创建很不方便,于是想要变成
python manage.py migrate
这种样式
### 安装 Flask-Migrate
在ext.py 文件里做如下修改
from flask_migrate import Migratefrom flask_sqlalchemy import SQLAlchemydb = SQLAlchemy()migrate = Migrate()#add def init_ext(app):# 数据库db.init_app(app)migrate.init_app(app,db)#add
在manage.py 修改
import osfrom flask_migrate import MigrateCommand # 增加此行from flask_script import Managerfrom App import create_appenv = os.environ.get(\"FLASK_ENV\",\"develop\")app = create_app(env)manage = Manager(app=app)manage.add_command(\'db\',MigrateCommand)# 增加此行命令if __name__ == \'__main__\':manage.run()
此时便可以运行,但在这之前需要删除以前生成的文件,于是在first_blue文件里
@blue.route(\'/dropdb/\')def dropdb():db.drop_all()return \'删除成功\'
访问并且删除即可
运行命令
1.查看命令,此时运行
python manage.py
便可以看到关于 db的命令
2.初始化,第一次使用需运行
python manage.py db init
进行初始化
3.迁移,
python manage.py db migrate
4. 同步到数据库,
python manage.py db upgrade