#创建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
已测试都能成功