django'User'对象没有属性'get'错误 [英] django 'User' object has no attribute 'get' error

查看:271
本文介绍了django'User'对象没有属性'get'错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在写一个简单的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来自dja的
ngo.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页面中显示登录用户名。



这里是我的追踪错误

 环境:


请求方法:POST
请求URL:http://127.0.0.1:8000/user/

Django版本:1.7.3
Python版本:2.7.3
安装的应用程序:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'mhawk')
安装的中间件:
('django.contrib.sessions.middleware.Sessi onMiddleware',
'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')


追溯:
文件/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.pyin get_response
204. response = middleware_method(请求,响应)
在process_response
中的文件/usr/local/lib/python2.7/dist-packages/django/middleware/clickjacking.py31.如果response.get('X-Frame -Options',None)不是None:

异常类型:/ user /
中的AttributeError异常值:'User'对象没有属性'get'

urls.py看起来像

 从django.c onf.urls导入模式,包括来自django.contrib的url 
从饮酒者导入视图导入管理
,模型
从django.contrib.auth.models导入用户

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 : -



< pre class =snippet-code-html lang-html prettyprint-override> {%extendsbase.html%} {%block content%} {%if user.is_authenticated%}< p> ;欢迎,{{request.user.get_username}}。 <峰; br /> {%else%}< p>欢迎,新用户。请登录。< / p> {%endif%}< ul> {%for group in groups%}< li> < strong> {{group.name}}< strong> - {{dashboards.d_name}} {%if not forloop.last%},{%endif%}< / li> {%endfor%}< / ul> {%endblock%}

解决方案

p>

有你的问题,在网址中,你指向的不是视图,而是指向用户你知道Python是区分大小写的。 $)
$ b




您的问题不是响应,中间件是得到一个用户对象,所以在任何地方,而不是回复你返回一个用户,我没有看到它在代码中。



无论如何,为什么不使用django的身份验证视图?他们做的是同样的东西,你试图实现。

 从django.contrib.auth.views导入登录,注销

def custom_login(request):
如果request.user.is_authenticated():
返回HttpResponseRedirect('dashboards')
返回登录(request,'login.html' authentication_form = LoginForm)

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

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

  LOGIN_REDIRECT_URL ='/仪表板/'

这里是一个承诺的用户查看:

  from django.contrib.auth.decorators import login_required 

@login_required
def user(request):
#btw'user'变量已经在模板中可用
context = {'user':request.user}
return render_to_response('dashboards.html'上下文,context_in stance = RequestContext(request))


I am writing an simple django application and got stuck into this error, can some one please help me my views.py looks exactly as

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))

and my forms.py is like

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))

and the thing is I am trying to display the logged in username in an html page.

here is my trace back of error

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 looks like

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

解决方案

Edit

There is your problem, in urls, you are pointing not to a view, but to a User. Python is case sensitive, you know. :)


Your problem is instead of response, middleware is getting a User object, so somwhere, instead of response you are returning a user, I don't see it in your code though.

Regardless, why don't you use django's authentication views? They do same stuff as you are trying to implement.

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='/')

Oh yeah, and add this to your settings:

LOGIN_REDIRECT_URL = '/dashboards/'

And here is a promised user view:

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))

这篇关于django'User'对象没有属性'get'错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆