重定向未登录用户的最佳实施方法是什么?有没有更好的方法在每个视图中使用@is_autenticated
类型的欺骗者?
我想到的另一种方法是让base.html
检查is_authenticated
,每个html都会扩展基数。例如:
base.html文件
{% if request.user.is_authenticated %}
{% block content %}
content here
{% endblock content %}
{% else %}
redirect
我觉得这种方式会将视图逻辑放入模板中,而这种模板确实不会很好,但它会避免每个函数上的装饰器。
答案 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]})