在Python中处理可选参数

时间:2018-05-07 11:40:32

标签: python django rest

我试图解决与我的api相关的问题并希望重构我的代码以便向后工作,我的意思是如果前端没有向我发送我想要的数据,请求应该去通过,如果前端发送,它仍然会照常工作。

所以粗略地说我的创建函数工作正常但是,当前端团队发送的数据没有服务器期望的时候它会破坏500内部服务器错误,但我想让它成为可选的,即使预期的数据没有被发送,我想获得200 Http响应,这里是代码因为job_invoice上的关键错误而中断的地方。我试图在我的for循环中使用中断来绕过它..但仍然。

job_invoice_data = inv_data['job_invoice']
    job_invoice = JobInvoice.objects.create(job=job_instance,   **job_invoice_data)
    obj.job_invoice = job_invoice

    # Create an InvoiceLineItem for each element in invoice_line_item

    for invoice_line_item in inv_data['invoice_line_item']:
        invoice_line_item['job_invoice'] = job_invoice.id
        if invoice_line_item['job_invoice'] is None:
            break
        invoice_line_item_serializer = InvoiceLineItemSerializer(data=invoice_line_item)
        if invoice_line_item_serializer.is_valid():
            invoice_line_item_obj = invoice_line_item_serializer.save()
        else:
            logger.debug("Couldn't create invoice line item: {}".format(invoice_line_item))

1 个答案:

答案 0 :(得分:0)

简单解决方案:使用Try and Catch Blocks

try:
    #Parse all parameters here
except:
    pass

更复杂:

检查参数的可用性,并仅在可用时继续,但使用默认值none。

例如在Flask中,您可以执行以下操作:

@app.route("/func/<required_param>", defaults={"opt1": None, "opt2": None,"opt3": None})