2014-10-22 60 views
0

我有這樣Django的HttpResponseRedirect從功能

def checkLogin(request) 
    if request.user.is_authenticated: 
     return None 
    else: 
     return HttpResponseRedirect(reverse(login)) 

def somePage(request) 
    checkLogin(request) #kicks the user out if not login 

    #do other things here if not kick out 

我想在我的很多意見checkLogin代碼,所以我希望把它放在一個功能,便於使用。

但是由於某些原因,HttpResponseRedirect無法正常工作。我可以使用渲染而不是httpresponseredirect。

回答

0

因爲你可以用你的使用情況login_required裝飾器https://docs.djangoproject.com/en/1.7/topics/auth/default/#the-login-required-decorator

一般來說,只有視圖函數的返回值被返回爲當你想返回一個404,你可以通過對視圖提高了404例外,這將泡沫

def checkLogin(request) 
    if request.user.is_authenticated: 
     return None 
    else: 
     return HttpResponseRedirect(reverse(login)) 

def somePage(request) 
    needs_login = checkLogin(request) #kicks the user out if not login 
    if needs_login: 
     return needs_login 

    #do other things here if not kick out 

唯一的例外是:一個HttpResponse對象,你可以做這樣的事情。

def checkLogin(request) 
    if not request.user.is_authenticated: 
     raise Http404 

def somePage(request) 
    checkLogin(request) #kicks the user out if not login 

    #do other things here if not kick out 
+0

非常感謝您的解釋。 – user2478240 2014-10-22 11:30:01

3

還有就是內置Django的解決方案from django.contrib.auth.decorators import login_required你需要以上只是把裝飾:

@login_required 
def somFunc(): 

,或者如果它是通用視圖無法正常from django.utils.decorators import method_decorator

@method_decorator(login_required) 
def dispatch(self, request, *args, **kwargs): 
+0

非常感謝您的建議。它出色地工作 – user2478240 2014-10-22 11:29:30