flask 的简单拆分升级版2
#创建manage.py
from flask_script import Manager from app import create_app app=create_app('developConfig')#调用创建的注册create_app,developConfig给他传一个生产环境,本次选择开发者环境 manage = Manager(app) if __name__ == '__main__': manage.run()
#创建__init__.py文件
from flask import Flask from app import settings from app.ext import init_info from app.views import blue def create_app(environ):#定义一个创建app函数,为其添加一个环境变量参数 app = Flask(__name__)#注册app app.register_blueprint(blueprint=blue)#加载蓝图 app.config.from_object(settings.config_info.get(environ)) #flask扩展包的配置信息 # app.config['SECRET_KEY']='123'#session 的密钥,如果没有用session会报错 # app.config['SESSION_TYPE']='redis'#加载redis存储,还可以理解为redis驱动 # app.config['SQLALCHEMY_DATABASE_URI']='sqlite:///sqlite3.db'#加载sqlite数据库 # app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:123456@localhost:3306/flask1805' # app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False app.config.from_object(settings.config_info.get(environ))#从配置里面开发环境中获取环境加载到新创建的app中 init_info(app) return app # url 统一资源定位符 # uri 统一资源标识符
#创建settings.py文件 # 关于咱们的四个生产环境 # 开发环境 测试环境 演示环境 线上环境 #针对MySQL的数据库配置,可以调用没有写死 def get_database_url(info): name = info.get('name') or 'mysql' username = info.get('username') or 'root' password = info.get('password') or 'youpassword' host = info.get('host') or 'localhost' port = info.get('port') or '3306' driver = info.get('driver') or 'pymysql' database = info.get('database') or 'flask3'#换成自己的数据库 return '{}+{}://{}:{}@{}:{}/{}'.format(name,driver,username,password,host,port,database) #配置信息类也可以说是线上环境 class Config(): DEBUG = False#默认调试模式关闭 TESTING = False#测试模式关闭 SECRET_KEY = '123'#密钥 SESSION_TYPE = 'redis'#session存储类型 SQLALCHEMY_TRACK_MODIFICATIONS = False#报的一个提示不是错,只是一个警告信息,通过这个可以关闭提示,想了解可以注释掉自己看看 #开发环境 class DevelopConfig(Config): DEBUG = True TESTING = True database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver':'pymysql', 'name' : 'mysql' } # 链接数据库的url SQLALCHEMY_DATABASE_URI = get_database_url(database) #测试环境 class TestConfig(Config): TESTING = True database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver':'pymysql', 'name' : 'mysql' } SQLALCHEMY_DATABASE_URI = get_database_url(database) #演示环境 class ShowConfig(Config): database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver': 'pymysql', 'name': 'mysql' } SQLALCHEMY_DATABASE_URI = get_database_url(database) #生产环境 class WorkConfig(Config): database = { 'username': 'root', 'password': 'youpassword', 'host': 'localhost', 'port': '3306', 'database': 'flask3', 'driver':'pymysql', 'name' : 'mysql' } SQLALCHEMY_DATABASE_URI = get_database_url(database) #封装四个开发环境 config_info = { "WorkConfig": WorkConfig, "developConfig":DevelopConfig, "testConfig": TestConfig, "showConfig": ShowConfig, "default": DevelopConfig, }
#创建views.py文件 from flask import Blueprint#导入蓝图模块 from app.ext import db from app.modles import City blue=Blueprint('first',__name__)#创建蓝图 @blue.route('/')#路由 def hello_world(): return 'Hello World!' #创建数据库 @blue.route('/createall/') def create_all(): db.create_all() return '数据库创建成功' #添加数据库信息 @blue.route('/addcity/') def add_city(): city=City() city.c_name='郑州' city.c_age= 3500 db.session.add(city) db.session.commit() return '数据添加成功' #删除数据 @blue.route('/dropall/') def drop_all(): db.drop_all() return '数据删除成功' #获取所有信息 @blue.route('/getall/') def get_all(): city=City.query.all() print(city) print(type(city)) return '数据查询成功'
#创建modles.py文件 from app.ext import db class City(db.Model): c_id = db.Column(db.Integer, primary_key=True, autoincrement=True) c_name = db.Column(db.String(32)) c_age = db.Column(db.Integer)
#创建ext.py文件 from flask_session import Session from flask_sqlalchemy import SQLAlchemy #第三库都在这加载 sess=Session()#加载session db=SQLAlchemy()#加载SQLAlchemy def init_info(app):#定义一个init_info函数,在调用的时候直接调用session sess.init_app(app) db.init_app(app)#把数据库加载到app
已测试都能成功