我可以在视图函数中的函数中返回响应吗?
Posted
技术标签:
【中文标题】我可以在视图函数中的函数中返回响应吗?【英文标题】:Can I return a response in a function within a view function? 【发布时间】:2017-05-05 09:05:12 【问题描述】:这里是视图函数:
def bar(request):
...
record = get_record_from_model(model, **kwargs)
...
return JsonResponse(data_to_response)
下面是view函数中用到的函数:
def get_record_from_model(model, **kwargs):
try:
return model.objects.get(**kwargs)
except model.DoesNotExist:
error_data = copy.copy(settings.ERROR["NOT_EXIST_ERR"])
return JsonResponse(error_data)
发生异常时,我可以在get_record_from_model函数中将JsonResponse(error_data)
返回给客户端吗?
类似 raise Http404
【问题讨论】:
【参考方案1】:简短的回答是,您不能直接在那里执行此操作,因为调用函数仍然需要对来自get_record_for_model
的返回值做一些事情。也就是说,我建议您执行以下操作,将数据以及找到/未找到的布尔值发送回调用函数:
def get_record_from_model(model, **kwargs):
try:
return model.objects.get(**kwargs), True
except model.DoesNotExist:
error_data = copy.copy(settings.ERROR["NOT_EXIST_ERR"])
return error_data, False
...
def bar(request):
...
data, found = get_record_from_model(model, **kwargs)
if not found:
return JsonResponse(data, status=404)
...
return JsonResponse(response_data)
【讨论】:
数据以后会用到,不能随便返回,这可能不是一个好的解决方案。 我宁愿不使用这个功能...谢谢。【参考方案2】:使用 django 的内置快捷方式get_object_or_404
from django.shortcuts import get_object_or_404
def bar(request):
...
record = get_object_or_404(model, **kwargs)
...
return JsonResponse(data_to_response)
【讨论】:
以上是关于我可以在视图函数中的函数中返回响应吗?的主要内容,如果未能解决你的问题,请参考以下文章