Django - 检索未经身份验证的用户对象

时间:2013-02-28 04:10:59

标签: django

正如标题所述,我需要用户检索不同用户的用户信息,无论他们是否经过身份验证。

我有一个'配置文件'模板,其中包含一些逻辑,用于显示静态用户信息(对于公共用户)或可编辑的用户信息(对于它所属的用户)。

问题:我的模板中的条件返回“true” - User对象似乎已经过身份验证但是它不是。如果我从该页面(配置文件)导航,则没有用户登录。

我对Django很新。我没有在view.py中正确检索用户对象吗?

views.py

def GetProfileById(request, userid):
    try:
        user = User.objects.get(pk=userid)
    except User.DoesNotExist:
        return HttpResponseRedirect('/')

    try:
        user_profile = user.get_profile()
    except Exception:
        return HttpResponseRedirect('/')

    context = {'user': user, 'user_profile': user_profile}
    return render_to_response('profile.html', context, context_instance=RequestContext(request))

profile.html

{% if user.is_authenticated %}

    <form id="form-about" class="form-horizontal" action="{% url update-user-profile %}" method="POST">
        {% csrf_token %}
        <p>{{ about_form.first_name }}</p>
        <p>{{ about_form.last_name }}</p>
        <p>{{ about_form.birthday }}</p>
        <p>{{ about_form.profession }}</p>
        <button class="btn btn-primary" type="submit">Save</button>
    </form>

{% else %}

     <p><b>Name:</b> {{ user.first_name }} {{ user.last_name }}</p>
     <p><b>DOB:</b> {{ user_profile.birthday }}</p>
     <p><b>Profession:</b> {{ user_profile.profession }}</p>
     <p><b>Member since:</b> {{ user.date_joined|date:'Y-M-d'  }}</p>
     <p><b>Last login:</b> {{ user.last_login|date:'Y-M-d @ H:i' }}</p>

{% endif %}

2 个答案:

答案 0 :(得分:3)

看起来,您要做的是,如果用户当前已登录,您希望显示一个表单,让他们更新个人资料。

所以问题是:

  1. 在您的视图中,您将user设置为数据库中的User对象。
  2. 此对象不代表或包含有关当前用户是否已登录的信息。它只是来自数据库的记录。
  3. 您想要检查request.user,它代表请求网页的用户的User对象。
  4. 所以在你的模板中,改变:

    {% if user.is_authenticated %}
    

    为:

    {% if request.user.is_authenticated %}
    

答案 1 :(得分:1)

我相信你会让userrequest.user感到困惑。前者是正在显示的用户,后者是当前登录的用户,如果没有人登录则是AnonymousUser。

如果当前登录的用户和正在显示的用户相同,您想要显示该表单吗?然后改变

{% if user.is_authenticated %}

{% ifequal user request.user %}