【问题标题】:django 'User' object has no attribute 'get' errordjango'用户'对象没有属性'get'错误
【发布时间】:2015-04-04 20:27:48
【问题描述】:

我正在编写一个简单的 django 应用程序并陷入此错误,请有人帮助我 我的 views.py 看起来完全一样

def custom_login(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('dashboards')        
    return login(request, 'login.html', authentication_form=LoginForm)

def custom_logout(request):
    return logout(request, next_page='/')

def user(request):
        context = {'user': user, 'groups': request.user.groups.all(), 'dashboards': Dashboard}
    return render_to_response('registration/dashboards.html', context, context_instance=RequestContext(request))

我的 forms.py 就像

from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
#from mhawk.models import Dashboard


class LoginForm(forms.Form):
        username        = forms.CharField(label=(u'User Name'))
        password        = forms.CharField(label=(u'Password'), widget=forms.PasswordInput(render_value=False))

问题是我正在尝试在 html 页面中显示登录的用户名。

这是我的错误追溯

Environment:


Request Method: POST
Request URL: http://127.0.0.1:8000/user/

Django Version: 1.7.3
Python Version: 2.7.3
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'mhawk')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware')


Traceback:
File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response
  204.                 response = middleware_method(request, response)
File "/usr/local/lib/python2.7/dist-packages/django/middleware/clickjacking.py" in process_response
  31.         if response.get('X-Frame-Options', None) is not None:

Exception Type: AttributeError at /user/
Exception Value: 'User' object has no attribute 'get'

urls.py 看起来像

from django.conf.urls import patterns, include, url
from django.contrib import admin
from drinker import views, models
from django.contrib.auth.models import User

urlpatterns = patterns('',

    url(r'^admin/', include(admin.site.urls)),
    url(r'^login/$', 'django.contrib.auth.views.login',),
    url(r'^logout/$', 'django.contrib.auth.views.logout'),
    url(r'^user/$', 'mhawk.views.User'),
)

dashboards.html:-

{% extends "base.html" %}
{% block content %}
{% if user.is_authenticated %}
    <p>Welcome, {{ request.user.get_username }}. <br/>
    {% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

<ul>
{% for group in groups %}
    <li>
        <strong>{{ group.name }}<strong> -
        
            {{ dashboards.d_name }}{% if not forloop.last %},{% endif %}
        
    </li>
{% endfor %}
</ul>



{% endblock %}

【问题讨论】:

  • 你能发布完整的错误信息吗?
  • 请看我的更新我提到了错误回溯,谢谢
  • 请发布完整回溯消息。
  • User = request.User - 你确定这不应该是user = request.user吗?
  • @soon 我不确定,因为我对它了解不多

标签: django django-authentication django-users


【解决方案1】:

编辑

这是你的问题,在 url 中,你指向的不是视图,而是 User Python 区分大小写,你知道的。 :)


您的问题不是response,而是中间件正在获取User 对象,所以在某个地方,您返回的是用户而不是响应,但我在您的代码中看不到它。

不管怎样,你为什么不使用 django 的认证视图呢?他们做的事情和你试图实现的一样。

from django.contrib.auth.views import login, logout

def custom_login(request):
    if request.user.is_authenticated():
        return HttpResponseRedirect('dashboards')        
    return login(request, 'login.html', authentication_form=LoginForm)

def custom_logout(request):
    return logout(request, next_page='/')

哦,是的,将其添加到您的设置中:

LOGIN_REDIRECT_URL = '/dashboards/'

这是一个承诺的user视图:

from django.contrib.auth.decorators import login_required

@login_required
def user(request):
    # btw 'user' variable is already available in templates
    context = {'user': request.user}
    return render_to_response('dashboards.html', context, context_instance=RequestContext(request))

【讨论】:

  • 我应该在views.py中删除用户(请求)
  • 是的,你应该,我正在输入一个编辑,你也应该在那里做什么
  • 所以,从你的代码来看,这是我给你的最大建议。只对类使用第一个大写字母,而不是方法或变量,这是几乎所有语言的惯例。你的问题只是另一个证明。否则,祝你学习 django 好运。
  • 我的dashboards.html 模板位于我的应用程序的template/registration 文件夹中,其中存在login 和logout.html。但我得到模板不存在错误
  • 仪表板模板怎么样?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-18
相关资源
最近更新 更多