自此记录是结合前几次的编写的项目的基础上,进行的优化。这次记录是查阅了网上很多网友所提供的资料,问答结果以及相关的教育结构视频所对其内容进行去其糟粕,取其精华。
今天,我再一次的观察自己所搭建的flask框架项目,发觉的还是不够好随后就上网查阅了大量的资料。对自己的简易flask后端项目进行优化,当然这个项目也是在我往后的开发中所最常用到的一个小型后端。以下是优化后的代码和项目结构图:
项目结构图:
代码:
setting配置文件代码
"""
配置文件
"""
import os
class Config:
# 微信ID
APP_ID = ' '
APP_SECRET = ' '
# APP_API_URL 'GET https://api.weixin.qq.com/sns/jscode2session'
APP_API_URL = 'https://api.weixin.qq.com/sns/jscode2session?appid=${0}&secret=${1}&js_code=${2}&grant_type=authorization_code'
@staticmethod
def init_app(app):
pass
class DevelopmentConfig(Config):
DEBUG = True
# DB_USERS = os.getenv("DB_USERS")
# DB_PASSW = os.getenv("DB_PASSW")
DB_USERS = 'adiao'
DB_PASSW = 'adiao'
DB_CHARSET = 'utf-8'
# DB_URL = os.getenv("DB_URL", os.environ.get("DB_URL")) + "%s+%s+%s" + DB_USERS + DB_PASSW + DB_CHARSET
DB_URL = 'localhost'
class ProductionsConfig(Config):
# DB_USERS = os.getenv("DB_USERS")
# DB_PASSW = os.getenv("DB_PASSW")
DB_USERS = 'adiao'
DB_PASSW = 'adiao'
DB_CHARSET = 'utf-8'
# DB_URL = os.getenv("DB_URL", os.environ.get("DB_URL")) + "%s+%s+%s" + DB_USERS + DB_PASSW + DB_CHARSET
DB_URL = 'localhost'
class TestingConfig(Config):
TESTING = True
# DB_USERS = os.getenv("DB_USERS")
# DB_PASSW = os.getenv("DB_PASSW")
DB_URL = 'localhost'
DB_USERS = 'adiao'
DB_PASSW = 'adiao'
DB_CHARSET = 'utf-8'
# DB_URL = os.getenv("DB_URL", os.environ.get("DB_URL")) + "%s+%s+%s" + DB_USERS + DB_PASSW + DB_CHARSET
config = {
'development': DevelopmentConfig,
'productions': ProductionsConfig,
'testing': TestingConfig,
'defaults': DevelopmentConfig
}
项目app创建文件
from flask import Flask
from model.exts.dbDAO import db
from setting import config
from model import users_bp
from model import index_bp
# 小程序后端程序创建
# 定义数据库
def create_app(config_name):
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
# 绑定数据库
db.init_app(app)
# 注册蓝图
app.register_blueprint(users_bp)
app.register_blueprint(index_bp)
return app
项目管理文件(辅助)
import os
from flask_script import Manager, Shell
from flask_migrate import Migrate
from __init__ import create_app, db
app = create_app(os.environ.get('flask_config') or 'defaults')
manager = Manager(app)
migrate = Migrate(app, db)
# @app.make_shell_context
def make_shell_context():
return dict(db=db, app=app)
manager.add_command("shell", Shell(make_context=make_shell_context))
manager.add_command("db", Migrate)
if __name__ == "__main__":
manager.run()
数据DAO层
"""
数据DAO层
"""
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
'''
映射数据类
'''
统一管理蓝图文件
from .service.users import bp as users_bp
from .service.index import bp as index_bp
蓝图(等同一个子路由)
from flask import Blueprint
bp = Blueprint("user", __name__, url_prefix="/user")
@bp.route("/login")
def login():
return "用户API"
项目中有两__init__文件,第一个在model中的是管理蓝图的,第二个是创建项目app的。
出现问题:
1)、当flask 报ModuleNotFoundError:No module named ‘flask._compat’
解决方法:
不降级则可以尝试修改一下flask_script/init.py中from ._compat import text_type 改成 from flask_script._compat import text_type 。
2)、对于将app.config.from_object导入的问题,不用例会是否有提示,直接编写。相关的知识点底下的资料中有解释。
3)、对于@app.make_shell_context的相关知识点,看底下资料链接。
4)、还有该项目还是有一点点的小瑕疵。有点异常错误,但可以抛出。
资料:
项目基本结构例子: https://www.jb51.net/article/85876.html
flask from_object: https://blog.csdn.net/m0_37519490/article/details/80582607
关于migrate和manage的: https://hackertalk.net/posts/334870976467841024
关于make_shell_context知识的地址: https://hackertalk.net/posts/334530635600506880