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
Вот скриншот моего проекта
Что, если вы сделаете запрос GET, то функция ничего не вернет, следовательно None
.
Сделай это:
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
, и ваше представление обработает его так, как должно.
Пожалуйста, объясните, что ваш код делает по-другому и как он это делает.
Я попробовал это выше, предложил уже, что это исключение из-за последней строки, которую вы добавили
какое исключение?
TemplateDoesNotExist
django.template.exceptions.TemplateDoesNotExist: пользователи/логин.html.
У меня есть login.html в шаблонах
Вы можете добавить шаблон к вопросу?
спасибо, я отредактировал это и полностью перепостил с обеими ситуациями
попробуйте создать отдельное представление, которое просто отображает ваш login.html
, вы, вероятно, просто указали для него неправильный путь, вы также можете добавить скриншот структуры вашего проекта, показывающий все приложения с папками (особенно с login.html
), а также добавить свои настройки TEMPLATES
словарь к вопросу
спасибо, теперь доступна полная структура проекта
добавьте настройки TEMPLATES
к вопросу, пожалуйста
Не работает, но нет необходимости указывать шаблоны, но я пробовал, не работает
Давайте продолжим обсуждение в чате.
Я просто предполагаю, что
if request.method=='POST'
оценивается как false, поэтому эта функция по умолчанию возвращает None