Возвращает None форму django

У меня есть форма для заполнения регистра, но когда я пытаюсь сохранить ее, она включает объект none.

enter image description here

проблема в том, что :

Представление 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 может оказаться полезной позже, когда вам понадобится изменить внешний вид вашего шаблона при его первой загрузке.

Я нашел решение, проблема заключается в пространстве возврата !

Вернуться на верх