在视图调用的函数中返回HTTP响应

时间:2017-07-27 06:45:03

标签: python django

在视图中,我接受request.body中的json键和值。我打算在另一个函数

中检查是否存在所需的json密钥(可能是拼写错误)
def checkJsonKey(form, *args):
    for key in enumerate(args):
        if key not in form:
            return HttpResponse(status = 400) #<--

该函数可以直接返回响应并终止此视图函数,而不是检查返回的值吗?

在我的视图功能中,

form = json.loads(request.body)


checkJsonKey(form,"user_preference","model_id", "filename")

3 个答案:

答案 0 :(得分:0)

检查checkJsonKey返回的值是否为None,如果不是,则它必须已经返回了您的Response,您可以从视图函数返回它。

def my_view(request, *args, **kwargs):
    form = json.loads(request.body)
    response = checkJsonKey(form, *args)
    if response is not None:
        return response

答案 1 :(得分:0)

它没有多大区别,但是如果你想要另一个方法,json.loads()从传递给它的json字符串返回一个字典,通过调用{{1}可以很容易地检查键的存在} 句法。您可以进一步查看json API here的文档。

试试这个:

form[key]

答案 2 :(得分:0)

这里是我如何处理这个,使用异常然后捕获它,而不是返回响应,这允许您从函数返回一些错误条件并在try / except捕获器中处理它们

def checkJsonKey(form, *args):
    if type(form) not dict:
        raise ValueError("Not dict")
    # assuming you actually want to deal with a list of the args, and not a turple pairs from enumerate
    for key in list(args):
        # assuming that form is a dict
        if key not in form.keys():
            raise ValueError("Key not found")
    return True

这将被称为

form = json.loads(request.body)

try:
    checkJsonKey(form,"user_preference","model_id", "filename")
except ValueError as e:
    return HttpResponseBadRequest("%s" % e)
# rest of the code

如果你想真正想要的话,你可以定义自己的错误类,特别是抓住那个