Форум программистов, компьютерный форум, киберфорум
Python: Web
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/26: Рейтинг темы: голосов - 26, средняя оценка - 4.73
123 / 62 / 32
Регистрация: 10.01.2014
Сообщений: 241

MultiValueDictKeyError

12.03.2014, 16:13. Показов 5195. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
пытаюсь залогинить(наверное так называется) пользователя
форма html:
HTML5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{% extends "bc/index.html" %}
{% block form %}
    <div>
        <form action = "" method = "post" class = "registration">
            {% csrf_token %}
            {% if errors %}
                {% for error in errors %}
                    <p>{{error}}</p>
                {% endfor %}
            {% endif %}
            <p><input type = "username" name = "username" placeholder = "Введите логин"></p>
            <p><input type = "password" name = "password" placeholder = "Введите ваш пароль"></p>
            <input type = "submit" value = "войти">
        </form>
    </div>
    {% endblock %}
views.py:
Python
1
2
3
4
5
6
7
8
9
10
11
from django.contrib.auth import login, authenticate, logout
 
def login_user (request):
    user = authenticate (username = request.POST['username'],
                        password = request.POST['password'])
    if user is not None:
        login (request, user)
        return render_to_response ('bc/account_page.html', locals ())
        
    else:
        return render_to_response ('bc/login_page.html')
выдает ошибку :
MultiValueDictKeyError at /bc/login/
"'username'"

в local vars действительно пустой словарь (nPOST:<QueryDict: {})
но как сделать его не пустым . Я ведь даже не могу зайти на страницу что бы заполнить поля формы (выдает ошибку при попытке загрузить страницу)
пытался вставлять код из доков:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        from django.contrib.auth import authenticate, login
 
        def my_view(request):
            username = request.POST['username']
            password = request.POST['password']
            user = authenticate(username=username, password=password)
            if user is not None:
                if user.is_active:
                    login(request, user)
                    # Redirect to a success page.
                else:
                    # Return a 'disabled account' error message
            else:
                # Return an 'invalid login' error message.
 
.. admonition:: Calling ``authenticate()`` first
реакция та же.
0
123 / 62 / 32
Регистрация: 10.01.2014
Сообщений: 241
12.03.2014, 16:28  [ТС]
решил поискать решение в интернете, гугл выдает забавный результат:
По мнению гугла:
По фактуНазвание: Screenshot - 12_03 002.png
Просмотров: 214

Размер: 851 байт
0
123 / 62 / 32
Регистрация: 10.01.2014
Сообщений: 241
12.03.2014, 18:11  [ТС]
пробовал передавать через get (по похожей проблеме посоветовали на http://stackoverflow.com/quest... login-page)
ничего не изменилось, QueryDict пуст и не представляется возможным его заполнить.

Добавлено через 35 минут
на всякий случай вот так создается новый юзер:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
def new_user_registration (request):
    errors = []
    if 'user' and 'pass' and 'email' in request.GET:
        if User.objects.filter (username = request.GET['user']):
            errors.append ('that username zanyato')
            return render_to_response ('bc/registration_page.html', locals())
 
        new_user = User.objects.create_user (request.GET['user'],
                                            request.GET['pass'], 
                                            request.GET['email'])
        
        return HttpResponseRedirect ('/bc/registration_complete/',locals ())
    else:
        return render_to_response ('bc/registration_page.html/', locals())
Добавлено через 55 минут
да, все верно, код работать не может
переписал
Python
1
2
3
4
5
6
7
8
9
10
11
def login_user (request):
    if 'username' and 'password' in request.GET:    
        user = authenticate (username = request.GET['username'],
                        password = request.GET['password'])
        if user.is_active:
            login (request, user)
            return render_to_response ('bc/account_page.html', locals ())
        else:
            pass
    else:
        return render_to_response ('bc/login_page.html')
в случае с суперюзером все работает корректно, с обычным пользователем:

AttributeError at /bc/login/
'NoneType' object has no attribute 'is_active'
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
12.03.2014, 20:05
scio me nescire, у вас пользователь не авторизовался значит, у вас в user None лежит...

Добавлено через 25 секунд
А вот почему, надо подумать...
0
0 / 0 / 0
Регистрация: 26.08.2013
Сообщений: 13
13.03.2014, 16:09
Попробуйте вначале добавить проверку

Python
1
if 'username' in request.POST and request.POST['username']
если есть то выполнять login()
иначе просто отображать форму
0
123 / 62 / 32
Регистрация: 10.01.2014
Сообщений: 241
17.03.2014, 14:38  [ТС]
все раешилось передачей объекту юзер логин емейл и пароль в виде именованных а не поз. аргументов,
Python
1
2
3
new_user = User.objects.create_user (username = request.GET['user'],
                                                password = request.GET['pass'], 
                                                email = request.GET['email'])
не особо понял почему так, но пробовал сделать как раньше и ошибка возвращалась
0
 Аватар для Wolkodav
842 / 480 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
17.03.2014, 21:37
scio me nescire, вообще в GET такие вещи плохо пихать...
0
123 / 62 / 32
Регистрация: 10.01.2014
Сообщений: 241
17.03.2014, 23:08  [ТС]
Wolkodav, знаю, с постом нет времени разбираться пока, там с {%csrf_token%} как то сразу незаладилось, решил отложить пока.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru