【问题标题】:Django Rest-Framework During Validation, Check the Request Method Type验证期间的 Django Rest-Framework,检查请求方法类型
【发布时间】:2021-09-21 21:02:31
【问题描述】:

我正在处理要调用的 API 验证错误。在进行新的“POST”调用时,我必须确保 2 个日期不重叠,这工作正常。我正在执行model.objects.Filter() 查询,如果返回任何内容,我将返回验证错误。但是,我只想在 POST 请求期间返回此错误。我试过了

if request.method == "POST":

do something

但我在“请求”一词下出现错误,说“请求”未定义。在验证期间是否有另一种方法来检查方法类型?我在我的序列化程序中这样做。谢谢!

【问题讨论】:

    标签: python django django-rest-framework


    【解决方案1】:

    您可以从视图中将请求上下文传递给序列化程序:

    serializer = SomeSerializer(context={'request':request}, data=request.data)
    

    在您的序列化程序中,您可以访问请求方法:

    self.context['request'].method
    

    【讨论】:

    • 完美。我用过: if self.contect['request'].method == 'POST': 做验证 非常感谢!
    • 酷!如果此答案或任何其他答案帮助您解决了问题,您可以考虑接受它。
    • 谢谢!我接受了你的回答
    【解决方案2】:

    使用多个序列化程序并在您的视图下重新定义 get_serializer_classdrf function

    def get_serializer_class(self):
            if self.request.method == 'POST':
                return PostSerializer
            return OtherMethodsSerializer
    

    【讨论】:

    • 我确信这行得通,但我首先接受了 kamran890 的建议,因为它更容易测试!并且有效
    【解决方案3】:

    根据 kamran890 的建议,这是我在序列化程序上所做的,仅在 POST 方法调用期间执行此验证。然后在其他调用期间进行其他类型的验证

    if self.contect['request'].method == 'POST':
        *do post validation*
    else:
        *do patch/put validation*
    

    【讨论】:

    • 我建议您在代码中添加此修复程序,作为您在 EDIT 部分下的问题的一部分。这样@kamran890 就可以得到答案,未来的观众将能够知道您对代码所做的更改以修复它。谢谢
    猜你喜欢
    • 1970-01-01
    • 2019-11-29
    • 2020-09-12
    • 2015-10-18
    • 2019-04-14
    • 2018-12-06
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多