1

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

我有一个“个人资料”模板,其中包含一些逻辑来显示静态用户信息(对于公共)或可编辑的用户信息(对于它所属的用户)。

问题:我的模板中的条件返回“true”——用户对象似乎已通过身份验证,但事实并非如此。如果我从该页面(个人资料)导航,则没有用户登录。

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

视图.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 %}
4

2 回答 2

3

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

所以问题是:

  1. 在您看来,您正在user从数据库中设置一个用户对象。
  2. 该对象不代表或包含有关当前用户是否登录的信息。它只是来自数据库的记录。
  3. 您要检查request.user,它代表请求网页的用户的用户对象。

因此,在您的模板中,更改:

{% if user.is_authenticated %}

至:

{% if request.user.is_authenticated %}
于 2013-02-28T04:27:31.550 回答
1

我相信你很困惑user并且request.user. 前者是显示的用户,后者是当前登录的用户,如果没有人登录,则为 AnonymousUser。

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

{% if user.is_authenticated %}

{% ifequal user request.user %}
于 2013-03-04T20:38:55.560 回答