在视图中,我接受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")
答案 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
如果你想真正想要的话,你可以定义自己的错误类,特别是抓住那个