django 'User' object has no attribute 'get' error

蓝咒 提交于 2019-12-02 02:34:55

问题


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

回答1:


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


来源:https://stackoverflow.com/questions/28336247/django-user-object-has-no-attribute-get-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!