最佳做法是使用尽可能简单的参数(这会使您的功能更容易测试)。
什么你正在寻找在异常情况下的东西,可以从auth_token
通过您的看法发送:
def auth_token(email): # this returns a User not a token..?
try:
return User.objects.get(email=email)
except User.DoesNotExist:
raise ImmediateHttpResponse(JSONresponse({'status': False}))
用途将被:
def myview(request, ...):
token = auth_token(data['email'])
...
任何ImmediateHttpResponse
例外会逃跑该视图必须由中间件类拾取。
不幸的是,Django没有配备ImmediateHttpResponse
类,但TastyPie有一个我们可以窃取的类。首先异常类:
class ImmediateHttpResponse(Exception):
"""This exception is used to interrupt the flow of processing to immediately
return a custom HttpResponse.
Common uses include::
* for authentication (like digest/OAuth)
* for throttling
(from TastyPie).
"""
_response = http.HttpResponse("Nothing provided.")
def __init__(self, response):
self._response = response
@property
def response(self):
return self._response
那么中间件:
from myexceptions import ImmediateHttpResponse
class ImmediateHttpResponseMiddleware(object):
"""Middleware that handles ImmediateHttpResponse exceptions, allowing
us to return a response from deep in form handling code.
"""
def process_exception(self, request, exception):
if isinstance(exception, ImmediateHttpResponse):
return exception.response
return None
这个类必须添加到您的MIDDLEWARE_CLASSES
在settings.py
文件'mymiddleware.ImmediateHttpResponseMiddleware'
。
你是如何导入它的?我认为它与导入有关,您可能需要导入JsonResponse 'from django.http import JsonResponse' 并将其更改为 'return JsonResponse({'status':False})' –
try和except分支返回两种不同的类型(用户/ JSONResponse),这不是一个好的设计选择.. – thebjorn
@ adeealamsz是的我没有导入, – Tsuna