flask拆成django项目(二)(终极)
2020-07-14 06:32
676 查看
flask拆分为Django样式二
二级改装
最终项目结构
├── 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 = False TESTING = False SQLALCHEMY_TRACK_MODIFICATIONS = False class DevelopConfig(Config): DEBUG = True dbinfo = { "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 = True dbinfo = { "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 User @blue.route('/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 os env = os.environ.get("FLASK_ENV","develop") app = create_app(env)
这样做的好处为 当电脑为开发者的电脑 则自动获取到开发者环境, 当电脑为测试环境的电脑 则自动获取到测试
原理就是:
vim ~/.bashrc export FLASK_ENV='develop'
这时候便可以运行访问
http://127.0.0.1:5000/createuser/进行创建
进行迁移命令的改装
每次写新表都需要访问浏览器或者在
Python shell里进行创建很不方便,于是想要变成
python manage.py migrate这种样式
### 安装 Flask-Migrate
在ext.py 文件里做如下修改
from flask_migrate import Migrate from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy() migrate = Migrate()#add def init_ext(app): # 数据库 db.init_app(app) migrate.init_app(app,db)#add
在manage.py 修改
import os from flask_migrate import MigrateCommand # 增加此行 from flask_script import Manager from App import create_app env = 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
相关文章推荐
- 仿照django的urls风格和模块化结构的flask项目(Django-Style URL Patterns for Flask)
- Python Flask/Django项目 -- 配置虚拟环境
- Django及Flask项目下调试、脚本、单个py文件运行环境导入问题
- Django从环境安装到项目搭建
- java项目导入css或者js以及其它资源失效(没效果)的终极完美解决方案
- 在django项目外,使用django.db链接数据库(postgres)
- Django项目使用CircleCI的方法示例
- (七)第一个Django项目
- Django项目文件夹下文件说明
- 真正搞明白Python中Django和Flask框架的区别
- Django初学者笔记系列(十二):使用Git跟踪项目文件
- django创建第一个项目helloworld
- django_restframework项目之python虚拟环境配置(一)
- django + wamp 配置多项目
- django_restframework项目之数据库搭建(二)
- Ubuntu虚拟环境中Django项目和应用创建
- 最简单的一个Django项目
- DJango项目的配置文件与如何连接MySQL数据库
- 在Pycharm中调试Django项目程序的操作方法
- 获取Django项目的全部url