【问题标题】:Django error. module 'django.http.request' has no attribute 'POST'Django 错误。模块“django.http.request”没有属性“POST”
【发布时间】:2022-01-22 13:27:32
【问题描述】:

我是 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 %}

【问题讨论】:

  • 您在def newUser(requset): 中有错字 - 'requset' 应该是 'request'。
  • 我更正了它,但我收到了这个错误:视图 login.views.newUser 没有返回 HttpResponse 对象。它返回 None 。

标签: django django-views django-forms django-templates


【解决方案1】:

在@gasman 指出的从requset 更正为request 之后。你的views.pynewUser 将是

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 函数没有返回任何响应,这就是它显示didn't return an HttpResponse object 的原因。因此,如果您的 if 条件失败,请返回 HttpResponse,这样就可以了。

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>

在您看来,您将NewUserrequest.POST 的值进行比较。因此,您的 if 条件失败并且您收到此错误。

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

【讨论】:

    【解决方案2】:

    您应该检查请求是否为帖子。所以不是

    if 'Login' in request.POST:
    

    您应该通过以下方式检查它:

    if request.method == "POST":
    

    【讨论】:

    • 问题不在于登录,而在于注册。登录工作正常,但 Sing up 不行。
    • 当ypu通过GET请求newuser/时,明显没有POST数据。
    猜你喜欢
    • 2017-01-20
    • 1970-01-01
    • 2021-09-13
    • 2021-11-27
    • 2011-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多