2014-03-14 27 views
1

重定向未登錄用戶的最佳實施方式是什麼?有沒有更好的方法在每個視圖中使用@is_autenticated類型的欺騙者?Django未通過身份驗證重定向

我想到的另一種方法是有一個base.html它檢查is_authenticated和每個html將擴展基地。例如:

base.html文件

{% if request.user.is_authenticated %} 
    {% block content %} 
    content here 
    {% endblock content %} 

{% else %} 
    redirect 

我覺得雖然這種方式提出觀點的邏輯成真的沒有坐好模板,但它會避免在每個功能的裝飾。

回答

0

Django有一個內置的身份驗證模型。身份驗證邏輯應該始終位於視圖中,並且在模板中包含視圖邏輯是一種不好的做法。一旦用戶通過身份驗證,您就可以從視圖渲染主頁以及歡迎message.You可以做到以下幾點:

from django.contrib.auth import authenticate 
# login to home page - 
def home(request): 


    try: 
     username = password = '' 
     if request.POST: 
      username = request.POST['username'] 
      password = request.POST['password'] 
      print username 
      print password 
      user = authenticate(username=username, password=password) 
      print "User value is",user 

     if user is not None: 
      if user.is_active: 
       login(request, user) 
       request.session['username'] = username 
       return render_to_response('home.html',{"message": "Welcome"}) 
      # Redirect to a success page. 
      else: 
       return render_to_response('login.html',{"message": "User is Inactive"}) 

      # Return a 'disabled account' error message 

     else: 
      return render_to_response('login.html',{"message": "Invalid Credential"}) 
     else: 
      return render_to_response('home.html',{"user" : request.session['username']}) 
    except: 
     return render_to_response('error.html',{"message": sys.exc_info()[0]})