return None 形成 django

return None form django

我有一个用于注册的表格填写但是当我尝试保存它时它涉及一个 none 对象。

问题是:

视图 pages.views.essai 没有 return HttpResponse 对象。它 return 改为 None。

这是我的代码:

views.py

  from django.shortcuts import redirect, render
  from django.template   import RequestContext
  from .models import Login

def essai(request):

if not request.method == 'POST':

 username = request.POST.get('username')
 password = request.POST.get('password')

 data = Login(username,password)
 print(data)

 return render(request,'pages/essai.html')

urls.py

from django.urls import URLPattern, path
from . import views

urlpatterns = [
 path('essai', views.essai, name = 'essai'),  

]

essai.html

<form   action=""  method ="POST" >
{% csrf_token %}                    
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value ="Save">
</form>

admin.py

from django.contrib import admin
from .models import Login

admin.site.register(Login)

model.py

from django.db import models

    class Login(models.Model):
    
        username = models.CharField(max_length=100)
        password = models.CharField(max_length=100)

PS : 我试过表格,但还是一样的问题。

我不明白问题出在哪里,是视图还是模型

编辑: 我找到了解决方案,问题在于 return 的 space !

我认为if条件正好相反。 你写了 if not 但我觉得应该是 if.

from django.shortcuts import redirect, render
from django.template   import RequestContext
from .models import Login

def essai(request):

    if request.method == 'POST':  // here

        username = request.POST.get('username')
        password = request.POST.get('password')

        data = Login(username,password)
        print(data)

        return render(request,'pages/essai.html')

您的模型似乎是正确的。与您收到的错误消息相关的问题是您的视图方法正在检查 request 是否不是 POST。当从浏览器向服务器发送数据时,您正在“posting”,因此当您从 HTML 表单访问数据并将它们分配给 [=34] 时,您的视图应该监听 POSTs =] 变量。您实际上也没有保存登录对象,而只是在内存中创建它。如果您调用 data.save() 它将触发数据库事务并尝试将其添加到您的登录 table.

当您最初导航到页面时,您会触发一个 GET 方法,如您的控制台输出所示,因此您还需要在您的视图方法中检查 request.GET。在您的情况下,这应该只是 return 通过 render() 的空白 HttpResponse,就像您在 post 检查中所做的那样。更完整的视图函数可能是:

from django.shortcuts import redirect, render
 from django.template import RequestContext
 from .models import Login

def essai(request):

  if request.method == 'POST':
    username = request.POST.get('username')
    password = request.POST.get('password')

    data = Login(username,password)
    print(data)
    data.save() # to save the object to the database if needed.

    return render(request,'pages/essai.html')

  elif request.method == 'GET':
    return render(request,'pages/essai.html')

当您开始需要修改模板首次加载时的外观时,request.GET 的检查稍后可能会有用。

要以更易读的方式显示您的模型对象,您可以按如下方式编辑您的登录模型:

从django.db导入模型

class Login(models.Model):
  
    username = models.CharField(max_length=100)
    password = models.CharField(max_length=100)
  
    def __str__(self):
        return f"Username: {username} | Password: {password}"
        

然后当您打印数据时,它应该打印您输入的数据的格式良好的字符串表示形式。