Представление не вернуло объект HttpResponse

def login_view(request):
    
    if request.method=='POST':
        user_name=request.POST['username']
        _password=request.POST['password']
        user=authenticate(request,username=user_name,password=_password)
        if user is not None:
           login(request,user)
           return HttpResponseRedirect(reverse('index'))
        else:
           return render(request,'users/login.html',{'message':'Invalid Credentials'}) 
  else:
      return render(request,'users/login.html')

вот мой логин.html

{% extends "users/layout.html" %}
{% block contents %}

{% if message %}

<div>{{message}}</div>
{% endif %}
<form action = "{% url 'login' %}" method = "POST">

    {% csrf_token %}
    <input type = "text" placeholder = "UserName" name = "username">
    <input type = "password" placeholder = "PASSWORD" name = "password">
    <input type = "submit" value = "login">

</form>

{% endblock %}

Я получаю следующее сообщение об ошибке, если я удаляю последнее: когда я перехожу к пользователям/URL

The view users.views.login_view didn't return an HttpResponse object. It returned None instead.

если я добавлю последним еще: я получаю исключение TemplateDoesNotExist

Вот скриншот моего проекта

Я просто предполагаю, что if request.method=='POST' оценивается как false, поэтому эта функция по умолчанию возвращает None

Take_Care_ 22.12.2020 18:15

Что, если вы сделаете запрос GET, то функция ничего не вернет, следовательно None.

Willem Van Onsem 22.12.2020 18:15
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
194
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Сделай это:

def login_view(request):
    
    if request.method=='POST':
        user_name=request.POST['username']
        _password=request.POST['password']
        user=authenticate(request,username=user_name,password=_password)
        if user is not None:
           login(request,user)
           return HttpResponseRedirect(reverse('index'))
        else:
           return render(request,'users/login.html',{'message':'Invalid Credentials'}) 
    else: # add this
        return render(request,'users/login.html') 

Поскольку каждый раз, когда вы впервые получаете доступ к представлению, вы отправляете метод GET, ваше представление выдает ошибку, поскольку для него ничего не определено, когда вы добавляете else, вы, по сути, говорите, что если request.method является чем-то другим, кроме POST, тогда визуализируйте шаблон. Затем, когда вы находитесь на странице, вы можете отправить запрос POST, и ваше представление обработает его так, как должно.

Пожалуйста, объясните, что ваш код делает по-другому и как он это делает.

M-Chen-3 22.12.2020 18:18

Я попробовал это выше, предложил уже, что это исключение из-за последней строки, которую вы добавили

Janson 22.12.2020 18:19

какое исключение?

SLDem 22.12.2020 18:20

TemplateDoesNotExist

Janson 22.12.2020 18:21

django.template.exceptions.TemplateDoesNotExist: пользователи/логин.html.

Janson 22.12.2020 18:22

У меня есть login.html в шаблонах

Janson 22.12.2020 18:23

Вы можете добавить шаблон к вопросу?

SLDem 22.12.2020 18:23

спасибо, я отредактировал это и полностью перепостил с обеими ситуациями

Janson 22.12.2020 18:29

попробуйте создать отдельное представление, которое просто отображает ваш login.html, вы, вероятно, просто указали для него неправильный путь, вы также можете добавить скриншот структуры вашего проекта, показывающий все приложения с папками (особенно с login.html), а также добавить свои настройки TEMPLATES словарь к вопросу

SLDem 22.12.2020 18:32

спасибо, теперь доступна полная структура проекта

Janson 22.12.2020 18:37

добавьте настройки TEMPLATES к вопросу, пожалуйста

SLDem 22.12.2020 18:37

Не работает, но нет необходимости указывать шаблоны, но я пробовал, не работает

Janson 22.12.2020 18:49

Давайте продолжим обсуждение в чате.

SLDem 22.12.2020 18:49

Другие вопросы по теме