2015-02-05 2 views
2

Я пишу простое приложение, Джанго и застрял в эту ошибку, может кто-то пожалуйста, помогите мне мой 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 %}

+0

Можете ли вы отправить полное сообщение об ошибке? –

+0

см. Мое обновление Я упомянул ошибку traceback, спасибо –

+0

Пожалуйста, отправьте ** полное сообщение ** traceback. –

ответ

1

Edit

Существует ваша проблема, в адресах, вы указываете не на вид, но на User. Python чувствителен к регистру, вы знаете. :)


Вашей проблема вместо response, промежуточный слой получает User объекта, так Somwhere, вместо ответа вы возвращаете пользователь, я не вижу его в коде, хотя.

Независимо от того, почему вы не используете учетные записи 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)) 
+0

и должно я снимаю пользователя (запрос) в представлениях.py –

+0

да, вы должны, я набираю текст редактирования, что вам тоже нужно делать –

+0

Итак, из вашего кода, вот самое большое предложение, которое у меня есть для вас. Используйте только первую заглавную букву для классов, а не для методов или переменных, это соглашение практически на всех языках. Ваша проблема была просто еще одним доказательством этого. В противном случае удачи в изучении джанго. –