2013-02-28 40 views
1

正如标题所述,我需要用户检索不同用户的用户信息,而不管它们是否经过身份验证。Django - 检索未经身份验证的用户对象

我有一个'配置文件'模板与一些逻辑来显示静态用户信息(公开)或可编辑的用户信息(对于它所属的用户)。

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

我对Django相当陌生。我是不是在我的view.py中正确检索User对象?

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 %} 
+0

你期待'.is_authenticated()'来告诉你,如果用户记录,来自数据库,目前登录? – 2013-02-28 04:14:59

+0

如果您点击一个链接,然后用户没有登录,并不表示他们以前没有登录过。 – 2013-02-28 04:23:14

+0

我想让页面有两种行为。 1)如果所请求的配置文件属于当前登录进行特定会话的用户,则该页面应具有表单,以便用户可以更新他/她的信息。 2)对于所有其他请求(已验证或未验证),以静态形式显示配置文件信息(即不可编辑....无形式)。 – 2013-02-28 14:03:11

回答

3

好像,你想要做的是,如果用户当前已登录,您想要显示一个让他们更新配置文件的表单。

所以问题是:

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

所以在你的模板,更改:

{% if user.is_authenticated %} 

到:

{% if request.user.is_authenticated %} 
+0

这正是我想要做的。我会在今晚晚些时候做出这个改变并向你报告。谢谢! 如果是这样的话,为什么user.is_authenticated返回true? – 2013-02-28 13:58:39

+0

杰克 - 你的建议没有奏效。 – 2013-03-02 02:22:03

+0

根据文档,实例化的用户的is_authenticated()方法总是返回true。这是多么愚蠢?所以作为一个解决方法,一旦我在我的视图函数中获得了一个User对象,我就创建了一个包含我的模板所需的用户数据的字典。 – 2013-03-02 02:45:59

1

我相信你混淆userrequest.user。前者是显示的用户,后者是当前登录的用户,如果没有人登录,则为AnonymousUser。

如果当前登录的用户和用户被显示的是相同的,对吗?然后,只需改变

{% if user.is_authenticated %} 

{% ifequal user request.user %} 
相关问题