Flask 框架搭建后端项目记录1

温馨提示:在发这个帖子前我发了一个有关于Flask框架问题的帖子,后面自己去调试了一下,不知道怎么回事又可以运行了该项目,现在将该项目的结构放在该帖子中,有想尝试的小伙伴可以参考我这个项目的创建思路来创建属于自己的项目结构

项目介绍

该项目是我想当做后端来开发的,原因是看了网上很多人的形形色色的项目,就发现为啥不开发一个只单单服务于有关后端方面的项目呢?而且像类似博客,小程序,电商等等相关的项目都是采用和CS模型或MVC模型相似的形式来开发。所以就开发一个简易的后端,这样可以是后端变得可DIY,扩展性大大增强。而且这样的后端因为使用了基于Python语言所开发的FLask,这样的轻量化的开发框架,使得开发成本变得更加的低。

咳咳~废话多了,直接展示项目结构。

简易后端结构

项目结构:

apiflask    
|___ modelu # 存放服务和业务的地方
....|___ server # 服务
....|___ __init__.py # 管理模块文件
|___ static # 存放静态文件的地方
|___ templates # 存放模板的地方
|___ venv # 虚拟环境
|___ app.py # 项目初始化文件
|___ Config.py # 项目配置文件
|___ manage.py # 项目管理文件【辅助】
|___ README.md # 项目Markdown说明文件
|___ requirements.txt # 环境包文件

项目的配置流程:

  1. 把配置文件创建,并编写好配置文件【项目环境配置文件】

  2. 创建application配置文件,里头存放创建APP的内容【项目启动文件】

  3. 创建application管理文件名为:manager,里头存放项目初始化的方法和蓝图映射方法。【项目管理文件】

  4. 创建软件包,存放模块(业务)。在里头编写__init__文件,统一管理模块。 5. 创建环境变量脚本。为项目提供环境变量。

这里要说明一下Python的Flask框架的配置流程,不知道小伙伴们有没有在看学习Flask框架时,特别是新手,亦或者是第一次找到了这个框架的。在这个框架没有很火时,【B站没有相应的教程和说明,我是这么判断这款框架的火热程度】都很难查到有关这框架的一些文档和教程的。自己查官网说明文档时看那些解释又难以理解。这个就很有必要要了解这个框架的配置流程。这样后面自己觉得这个项目不是很满意的时候可以快速了解这个框架的一些配置,好快速上手。搭建自己想要的东西。

文件详细解释:

app.py

代码:

"""
这里是创建程序和实例化程序
"""
import os

from flask_sqlalchemy import SQLAlchemy
from flask import Flask
from Config import configs
from modelu import Users_bp
from modelu import Index_bp

# defined one cut
# class user1:
#     {'type', '1', 'name', 'password', 'status', {'massge': '200'}}
# app = APIFlask(__name__, docs_ui='redoc')

# 定义数据库
db = SQLAlchemy()

def create_app(path=None):
    if path is None:
        path = os.getenv("FLASK_CONFIG", "defaults")
    app = Flask(__name__)
    app.config.from_object(configs[path])
    configs[path].init_app(app)
    # 注册蓝图
    app.register_blueprint(Users_bp)
    app.register_blueprint(Index_bp)
    return app

# 初始化好项目
# app = Flask(__name__)
# app.config.from_object(config[config])
# db.init_app(app)  # 这里是将db绑定到项目中

这里是采用工厂模式来根据现实中不同的环境来及时选择相应的开发环境,以适应生产需求。

config.py

代码:

import os


class Config:
    DEBUG = True
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    # DATA_URL = os.getenv(os.path.join('DATABASE'))
    # SQLALCHEMY_DATABASE_URL = os.getenv('DATABASE_URL', 'sqlite:///' + os.path.join(app.root_path, 'data.db'))
    TESTING = False
    USERS = os.getenv("use", os.environ.get("DB_USER"))
    PASSWD = os.getenv("pass", os.environ.get("DB_PASS"))
    DB_DATABASE = os.getenv("db_database")
    # 平台的key作为校验。
    SECRET_KEY = 'suibiandingyi123131'

    # 微信信息
    APPID = ''
    APPSERECT = ''
    TOKEN = ''
    APP_API_URL = ''

    @staticmethod
    def init_app(app):
        pass


class ProductionConfig(Config):
    DB_URL = os.getenv(
        f"mysql+cymysql://{Config.USERS}:{Config.PASSWD}@{os.environ.get('DB_URL')}:3306/{Config.DB_DATABASE}")


class DevelopmentConfig(Config):
    DB_URL = os.getenv("DB_URL", f"mysql+cymysql://{Config.USERS}:{Config.PASSWD}@{os.environ.get('DB_URL')}:3306/{Config.DB_DATABASE}")


class TestingConfig(Config):
    DB_URL = os.getenv("DB_URL", f"mysql+cymysql://{Config.USERS}:{Config.PASSWD}@{os.environ.get('DB_URL')}:3306/{Config.DB_DATABASE}")
    TESTING = True


configs = {
    'development': DevelopmentConfig,
    'testing': TestingConfig,
    'production': ProductionConfig,
    'defaults': DevelopmentConfig
}

该文件中的内容采用获取环境变量的方式来保证项目在现实中的安全性。当然会增加一些配置环境变量的操作,后期会编写一些脚本来实现一键化的配置环境变量。

manage.py

代码:

"""
@Project :apiflask 
@File    :manage.py
@Author  :AiNiSuBing
@Date    :2022/7/10 15:30 
程序创建
"""
import os
from app import create_app, db
from flask_migrate import Migrate

mirgate = Migrate(app, db)


@app.shell_context_processors
def make_shell_context():
    return dict(Development=DevelopmentConfig, Production=ProductionConfig)

注释:dict这里的映射的是类要对应。

具体的作用希望有懂的大佬可以解释一下,多谢。鄙人新手一枚。

modelu下的文件

init.py

代码:

"""
@Project :apiflask 
@File    :__init__.py.py
@Author  :AiNiSuBing
@Date    :2022/7/10 11:49
这里是程序入口
"""
from .server.user import bp as Users_bp
from .server.index import bp as Index_bp

users.py

代码:

"""
@Project :apiflask 
@File    :user.py
@Author  :AiNiSuBing
@Date    :2022/7/10 13:06 
用户界面 API [ 蓝图方式管理 ]
"""
from flask import Blueprint

# users API

bp = Blueprint("users", __name__, url_prefix="/user")


@bp.route("/login")
def login():
    return "用户API"

这样整个项目基础搭建就完成了,后期的详细业务和功能模块可根据个人的需要来自行编写或DIY。

多谢观看~!!

149 views
Comments
登录后评论
Sign In
·

哦对了,相似的项目结构在脚本之家中也有:https://www.jb51.net/article/85876.htm

·

文档上都有讲——API — Flask Documentation (2.1.x) (palletsprojects.com)

@app.shell_context_processor的作用是“Registers a shell context processor function.”

shell_context_processors是“A list of shell context processor functions that should be run when a shell context is created.”

可能因为一些历史原因在某些版本里的@app.shell_context_processors也可以使用,但其实应该是@app.shell_context_processor

主要是提供给flask shell中使用的,交互环境获取的信息是这里提供的

flask相关源码可以看flask/app.py at main · pallets/flask (github.com),逻辑十分简单,最后会交给make_shell_context调用,不过恰好和你这里的函数同名,关系不是很大