2017-04-26 24 views
0

我有一个tryexcept这是超常使用的,所以我想把它拿出来,并将其制作成function在其他文件中,但我似乎无法使它的工作。如何正确地将这个函数重构成另一个文件? django

有人能请我帮忙吗?

这是我用真的经常

try: 
     user = get_object_or_404(User, email=data['email']) 
    except Exception as e: 
     print(e) 
     return JSONresponse(False, e.message) 

我试图使它成为另一个文件,并做了这样

def auth_token(data): 
    try: 
     return get_object_or_404(User, email=data['email']) 
    except Exception as e: 
     return JSONresponse({'status': False}) 

那么代码当我打电话auth_token我就是这么做的在另一种方式,当然我没有进口它

user = auth_token(data) 

我可以理解th是会然后返回我JSONresponse({'status': False}),我试着使用raise它会告诉我,我不能使用JSONresponse

有人可以给我一个想法如何做到这一点吗?

+0

你是如何导入它的?我认为它与导入有关,您可能需要导入JsonResponse 'from django.http import JsonResponse' 并将其更改为 'return JsonResponse({'status':False})' –

+0

try和except分支返回两种不同的类型(用户/ JSONResponse),这不是一个好的设计选择.. – thebjorn

+0

@ adeealamsz是的我没有导入, – Tsuna

回答

1

最佳做法是使用尽可能简单的参数(这会使您的功能更容易测试)。

什么你正在寻找在异常情况下的东西,可以从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_CLASSESsettings.py文件'mymiddleware.ImmediateHttpResponseMiddleware'

+0

我应该在哪里创建这两个类? 'ImmediateHttpResponse','ImmediateHttpResponseMiddleware' – Tsuna

+0

无论你想要什么。 – thebjorn

+0

我刚刚尝试过,仍然只是返回正常的404页面而不是'{'status':False}' – Tsuna

相关问题