Flask 框架搭建后端记录 3

自此记录是结合前几次的编写的项目的基础上,进行的优化。这次记录是查阅了网上很多网友所提供的资料,问答结果以及相关的教育结构视频所对其内容进行去其糟粕,取其精华。

今天,我再一次的观察自己所搭建的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

项目地址: https://github.com/Jay-9527/Small_flask.git

python·flask
118 views
Comments
登录后评论
Sign In
·

你这flask用起来有点蹩脚,完全没体现Python的灵活,光在整了一大堆配置了,如果想开箱即用不如用Django

还有之前好好的环境变量全给你变硬编码了

Github上仓库看了一眼,commit信息不规范,5次提交信息都不带改的,.gitignore文件缺失,把一些不该进仓库的东西弄进去了,用了Git就不应该再用注释保留代码,因为都有记录

这些点看起来都挺小的,但程序复杂起来后就会慢慢成为问题

·

突然想到了好玩的

你代码仓库中有.pyc文件,可以反编译出原来的代码,即便你新的代码删了只要不运行也会存在

比如你删掉的微信ID和密钥(隐藏了其中几位)

APP_ID = 'wxe5be*****7ff043f'
APP_SECRET = '4ee1b74d751f*****2b10e324e07c8a0'

所以要注意项目规范