• 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

  • 相关阅读:
    SpringBoot 数据访问
    聚观早报 | 百度糯米发布下线公告;零跑汽车获港交所上市批准
    Ventoy系统启动盘制作
    springboot实现(select && insert)
    哈希表简介
    R数据分析:临床预测模型中校准曲线和DCA曲线的意义与做法
    Spring MVC
    Abp Quartz配置Sqlite
    重学Kotlin(五) 泛型 类型别名 委托
    Kubernetes开放接口:CRI、CNI、CSI
  • 原文地址:https://blog.csdn.net/shengshengwang/article/details/140274031