Попытка связать мою HTML-форму с функцией представления в Django

Я пытался создать страницу регистрации пользователя и получил саму форму и рендер для формы. Я также добился того, что форма сохраняет вводимые пользователем данные как POST, но не смог отправить эту информацию в функцию представления, которую я создал для сохранения этой информации в базе данных.

Вот мой html/css шаблон формы: (userinfo.html)

    <div>
  {% block content %}
  <form action="register" method="post" name="Userinfo" id="Userinfo">
    <label for="fname">First Name</label>
    {% csrf_token %}
    <input type="text" id="fname" name="firstname" placeholder="Your first name..">
    <label for="lname">Last Name</label>
    <input type="text" id="lname" name="lastname" placeholder="Your last name..">

    <label for="DOB">Date Of Birth</label>
    <input type="text" id="DOB" name="DOB" placeholder="The Date you were born">

    <label for="Email">Email Address</label>
    <input type="text" id="Email" name="Email" placeholder="Your email address">


  
    <input type="submit" value="Submit">
  </form>
  {% endblock %}
    </div> 

Имя моей функции представления - register, и вот она:(views.py)

def register(request):
    if request.method == 'POST':
        first_name = request.POST['first_name'],
        last_name = request.POST['last_name'],
        date_of_birth = request.POST['DOB'],
        email = request.POST['email']
        newuser= User.objects.create_user(first_name=first_name,last_name=last_name, email=email)
        newuser.save()
        print('user created')
        return redirect('/home')
    else:
        return render(request,'register.html')

Это должно сохранить введенные пользователем данные в таблице базы данных пользователей django.

Как мне связать форму с установленным представлением?

Предполагая, что имя вашего представления register также является register, т.е.

# urls.py

urlpatterns = [
    ...
    path('register', views.register, name='register'),
    ...
]

тогда вы можете просто изменить тег формы следующим образом:

<form action="{% url 'register' %}" method="post" name="Userinfo" id="Userinfo">

<1>> указывает Django искать путь url, который содержит представление с именем register.{% url 'register' %}

Обратите внимание, что firstname из form не то же самое, что first_name, которое вы ищете в views. Вы должны получить точно такие же данные, какие вы поместили в html. Вы всегда можете

print(request.POST)

посмотреть, что есть в словаре POST :)

После этого все должно работать.

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