当前位置:   article > 正文

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

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蓝图
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

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

def register_blueprints(app):
  • 1

定义了一个函数 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
  • 1
  • 2
  • 3
  • 4
  • 5

导入了五个蓝图(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蓝图
  • 1
  • 2
  • 3
  • 4
  • 5

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蓝图
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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)  # 注册控制台蓝图
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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)  # 注册文件蓝图
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

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

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

参考文献

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Guff_9hys/article/detail/995692
推荐阅读
相关标签
  

闽ICP备14008679号