如果我在登录后移动特定页面,我将失去django中的身份验证。 我移动了另一个页面,我在没有登录的情况下再次获得了身份验证。
def user(request, user_id):
"""
Display a user
:param request: request
:param user_id: user id
:return: render
"""
_user = get_object_or_404(User, id=user_id)
_groups = _user.groups
return render(
request,
'archive/user/user.html',
{
'user': _user,
'groups': _groups.exclude(privacy='CLOSED'),
}
)
这是有问题的视图代码。
答案 0 :(得分:1)
如果拥有基于类的视图,则应使用 LoginRequiredMixins 。 这将检查用户是否经过身份验证以访问该页面。 如果经过身份验证,则会显示该页面,否则您可以再次重定向到登录页面。
示例:
from django.contrib.auth.mixins import LoginRequiredMixin
class home(LoginRequiredMixin,View):
login_url = "/"
def get(self,request):
user = request.user
s = Person.objects.get(pk=user.id)
return render(request,'chat/home.html',locals())
在上面的示例中,如果用户未经过身份验证,则 login_url 是您提供重定向链接的位置。在这里,我已重定向到根,即登录页面。 你可以像这样定义你的观点。
对于基于功能的视图,您可以使用 login_required装饰器。
您还应该使用Django会话来保证安全。
答案 1 :(得分:0)
如果你愿意,也可以用这种方式登录,就像魅力一样:
class Login(View):
template_name = ['your_app_name/login.html', 'your_app_name/home.html']
def get(self, request, *args, **kwargs):
form = UsersForm()
return render(request, self.template_name[0],{"form":form,})
def post(self, request, *args, **kwargs):
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
login(request, user)
#if login is succesfull it takes you to home page:
return render_to_response(self.template_name[1],RequestContext(request))
else:
#if is not, takes you to login page again
return HttpResponseRedirect(reverse('cost_control_app:login'))