Ошибка Django. Модуль 'django.http.request' не имеет атрибута 'POST'
Я новичок в Django и пытаюсь создать простое веб-приложение. Я создал форму входа в систему и добавил гиперссылку для регистрации новых пользователей. К сожалению, я получил следующую ошибку. Модуль 'django.http.request' не имеет атрибута 'POST'
Ниже вы найдете код view.py:
from django.shortcuts import render
from django.http import HttpResponse, request
from django.db import connection
from django.contrib.auth.decorators import login_required
import pyodbc
def index(request):
if 'Login' in request.POST:
rows = []
username = request.POST.get('username')
if username.strip() != '':
rows = getLogin(username)
if len(rows) > 0:
return render(request, 'login/welcome.html')
else:
return render (request, 'login/index.html')
else:
return render (request, 'login/index.html')
else:
return render (request, 'login/index.html')
def newUser(requset):
if 'NewUser' in request.POST:
return render(request,'login/newuser.html')
def getLogin(UserName=''):
command = 'EXEC GetLogin\'' + UserName + '\''
cursor = connection.cursor()
cursor.execute(command)
rows = []
while True:
row = cursor.fetchone()
if not row:
break
userName = row[0]
password = row[1]
name = row[2]
email = row[3]
rows.append({'userName': userName, 'password': password, 'name': name, 'email': email})
cursor.close()
return rows
@login_required(login_url='/')
def readLogin(request):
if request.user.is_authenticated:
rows = getLogin()
return render(request, 'login/loginsdata.html', {'rows': rows})
else:
return HttpResponse('You are not authenticated</br>')
Вот код urls.py приложения для входа в систему:
from django.urls import path
from . import views
urlpatterns = [
path('', views.index, name='index'),
path('logindata/', views.readLogin, name='logindata'),
path('newuser/', views.newUser, name='newuser'),
]
Вот код newuser.html:
{% block content %}
<form method="POST">
{% csrf_token %}
<table>
<tr>
<td>
<lable>Name </lable>
</td>
<td>
<input type="text" name="name">
</td>
</tr>
<tr>
<td>
<lable>Username </lable>
</td>
<td>
<input type="text" name="username">
</td>
</tr>
<tr>
<td>
<lable>Password </lable>
</td>
<td>
<input type="password" name="password">
</td>
</tr>
<tr>
<td>
<lable>Confirm password </lable>
</td>
<td>
<input type="password" name="confirmPassword">
</td>
</tr>
<tr>
<td>
<lable>email </lable>
</td>
<td>
<input type="email" name="email">
</td>
</tr>
<tr>
<td>
<input type="submit" name="save" value="Save" colspan=2>
</td>
</tr>
</form>
{% endblock content %}
Здесь вы найдете страницу index.html:
{% block content %}
<table>
<tr>
<td/>
<td/>
<td/>
</tr>
<tr>
</td>
<td>
<form method="POST">
{% csrf_token %}
<table>
<tr>
<td>
<lable>Username </lable>
</td>
<td>
<input type="text" name="username" placeholder="Username">
</td>
</tr>
<tr>
<td>
<lable>Password </lable>
</td>
<td>
<input type="password" name="password" placeholder="Password">
</td>
</tr>
<tr>
<td></td>
<td>
<input type="submit" value="Login" name="Login">
</td>
</tr>
<tr>
<td>
<a href="{% url 'newuser' %}" name="NewUser">Sign Up</a>
</td>
<td>
<a href="">Forget my password</a>
</td>
</tr>
</table>
</form>
</td>
</td>
</tr>
<tr>
<td/>
<td/>
<td/>
</tr>
</table>
{% endblock content %}
Вы должны проверить, является ли запрос постом. Поэтому вместо
if 'Login' in request.POST:
вы должны проверить его следующим образом:
if request.method == "POST":
После исправления с requset на request, как указал @gasman. Ваше views.py для newUser будет
def newUser(request):
if 'NewUser' in request.POST:
return render(request,'login/newuser.html')
После этого вы указали, что получили
The view login.views.newUser didn't return an HttpResponse object
Это потому, что в вашей функции else нет части code. Поэтому если ваше условие if не выполняется, то ваша функция view не вернула никакого ответа, поэтому она говорит didn't return an HttpResponse object. Поэтому верните HttpResponse, если ваше условие if не сработало, и все будет в порядке.
def newUser(request):
if 'NewUser' in request.POST:
return render(request,'login/newuser.html')
else:
return HttpResponse() #<-------- if else condition fails.
В вашем случае почему не получается
Потому что в вашем newuser.html ваша submit кнопка выглядит следующим образом.
<input type="submit" name="save" value="Save" colspan=2>
В вашем представлении вы сравниваете значение NewUser с request.POST. Поэтому ваше условие if не выполняется, и вы получаете эту ошибку.
Так что либо измените свое имя на if 'save' in request.POST в своем views.py. Или измените name="save" на name="NewUser" в вашем newuser.html ваша проблема будет решена.