Django没有在数据库中看到用户?

时间:2014-01-05 23:17:13

标签: python django django-models django-views django-generic-views

我有一个数据库,并启用了管理界面。当我进入管理界面并点击“用户”时,有一个用户的用户名为ayman。我正在阅读一本名为“Packt Publishing,使用Django学习网站开发”的书中的教程。现在,在我的urls.py中,这就是我所拥有的。

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^$', main_page),
    url(r'^user/(\w+)/$', user_page), 
)

在我的views.py中,这是我的user_page

def user_page(request, username):

    try:
        user = User.objects.get(username=username)
    except:
        raise Http404(username +' not found.')

    bookmarks = user.bookmark_set.all()
    variables = {
        'username': username,
        'bookmarks': bookmarks
    }

    return render(request, 'user_page.html', variables)

我使用通用User视图来管理我的用户。当我进入终端并做

$python manage.py shell

并做

>>> from django.contrib.auth.models import User
>>> from bookmarks.models import *
>>> user = User.objects.get(id=1)
>>> user
<User: ayman>
>>> user.username
u'ayman'

如您所见,用户名ayman确实存在。现在,返回到URL和user_page视图。在我的网络浏览器中,我去了

127.0.0.1/user/ayman/

urls.py应该抓取ayman并将其作为参数传递给user_page,对吧?确实如此,但user_page视图不断提高404错误,并显示ayman not found。因此,username中的user_page参数实际上是ayman,但它始终未通过

user = User.objects.get(username=username)

即使ayman是我的数据库中的用户名。知道为什么吗?

1 个答案:

答案 0 :(得分:4)

您正在使用裸except子句,请尝试except User.DoesNotExist。裸except掩盖了真正的错误,缺少导入。顺便说一句。还有一个捷径:

from django.shortcuts import get_object_or_404
# ...
user = get_object_or_404(User, username=username)

第一个参数是模型或查询集,以下全部作为关键字参数传递给queryset.get()