gpt4 book ai didi

Django 用户的 DetailVew 影响经过身份验证的用户

转载 作者:行者123 更新时间:2023-12-02 06:31:59 24 4
gpt4 key购买 nike

我尝试使用 DetailView 显示有关用户(个人资料页面)的信息。它有效,但是当我出于某种原因打开用户的 DetailView 时,Django 认为我已通过该用户的身份验证。举个例子,如果我注销,打开某个用户的 DetailView,Django 开始认为我是作为该用户登录的。我可以看到问题,因为 base.html 显示当前登录的用户并在用户未经身份验证时发生更改。任何想法有什么问题吗?谢谢!

View .py

class ProfileView(DetailView):
model = User
template_name = 'users/profile.html'

url.py

urlpatterns = [
path('profile/<int:pk>/<str:username>', ProfileView.as_view(), name='profile'),
]

个人资料.html

{% extends 'base.html' %}
{% block content %}
<article class = 'media content-section'>
<div class="media">
<img class="avatar-image rounded-circle" src="{{ user.profile.image.url }}">
</div>
<div class = 'media-body'>
<div class='article-metadata'>
<h3>Профиль {{user.username}}</h3>
</div>
<div class="article-content">
<p>{{user.first_name}}</p>
<p>{{user.email}}</p>
<p>{{user.profile.birthdate}}</p>
<p>{{user.date_joined}}</p>
</div>
</div>
</article>
{% endblock %}

base.html

<div class="navbar-nav">
{% if user.is_authenticated %}
<div class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="far fa-user-circle" title="Пользователь"> {{user.username}}</i></a>
...

最佳答案

实际上,用户没有登录,而是你的代码有问题。当您使用上下文参数 userUser 数据发送到模板时,它会与 request.user 混合在一起。有趣的是,如果您尝试使用该用户(从 DetailView 发送),它将显示 is_authenticated true,因此您将在基于 html 中看到登录的用户。例如:

user = User.objects.first()
user.is_authenticated() # It will return True

为了防止这种情况,您需要为 DetailView 发送不同的上下文参数。喜欢:

class ProfileView(DetailView):
context_object_name = "profile_user"
...

并在模板中使用profile_user。另外,如果您只希望登录用户访问该特定 View ,那么您应该从 LoginRequiredMixin 继承它。 。例如:

from django.contrib.auth.mixins import LoginRequiredMixin

class ProfileView(LoginRequiredMixin, DetailView):
...

关于Django 用户的 DetailVew 影响经过身份验证的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54378238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com