首页 > 编程语言 >利用Python Flask蓝图加自定义蓝图划分优雅的目录结构

利用Python Flask蓝图加自定义蓝图划分优雅的目录结构

时间:2023-08-08 16:47:22浏览次数:42  
标签:__ py 自定义 Python app 蓝图 v1 api def

我们在用Flask开发网站的时候。经常看到有很多人把所有的路由函数放到了入口文件,这种做法是非常不可取的,如果我们的视图函数有几百个了都写到一个文件里肯定是不行的。还有在实现中我们都在比较大型项目里面我们可能有十几个甚至几十个这种不同模型。我们需要考虑把这些模型分文别类归属到不同的文件中去。而不是都集中在同一个文件中。如下图这种:

 

是不是很乱,那么我们怎么拆分这些函数了。接下来我们就来简单实现一下:


一、 规划目录结构

 

二、新建app包构造核心目录
api/v1/init.py 接口目录为版本号模块初始化文件
api/v1/user.py 接口目录为版本号加上模块名称文件
config/settings.py 包为配置文件
lib/redprint.py核心类文件模仿蓝图重写
app.py 核心入口文件
当然还有其他包比如model为数据库validate为验证等等就不在列举

api/v1/init.py 用蓝图托管版本号导入不同模块

from flask import Blueprint
from app.api.v1 import user, website
def create_blueprint_v1():
    bp_v1 = Blueprint('v1', __name__)
    user.api.register(bp_v1)
    website.api.register(bp_v1)
    return bp_v1

api/v1/user.py 用lib下自定义redprint托管模块

from app.lib.redprint import Redprint
api = Redprint('user')

@api.route('/get')
def get_user():
    return 'get'

@api.route('/create')
def create_user():
    return 'create'

settings.py 一些数据库等配置信息

TOKEN_EXPIRATION = 30 * 24 * 3600
SQLALCHEMY_DATABASE_URI = \
    'mysql+cymysql://root:123456@localhost/test'
SECRET_KEY = 'test'

redprint.py模仿蓝图重写register和route方法

class Redprint(object):
    def __init__(self, name):
        self.name = name
        self.mound = []

    def route(self, rule, **options):
        def decorator(f):
            self.mound.append((f, rule, options))
            return f

        return decorator

    def register(self, bp, url_prefix=None):
        if url_prefix is None:
            url_prefix = '/' + self.name
        for f, rule, options in self.mound:
            endpoint = options.pop("endpoint", f.__name__)
            bp.add_url_rule(url_prefix + rule, endpoint, f, **options)

app.py 核心入口文件

from flask import Flask


def register_blueprints(app):
    from app.api.v1 import create_blueprint_v1
    app.register_blueprint(create_blueprint_v1(), url_prefix='/v1')


def create_app():
    app = Flask(__name__)
    app.config.from_object('app.config.settings')
    register_blueprints(app)
    return app

三、main.py入口文件

from app.app import create_app

app = create_app()

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5001)

测试看一下效果:

 

 

————————————————
版权声明:本文为CSDN博主「馒头糕饼一齐要」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_28744695/article/details/129386541

标签:__,py,自定义,Python,app,蓝图,v1,api,def
From: https://www.cnblogs.com/Im-Victor/p/17614736.html

相关文章

  • Log4netHelper, 支持自定义日志文件生成间隔
    usinglog4net;usinglog4net.Appender;usinglog4net.Config;usinglog4net.Repository;usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingstaticlog4net.Appender.FileAppender;namespa......
  • pip安装加速&&python淘宝镜像安装包
    国内源:新版ubuntu要求使用https源,要注意。清华:https://pypi.tuna.tsinghua.edu.cn/simple阿里云:http://mirrors.aliyun.com/pypi/simple/中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/华中理工大学:http://pypi.hustunique.com/山东理工大学:http://pypi.sdutlinux......
  • appium + python | UI 自动化测试
     tradeBtns=(By.ID,"com.hexin.plat.android.MinShengSecurity.test:id/title")self.driver.find_elements(tradeBtns)[3].click()不支持以上语法。......
  • 基于python tornado实现的简易图床
    基于pythontornado实现的简易图床项目地址因为买了阿里/腾讯的云服务器,但是使用云存储还需要收费,又加上家里正好有一台nas,又加上闲的没事,所以搞了一个小脚本这个项目主要功能是为typora增加一个自定义图床欢迎提出issues和pr,如果闲的没事会考虑增加一个web界面来上传图片......
  • python实现简单的爬虫功能
    前言Python是一种广泛应用于爬虫的高级编程语言,它提供了许多强大的库和框架,可以轻松地创建自己的爬虫程序。在本文中,我们将介绍如何使用Python实现简单的爬虫功能,并提供相关的代码实例。如何实现简单的爬虫1.导入必要的库和模块在编写Python爬虫时,我们需要使用许多库和模块,其......
  • 自定义类加载器
    自定义类加载器只需要继承java.lang.ClassLoader类,该类有两个核心方法,一个是loadClass(String,boolean),实现了双亲委派机制,还有一个方法是findClass,默认实现是空方法,所以我们自定义类加载器主要是重写findClass方法。publicclassMyClassLoaderTest{staticclassTest......
  • python实现简单的爬虫功能
    前言Python是一种广泛应用于爬虫的高级编程语言,它提供了许多强大的库和框架,可以轻松地创建自己的爬虫程序。在本文中,我们将介绍如何使用Python实现简单的爬虫功能,并提供相关的代码实例。如何实现简单的爬虫1.导入必要的库和模块在编写Python爬虫时,我们需要使用许多库和模块,其中......
  • Python爬虫在电商数据挖掘中的应用
    作为一名长期扎根在爬虫行业的专业的技术员,我今天要和大家分享一些有关Python爬虫在电商数据挖掘中的应用与案例分析。在如今数字化的时代,电商数据蕴含着丰富的信息,通过使用爬虫技术,我们可以轻松获取电商网站上的产品信息、用户评论等数据,为商家和消费者提供更好的决策依据。在本文......
  • 在langchain中使用自定义example selector
    简介在之前的文章中,我们提到了可以在跟大模型交互的时候,给大模型提供一些具体的例子内容,方便大模型从这些内容中获取想要的答案。这种方便的机制在langchain中叫做FewShotPromptTemplate。如果例子内容少的话,其实无所谓,我们可以把所有的例子都发送给大语言模型进行处理。但是如......
  • python打包成sdk上传到私有仓库和使用
    我们已经学习了如何运行一个python项目(当我们有它的源码文件py文件的时候)。python的使用和运行我们有一个项目,需要打包到其他机器上运行,如果每次都是复制整个项目源码就显得有点笨拙。实现这个需求有很多种方案。例如:PyInstaller可参考链接:https://ningyu1.github.io/site/po......