Reputation: 285
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 %}
Upvotes: 2
Views: 4946
Reputation: 9767
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))
Upvotes: 2