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] 时,您的视图应该监听 POST
s =] 变量。您实际上也没有保存登录对象,而只是在内存中创建它。如果您调用 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}"
然后当您打印数据时,它应该打印您输入的数据的格式良好的字符串表示形式。
我有一个用于注册的表格填写但是当我尝试保存它时它涉及一个 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] 时,您的视图应该监听 POST
s =] 变量。您实际上也没有保存登录对象,而只是在内存中创建它。如果您调用 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}"
然后当您打印数据时,它应该打印您输入的数据的格式良好的字符串表示形式。