姜戈错误。模块 'django.http.request' 没有属性 'POST'

Django error. module 'django.http.request' has no attribute 'POST'

我是 Django 的新手,我正在尝试创建一个简单的 Web 应用程序。我创建了一个登录表单并添加了一个用于注册新用户的超链接。不幸的是,我收到以下错误。 模块 '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 %}

您应该检查请求是否为 post。所以而不是

if 'Login' in request.POST:

您应该按照以下方式检查:

if request.method == "POST":

正如@gasman 指出的那样,从 requset 更正为 request 之后。 newUserviews.py 将是

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

因为你的code里面没有else部分。因此,如果您的 if 条件失败,那么您的 view 函数不会 return 任何响应,这就是它显示 didn't return an HttpResponse object 的原因。所以 return HttpResponse 如果你的 if 条件失败,那就没问题了。

def newUser(request):
    if 'NewUser' in request.POST:
        return render(request,'login/newuser.html')
    else:
        return HttpResponse() #<-------- if else condition fails.

In your case why it fail's

因为在你的newuser.html你的submit按钮如下。

<input type="submit" name="save" value="Save" colspan=2>

在您看来,您是在比较值 NewUserrequest.POST。所以你的 if 条件失败了,你得到了这个错误。

所以要么在 views.py 中将您的名字更改为 if 'save' in request.POST。或者在你的 newuser.html 中将 name="save" 更改为 name="NewUser" 你的问题将得到解决。