Ошибка MultiValueKeyDict в документации аутентификации Django - PullRequest
1 голос
/ 26 января 2010

Я пытаюсь следовать коду из http://docs.djangoproject.com/en/1.1/topics/auth/ в отношении имен пользователей.

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)
             HttpResponseRedirect('/%s/'%username) 
         else:
             #Logic will go here later
             pass
     else:
         # Return an 'invalid login' error message.
         pass

Моя проблема в том, что когда я пытаюсь использовать это новое представление, я получаю следующее сообщение об ошибке: ('ожидается блок с отступом', ('C: \ emodel_tracking \ .. \ emodel_tracking \ tracker \ views.py', 50, 4, 'else: \ n'))

Я не вижу, как форматирование в операторе else могло быть неправильным; Я использую код прямо из документации Django. Есть идеи, что не так с утверждением "else"?

edit: ОК, используя pass исправил эту ошибку - теперь я получаю болтовню о: MultiValueDictKeyError в / login / --- Ключ 'username' не найден в QueryDict: {}. Мысли? Я не совсем уверен, что делать дальше - я предполагаю, что мне нужно как-то связать это с HTML-формой, похожей на эту:

  {% extends "base.html" %}

  {% block content %}

  {% if form.errors %}
    <p class="error">Sorry, that's not a valid username or password</p>
  {% endif %}

  <form action="" method="post">
    <label for="username">User name:</label>
    <input type="text" name="username" value="" id="username">
    <label for="password">Password:</label>
    <input type="password" name="password" value="" id="password">

    <input type="submit" value="login" />
    <input type="hidden" name="next" value="{{ next|escape }}" />
  </form>

{% endblock %}

Если это так, то как мне оформить форму (которая, если я не ошибаюсь, потребует заявление 'return') до того, как я запросил информацию, которую требует форма?

Ответы [ 3 ]

5 голосов
/ 27 января 2010

Чтобы ответить на ваш второй вопрос:
Когда представление выполняется, оно пытается прочитать имя пользователя из POST данных.

Это означает, что ваш вид должен быть доступен только после отправки формы (то есть через POST вместе с именем пользователя и паролем) или вам нужно изменить свой вид:

def my_view(request):
    if request.method == "POST":
        username = request.POST['username']
        password = request.POST['password']
        # gon on ...
    else:
        # just show the form

Кстати, лучше следовать этому руководству , чем копировать и вставлять фрагменты кода со страницы документации и пытаться заставить его работать. Это просто фрагменты, они не содержат весь необходимый код.
Неудивительно, что код не работает.

Прочитайте книгу Джанго, и тогда вы сможете задать вопрос, если что-то не работает.

2 голосов
/ 26 января 2010

нет ничего в "другом"; Если ты не хочешь что-то там делать, скажи pass. Документация django предполагает, что вы реализуете там свой собственный код, поэтому, если вы ничего не добавите туда, он обнаружит это как ошибку отступа. Если у вас нет кода для реализации, вы можете намекнуть на python просто ignore else.

else:
    pass
1 голос
/ 26 января 2010

вместо pass, как было предложено, возможно, будет хорошей идеей что-то добавить.

Я использую простые ошибки при отладке, но вы можете перенаправить на какую-то страницу с ошибкой. В любом случае, вот минималистичный метод оповещения пользователя.

return HttpResponse('ERROR: Account Disabled.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...