Django未经过身份验证的重定向

时间:2014-03-14 03:10:13

标签: django django-templates

重定向未登录用户的最佳实施方法是什么?有没有更好的方法在每个视图中使用@is_autenticated类型的欺骗者?

我想到的另一种方法是让base.html检查is_authenticated,每个html都会扩展基数。例如:

base.html文件

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

{% else %}
   redirect

我觉得这种方式会将视图逻辑放入模板中,而这种模板确实不会很好,但它会避免每个函数上的装饰器。

2 个答案:

答案 0 :(得分:1)

您可以使用一些中间件。就个人而言,我认为在模板中进行重定向(我在javascript代码中假设)非常难看。如果大多数视图都需要身份验证,Django-stronghold(https://github.com/mgrouchy/django-stronghold)会很好。

答案 1 :(得分:0)

Django有一个内置的身份验证模型。身份验证逻辑应该始终在视图中,并且在模板中包含视图逻辑是一种不好的做法。一旦用户通过身份验证,您就可以从视图中呈现主页以及欢迎message.您可以执行以下操作:

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]})