【问题标题】: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

【问题讨论】:

    标签: python django web


    【解决方案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)
    

    【讨论】:

      猜你喜欢
      • 2011-01-15
      • 2022-12-04
      • 1970-01-01
      • 2017-08-24
      • 2022-01-22
      • 2014-01-10
      • 2019-11-30
      相关资源
      最近更新 更多