Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » При авторизации вылетает MultiValueDictKeyError на password = request.POST['password'] [RSS Feed]

#1 Май 11, 2015 13:27:45

Razlagutt
Зарегистрирован: 2015-02-05
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

При авторизации вылетает MultiValueDictKeyError на password = request.POST['password']

Всем привет! Пожалуйста, помогите с проблемой. Вот код вьюхи:

def get_base_context(prm):
    site_title = SiteTitle.objects.get()
    header_nav = Category.objects.exclude(title='Новости')
    disco = Disco.objects.all()
    disco_name = Disco.objects.filter(category_id=2).first()
    socnet = SocNetButtons.objects.all()
    username = get_user(prm).username
    context = dict(
        site_title=site_title,
        header_nav=header_nav,
        disco=disco,
        disco_name=disco_name,
        socnet=socnet,
        username=username
    )
    return context
def user_login(request):
    context = get_base_context(request)
    context.update(csrf(request))
    if request.POST:
        username = request.POST['username']
        password = request.POST['password']
        print(username)
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                return redirect('/')
            else:
Из-за чего вылетает:
Environment:
Request Method: POST
Request URL: http://localhost:8000/login/
Django Version: 1.8
Python Version: 3.4.0
Installed Applications:
('django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'cannibal_corpse',
 'embed_video',
 'sorl.thumbnail')
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',
 'django.middleware.security.SecurityMiddleware')
Traceback:
File "/home/andrey/django/venv/lib/python3.4/site-packages/django/core/handlers/base.py" in get_response
  132.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/andrey/django/mydjangoproject/cannibal_corpse/views.py" in user_login
  90.         password = request.POST['password']
File "/home/andrey/django/venv/lib/python3.4/site-packages/django/utils/datastructures.py" in __getitem__
  322.             raise MultiValueDictKeyError(repr(key))
Exception Type: MultiValueDictKeyError at /login/
Exception Value: "'password'"
Если написать
password = request.POST.get('password', '')
(аналогично и username), то эта ошибка не вылетает, но user is not None = False, если
password = request.POST['password']
, то выскакивает MultiValueDictKeyError, но в shell'e user is not None = True. Что не нравится, не понимаю?

Отредактировано Razlagutt (Май 11, 2015 13:29:18)

Офлайн

#2 Май 11, 2015 14:04:45

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

При авторизации вылетает MultiValueDictKeyError на password = request.POST['password']

Razlagutt
Exception Value: “'password'”
Очевидно, пароля нет в реквесте.
Сделайте в начале функции
print(request.POST)



Офлайн

#3 Май 11, 2015 14:42:23

Razlagutt
Зарегистрирован: 2015-02-05
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

При авторизации вылетает MultiValueDictKeyError на password = request.POST['password']

FishHook
Ну судя по скрину так и есть. Он вместо пароля цепляет csrf_token. Но это странно в шаблоне вроде все правильно.

<form action="{% url 'user_login' %}" method="POST" class="form-horizontal" role="form">
    {% csrf_token %}
        <div class="form-group">
            <label for="username" class="col-sm-2 control-label">Логин</label>
            <div class="col-sm-10">
                <input type="text" name="username" class="form-control" id="username" placeholder="Логин">
            </div>
        </div>
        <div class="form-group">
            <label for="password" class="col-sm-2 control-label">Пароль</label>
            <div class="col-sm-10">
                <input type="password" class="form-control" id="password" placeholder="Пароль">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <div class="checkbox">
                    <label>
                        <input type="checkbox"> Запомнить меня
                    </label>
                </div>
            </div>
        </div>
    {% if login_error %}
        <div class="form-group">
            <label class="error col-md-12">{{ login_error }}</label>
        </div>
    {% endif %}
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10 group-inline">
                <button type="submit" class="btn btn-default">Войти</button>
                <a href="#">Зарегистрироваться</a>
                <!--button  type="submit" class="btn btn-default">Зарегистрироваться</button-->
            </div>
        </div>
    </form>
Блин! Что за дурь?

Прикреплённый файлы:
attachment Снимок экрана от 2015-05-11 14:30:58.png (19,0 KБ)

Офлайн

#4 Май 11, 2015 14:46:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

При авторизации вылетает MultiValueDictKeyError на password = request.POST['password']

У каждого элемента input должен быть атрибут name, у вашего пароля его нет, поэтому в ПОСТ он не передаётся.



Офлайн

#5 Май 11, 2015 14:52:30

Razlagutt
Зарегистрирован: 2015-02-05
Сообщения: 18
Репутация: +  0  -
Профиль   Отправить e-mail  

При авторизации вылетает MultiValueDictKeyError на password = request.POST['password']

FishHook
У каждого элемента input должен быть атрибут name, у вашего пароля его нет, поэтому в ПОСТ он не передаётся.
Капеееееееееееец! Дурь это мои глаза. Спасибо! Хотя проверял бл*******ь!!!!

Офлайн

  • Начало
  • » Django
  • » При авторизации вылетает MultiValueDictKeyError на password = request.POST['password'][RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version