Dify后端源码目录结构和蓝图

1.Dify后端源码目录结构

Dify 后端源码的目录结构和各目录的功能,如下所示:

2.Dify中的Blueprint

Flask 中的蓝图(Blueprint)是用于组织代码的一种方式,使应用程序的不同部分可以更容易地被管理和复用。蓝图允许你定义应用程序的模块化组件,并且这些组件可以包含路由、视图函数、模板、静态文件等。通过使用蓝图,可以将大型应用程序拆分为多个小的、功能相关的部分,从而提高代码的可维护性和可读性。

注册蓝图的主要原因是让 Flask 知道蓝图中定义的路由、视图函数和其他处理逻辑。通过注册蓝图,Flask 可以将不同模块的功能组合在一起,并确保请求能够被正确的视图函数处理。

代码位置:dify-0.6.9/api/app.py

def register_blueprints(app):
    from controllers.console import bp as console_app_bp  # 控制台
    from controllers.files import bp as files_bp  # 文件
    from controllers.inner_api import bp as inner_api_bp  # 内部api
    from controllers.service_api import bp as service_api_bp  # 服务api
    from controllers.web import bp as web_bp  # web

    CORS(service_api_bp,
         allow_headers=['Content-Type', 'Authorization', 'X-App-Code'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH']
         )
    app.register_blueprint(service_api_bp)  # 注册服务api蓝图

    CORS(web_bp,
         resources={
             r"/*": {"origins": app.config['WEB_API_CORS_ALLOW_ORIGINS']}},
         supports_credentials=True,
         allow_headers=['Content-Type', 'Authorization', 'X-App-Code'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH'],
         expose_headers=['X-Version', 'X-Env']
         )

    app.register_blueprint(web_bp)  # 注册web蓝图

    CORS(console_app_bp,
         resources={
             r"/*": {"origins": app.config['CONSOLE_CORS_ALLOW_ORIGINS']}},
         supports_credentials=True,
         allow_headers=['Content-Type', 'Authorization'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH'],
         expose_headers=['X-Version', 'X-Env']
         )

    app.register_blueprint(console_app_bp)  # 注册控制台蓝图

    CORS(files_bp,
         allow_headers=['Content-Type'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH']
         )
    app.register_blueprint(files_bp)  # 注册文件蓝图

    app.register_blueprint(inner_api_bp)  # 注册内部api蓝图

这段代码定义了一个名为 register_blueprints 的函数,用于将多个蓝图注册到 Flask 应用实例中,并配置跨域资源共享(CORS)。CORS 配置允许跨域请求,从而使不同来源的客户端能够访问 API。

def register_blueprints(app):

定义了一个函数 register_blueprints,接收一个 Flask 应用实例 app 作为参数。

    from controllers.console import bp as console_app_bp  # 控制台
    from controllers.files import bp as files_bp  # 文件
    from controllers.inner_api import bp as inner_api_bp  # 内部api
    from controllers.service_api import bp as service_api_bp  # 服务api
    from controllers.web import bp as web_bp  # web

导入了五个蓝图(Blueprint)对象,并分别命名为 console_app_bpfiles_bpinner_api_bpservice_api_bpweb_bp。这些蓝图分别位于 controllers.consolecontrollers.filescontrollers.inner_apicontrollers.service_apicontrollers.web 模块中。

    CORS(service_api_bp,
         allow_headers=['Content-Type', 'Authorization', 'X-App-Code'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH']
         )
    app.register_blueprint(service_api_bp)  # 注册服务api蓝图

service_api_bp 蓝图启用 CORS,并配置允许的请求头和方法。然后将 service_api_bp 蓝图注册到 Flask 应用中。

    CORS(web_bp,
         resources={
             r"/*": {"origins": app.config['WEB_API_CORS_ALLOW_ORIGINS']}},
         supports_credentials=True,
         allow_headers=['Content-Type', 'Authorization', 'X-App-Code'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH'],
         expose_headers=['X-Version', 'X-Env']
         )
    app.register_blueprint(web_bp)  # 注册web蓝图

web_bp 蓝图启用 CORS,并根据应用配置中的 WEB_API_CORS_ALLOW_ORIGINS 设置允许的来源。还配置了支持凭证、允许的请求头和方法,以及暴露的响应头。然后将 web_bp 蓝图注册到 Flask 应用中。

    CORS(console_app_bp,
         resources={
             r"/*": {"origins": app.config['CONSOLE_CORS_ALLOW_ORIGINS']}},
         supports_credentials=True,
         allow_headers=['Content-Type', 'Authorization'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH'],
         expose_headers=['X-Version', 'X-Env']
         )
    app.register_blueprint(console_app_bp)  # 注册控制台蓝图

console_app_bp 蓝图启用 CORS,并根据应用配置中的 CONSOLE_CORS_ALLOW_ORIGINS 设置允许的来源。还配置了支持凭证、允许的请求头和方法,以及暴露的响应头。然后将 console_app_bp 蓝图注册到 Flask 应用中。

    CORS(files_bp,
         allow_headers=['Content-Type'],
         methods=['GET', 'PUT', 'POST', 'DELETE', 'OPTIONS', 'PATCH']
         )
    app.register_blueprint(files_bp)  # 注册文件蓝图

files_bp 蓝图启用 CORS,并配置允许的请求头和方法。然后将 files_bp 蓝图注册到 Flask 应用中。

    app.register_blueprint(inner_api_bp)  # 注册内部api蓝图

直接将 inner_api_bp 蓝图注册到 Flask 应用中。

小结:这个函数的主要功能是:导入和定义五个不同模块的蓝图;为每个蓝图启用 CORS(有些蓝图有特殊的 CORS 配置);将这些蓝图注册到 Flask 应用实例中,从而使这些蓝图中的路由和视图函数在应用中生效。

参考文献

[1] https://github.com/langgenius/dify

  • 15
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

NLP工程化

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值