我们不应该将所有的配置都写在manage.py这一个文件夹中,当我们的代码足够多的时候,会发现mang
e.py的代码会显得复杂起来,并且看起来比较乱,所以我们需要将不同种类的代码分别放在不同的.p
文件中.
在manage.py中只需要留使用Manageer管理app和启动run()就足够了
from flask_script import Manager
from utils.apps import create_app
app = create_app()
# 使用Manager管理app
manage = Manager(app=app)
if __name__ == '__main__':
# 启动run()
manage.run()
在utils中创建一个apps.py文件夹,用来初始化Flask对象、配置、注册蓝图、以及初始化各种第三方
库
from flask import Flask
from app.house_views import house_blueprint
from app.order_views import order_blueprint
from app.user_views import user_blueprint
from utils.config import Config
from utils.functions import init_ext
from utils.settings import TEMPLATE_DIR, STATIC_DIR
def create_app():
# 初始化Flask对象
app = Flask(__name__,
static_folder=STATIC_DIR,
template_folder=TEMPLATE_DIR)
# 配置
app.config.from_object(Config)
# 初始化各种第三方库
init_ext(app)
# 注册蓝图
app.register_blueprint(blueprint=user_blueprint, url_prefix='/user')
app.register_blueprint(blueprint=house_blueprint, url_prefix='/house')
app.register_blueprint(blueprint=order_blueprint, url_prefix='/order')
return app
可以发现,我们配置和初始化第三方库也可以单独写在一个.py文件汇总,当需要使用的时候调用就可
以了,这使得我们的逻辑变得更清晰,也让页面看起来简洁
在function.py文件中定义一个方法,方法的内容就是初始化各种第三方库
def init_ext(app):
# 绑定app和db
db.init_app(app)
# 绑定session和app
sess = Session()
sess.init_app(app)
创建config文件,将有关配置的代码写在其中
from utils.functions import get_mysqldb_url, get_redisdb_url
class Config():
# 配置数据库
SQLALCHEMY_DATABASE_URI = get_mysqldb_url()
SQLALCHEMY_TRACK_MODIFICATIONS = False
# 配置session
SESSION_TYPE = 'redis'
SECRET_REDIS = get_redisdb_url()
关于的数据库和redis的配置也是可以进行进一步的细分,我们可以在settings中写关于配置的一些基
础数据,然后在function.py中定义一个方法,返回想要的整合数据
settings中
import os
# 基础路径
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
# templates路径
TEMPLATE_DIR = os.path.join(BASE_DIR, 'templates')
# static路径
STATIC_DIR = os.path.join(BASE_DIR, 'static')
# media路径
MEDIA_DIR = os.path.join(STATIC_DIR, 'media')
# 保存图片的路径
UPLOAD_DIR = os.path.join(MEDIA_DIR, 'upload')
# 数据库配置
MYSQL_DATABASE = {
'DRIVER': 'mysql',
'DH': 'pymysql',
'ROOT': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306,
'NAME': 'aj'
}
REDIS_DATABASE = {
'HOST': '127.0.0.1',
'PORT': 6379
}
function.py中
from utils.settings import MYSQL_DATABASE, REDIS_DATABASE
def get_mysqldb_url():
DRIVER = MYSQL_DATABASE['DRIVER']
DH = MYSQL_DATABASE['DH']
ROOT = MYSQL_DATABASE['ROOT']
PASSWORD = MYSQL_DATABASE['PASSWORD']
HOST = MYSQL_DATABASE['HOST']
PORT = MYSQL_DATABASE['PORT']
NAME = MYSQL_DATABASE['NAME']
return '{}+{}://{}:{}@{}:{}/{}'.format(DRIVER, DH, ROOT, PASSWORD, HOST, PORT, NAME)
def get_redisdb_url():
HOST = REDIS_DATABASE['HOST']
PORT = REDIS_DATABASE['PORT']
return redis.Redis(host=HOST, port=PORT)
注意:
当进行配置以后我们的static和templates不在同一目录下,执行程序时网页会提示找不到html文件,
所以需要进行以下配置
# 初始化Flask对象
app = Flask(__name__,
static_folder=STATIC_DIR,
template_folder=TEMPLATE_DIR)