Возвращает None форму django
У меня есть форма для заполнения регистра, но когда я пытаюсь сохранить ее, она включает объект none.
проблема в том, что :
Представление pages.views.essai не вернуло объект HttpResponse. Вместо этого оно вернуло 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 : Я пробовал с формами, но это та же проблема.
Я не понимаю, где проблема - в представлениях или в модели
Я думаю, что условие 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. При отправке данных из браузера на сервер вы "посылаете", поэтому ваше представление должно прослушивать POST при доступе к данным из HTML-формы и присваивать их переменным python. Вы также фактически не сохраняете объект Login, а только создаете его в памяти. Если вы вызовете data.save(), это вызовет транзакцию базы данных и попытается добавить его в таблицу Login.
При первоначальном переходе на страницу вы запускаете метод GET, как показывает вывод консоли, поэтому вам также необходимо проверить наличие request.GET в методе представления. В вашем случае он должен просто возвращать пустой HttpResponse через render(), как вы делаете в вашей проверке сообщения. Более полная функция представления может быть такой:
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 может оказаться полезной позже, когда вам понадобится изменить внешний вид вашего шаблона при его первой загрузке.
Я нашел решение, проблема заключается в пространстве возврата !
