Python 特定页面在django中失去身份验证
如果我在登录后移动特定页面,我将丢失django中的身份验证。 如果我移动另一个页面,我就可以在不登录的情况下再次获得身份验证Python 特定页面在django中失去身份验证,python,django,authentication,Python,Django,Authentication,如果我在登录后移动特定页面,我将丢失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
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'),
}
)
这是有问题的查看代码。如果您愿意,也可以使用这种方式登录,效果非常好:
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'))
如果具有基于类的视图,则应使用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\u url是在用户未经身份验证的情况下提供重定向链接的地方。在这里,我已重定向到根目录,即登录页面。
您可以这样定义视图
对于基于函数的视图,您可以使用登录所需的装饰程序
您还应该使用Django会话进行安全保护。如果您在访问上面的视图后不登录就可以继续访问站点,您如何知道您失去了身份验证?@Andriy我使用此代码,
{%if user.is_authenticated%}
。该页面仅返回false,但其他页面在登录后返回true。您确定传递到url的user\u id
正确吗?由于\u user=get\u object\u或
无法获取正确的用户…请尝试将RequestContent(request)
添加到render方法中,因此将render(yourParams)
替换为render(yourParams,RequestContent(request))
@andry,谢谢您的回复。我发现了这个问题,它是由'user':\u user
引起的。我使模板user
覆盖我的用户。