Объект django «Пользователь» не имеет атрибута «получить» ошибку

Я пишу простое приложение 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))

и мои формы.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'),
)

панели инструментов.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 %}


person jay j    schedule 05.02.2015    source источник
comment
Можете ли вы опубликовать полное сообщение об ошибке?   -  person Burhan Khalid    schedule 05.02.2015
comment
пожалуйста, смотрите мое обновление, я упомянул трассировку ошибок, спасибо   -  person jay j    schedule 05.02.2015
comment
Опубликуйте полное сообщение об обратной трассировке.   -  person Burhan Khalid    schedule 05.02.2015
comment
User = request.User - вы уверены, что это не должно быть user = request.user?   -  person awesoon    schedule 05.02.2015
comment
@скоро я не уверен, так как у меня мало знаний в этом   -  person jay j    schedule 05.02.2015
comment
@jayj это HrttpResponseRedirect ? Должно быть HttpResponseRedirect   -  person Raja Simon    schedule 05.02.2015
comment
@Raja, спасибо, я исправил, но все равно выдает ту же ошибку.   -  person jay j    schedule 05.02.2015
comment
@jayj Вы последовали @soon совету? После этого какую ошибку вы получаете   -  person Raja Simon    schedule 05.02.2015
comment
@Raja да, даже сейчас это то же сообщение об ошибке, что и раньше   -  person jay j    schedule 05.02.2015
comment
@jayj Ваш URL-адрес неверен == › mhawk.views.User, он должен быть mhawk.views.user   -  person Raja Simon    schedule 05.02.2015


Ответы (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))
person lehins    schedule 05.02.2015
comment
и я должен удалить пользователя (запрос) в views.py - person jay j; 05.02.2015
comment
да, вы должны, я печатаю правку, что вы должны сделать там тоже - person lehins; 05.02.2015
comment
Итак, из вашего кода, вот самое большое предложение, которое у меня есть для вас. Используйте только первую заглавную букву для классов, а не для методов или переменных, это соглашение практически во всех языках. Ваша проблема была еще одним доказательством этого. В остальном удачи в изучении django. - person lehins; 05.02.2015
comment
мой шаблон dashboards.html находится внутри папки template/registration моего приложения, где существует login и logout.html. но я получаю ошибку шаблона не существует - person jay j; 05.02.2015
comment
а как насчет шаблона дашбордов? - person lehins; 05.02.2015
comment
Тогда используйте вместо этого registration/dashboards.html. Видите ли, вам нужно указать путь к шаблону относительно каталога приложения templates, если только вы не добавите пути к TEMPLATE_DIRS в настройках. - person lehins; 05.02.2015
comment
привет, Алекс, могу я узнать, как получить имя группы пользователей, используя имя пользователя - person jay j; 05.02.2015
comment
Если вы говорите о django.contrib.auth.models.Group, то вы должны иметь возможность получить все группы, к которым принадлежит пользователь, используя этот запрос: groups = user.groups.all(), это, конечно, если вы получили пользователя, иначе: groups = Group.objects.filter(user__username='username') - person lehins; 05.02.2015
comment
да, это модели django. Group, я хочу отобразить имя группы, как я делал это ранее для имени пользователя, надеюсь, вы помните, спасибо - person jay j; 05.02.2015
comment
User имеет отношения ManyToMany с Group, поэтому способ получения групп для пользователя объясняется в моем предыдущем комментарии. Мне пора спать, я постараюсь ответить на все ваши вопросы завтра. - person lehins; 05.02.2015
comment
Алекс, если вы там, посмотрите мой вопрос, который я разместил сегодня, и, пожалуйста, дайте мне знать, что можно сделать, спасибо. - person jay j; 06.02.2015
comment
привет, может кто-нибудь, пожалуйста, помогите мне, как получить панели инструментов, которые имеют группу как внешний ключ с той же моделью, что и выше. это очень срочно, пожалуйста, помогите мне - person jay j; 10.02.2015