Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 制作Django Rest框架(DRF)工作流的方法_Python_Django_Django Rest Framework_Workflow - Fatal编程技术网

Python 制作Django Rest框架(DRF)工作流的方法

Python 制作Django Rest框架(DRF)工作流的方法,python,django,django-rest-framework,workflow,Python,Django,Django Rest Framework,Workflow,我正在构建一个支持多种贷款产品的业务应用程序 例如:住房贷款、汽车贷款、个人贷款、电子商务贷款 涉及的主要步骤包括: 入职(产生潜在客户) 用户信息(和验证) 贷款信息(可信度) 支付 业务流程的一个示例是: 客户上船,登记他的手机号码,并通过OTP验证 填写他的个人信息(验证) 提供贷款金额 检查贷款信誉 分配资金(XYZ验证后) 提供银行账户详细信息 核实银行账户(只有在您掌握abc信息后) 杜伊基 支付 现在,我正在使用Django REST框架构建相同的Web API。然而,有一个问题

我正在构建一个支持多种贷款产品的业务应用程序

例如:住房贷款、汽车贷款、个人贷款、电子商务贷款

涉及的主要步骤包括:

  • 入职(产生潜在客户)
  • 用户信息(和验证)
  • 贷款信息(可信度)
  • 支付
  • 业务流程的一个示例是:

  • 客户上船,登记他的手机号码,并通过OTP验证

  • 填写他的个人信息(验证)

  • 提供贷款金额

  • 检查贷款信誉

  • 分配资金(XYZ验证后)

  • 提供银行账户详细信息

  • 核实银行账户(只有在您掌握abc信息后)

  • 杜伊基

  • 支付

  • 现在,我正在使用Django REST框架构建相同的Web API。然而,有一个问题

    在我们的另一个产品中,流程可能不同<代码>步骤4和
    步骤6
    可以互换,但
    步骤7
    需要在同一位置执行。基本上,我应该能够灵活地重新安排活动(节点)


    到目前为止,编写的API(尽管是模块化的)只针对一种产品。如何使用DRF作为工作流方法?或者使用DRF上任何可以控制流量的库。

    我们有一个类似的用例,使用了一个流量库,它可以根据条件驱动的流量捕获整个工作流

    您可以查看Viewflow:

    基本上,这就像设置一个流,并利用该条件来引导和重定向到不同的机制。他们简单的快速入门页面告诉您如何实现:

    我刚刚在您的案例中尝试了一些示例流程:

    class CustomerProcessFlow(Flow):
        process_class = CustomerProcess
    
        start = (
            flow.Start(
                views.CustomerOnBoardView # Let's say this is your customer onboard view
                fields=["customer_name", "customer_address", "customer_phone"]
            ).Permission(
                auto_create=True
            ).Next(this.validate_customer)
        )
    
        validate_customer = (
            flow.View(
                views.ValidateCustomerDataView # Validation for customer data,
                fields=["approved"]
            ).Permission(
                auto_create=True
            ).Next(this.loan_amount)
        )
    
        loan_amount = (
            flow.View(
                views.LoanView # Provide Loan
                fields=["loan_amount"]
            ).Permission(
                auto_create=True
            ).Next(this.check_customer_association)
        )
    
        check_customer_association = (
            flow.If(lambda customer_association: ! customer.type.normal)
            .Then(this.step_4_6)
            .Else(this.step_6_4)
        )
    
        step_4_6 = (
            flow.Handler ( this.check_load_credibility_data )
            .Next( this.provide_bank_details_data )
        )
    
        step_6_4 = (
            flow.Handler( this.provide_bank_details_data )
            .Next(this.check_load_credibility)
        )
    
        this.check_load_credibility = (
            flow.Handler( this.check_load_credibility_data )
            .Next( this.end )
        )
    
        this.provide_bank_details_data = (
            flow.Handler( this.provide_bank_details_data )
            .Next(this.end)
        )
    
        end = flow.End()
    
        def check_load_credibility_data(self, customer):
            # Load credibility
    
        def provide_bank_details_data(self, customer):
            # Bank Details
    

    可以看到一个示例

    任何给定的REST端点都应该简单地接受请求,检查现有数据以确保原始帐户/客户/用户/任何人已完成任何相关的先决条件,并应用请求的更改或返回请求的数据(如果适用)。如果这涉及到查看请求与什么产品关联,那么这应该是受影响端点中逻辑的一部分,或者单独的产品应该有单独的代码,这取决于差异将把代码转换为If/else的程度。“流”只是UI如何调用端点的结果。