Python 如果我在django视图中返回None并在中间件中处理它呢?
我们总是在Django视图中返回HttpResponse,但现在我想在中间件中完成这个包。 也就是说,我可以返回dict(或其他内容)或在视图中引发错误,我的中间件将检测到它: 如果返回dict(body),中间件将像{error:None,code:0,body:bodydict}一样打包dict,并使用JSON.dumps获取字符串作为响应内容(例如代码0); 如果引发错误,中间件将字符串化错误,并将其打包为{error:“Some error”,代码:500,主体:[]} 如果视图返回None,中间件将打包为{error:None,code:0,body:None} 但问题是,django将检测视图的返回。如果返回None,则会记录一个错误:Python 如果我在django视图中返回None并在中间件中处理它呢?,python,django,Python,Django,我们总是在Django视图中返回HttpResponse,但现在我想在中间件中完成这个包。 也就是说,我可以返回dict(或其他内容)或在视图中引发错误,我的中间件将检测到它: 如果返回dict(body),中间件将像{error:None,code:0,body:bodydict}一样打包dict,并使用JSON.dumps获取字符串作为响应内容(例如代码0); 如果引发错误,中间件将字符串化错误,并将其打包为{error:“Some error”,代码:500,主体:[]} 如果视图返回No
The view xxxView didn't return an HttpResponse object. It returned None instead.
现在我想删除这个日志。我该怎么办?我认为你能(轻松地)做到这一点的唯一方法是使用一个装饰器,而不是中间件get\u response方法或任何传递到中间件中的东西。我非常希望至少有一个可调用的
render
方法,而且没有大量工作是不可避免的
def jsonify(fn):
def __inner(*args,**kwargs):
result = fn(*args,**kwargs)
return HTTPResponse(json.dumps({"data":result}))
@jsonify
def my_function(request,...):
return None
我认为你能(轻松地)做到这一点的唯一方法是使用一个装饰器,而不是中间件get_response方法或任何传递到中间件中的方法,它非常想要至少有一个可调用的
render
方法的东西,并且没有大量的工作是不可避免的
def jsonify(fn):
def __inner(*args,**kwargs):
result = fn(*args,**kwargs)
return HTTPResponse(json.dumps({"data":result}))
@jsonify
def my_function(request,...):
return None
实际上,这是我处理所有请求的原始方法;但我认为中间件是一种更简单的方法-只需要添加一行代码,就可以模糊功能。。。django采取了很大的措施来避免这种情况。。。如果你真的想要这个,你应该使用一个不同的框架。大多数轻量级rest框架都支持这一点(flask、falcon、Melted等等),django rest框架中可能有一些基类可以将APIView的所有方法自动封装在类似这样的东西中(可能是这样的),因此,只要您使用django rest framework基于类的视图,也许您就可以做到这一点……实际上,这是我处理所有请求的原始方法;但我认为中间件是一种更简单的方法-只需要添加一行代码,就可以模糊功能。。。django采取了很大的措施来避免这种情况。。。如果你真的想要这个,你应该使用一个不同的框架。大多数轻量级rest框架都支持这一点(flask、falcon、Melted等等),django rest框架中可能有一些基类可以自动将APIView的所有方法封装在类似这样的东西中(可能),所以只要您使用django rest框架基于类的视图,也许您就可以做到这一点。。。