Я пытался создать страницу регистрации пользователя и получил саму форму и рендер для формы. Я также получил форму для сохранения пользовательского ввода как 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.

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

1
David_Codes 3 Фев 2022 в 23:33

2 ответа

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

print(request.POST)

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

С этим исправлением это должно работать на данный момент.

1
NixonSparrow 4 Фев 2022 в 00:31
Просто исправил и перезапустил сервер. Все еще то же самое, он просто показывает мне, что был сделан почтовый запрос, но не видит, что и где эти данные или куда они идут. Я также добавил print(request.POST) в свой файл просмотра, и кажется, что они не связаны друг с другом. Я получаю это сообщение, когда что-то отправляю: [03/февраль/2022 16:01:23] "POST /register/HTTP/1.1" 200 1399
 – 
David_Codes
4 Фев 2022 в 02:03
Вы используете 'register.html' в поле зрения, но ваша форма находится в userinfo.html? Вы включаете эту форму в register.html? Вы должны визуализировать эту форму, только тогда view сможет получить из нее POST.
 – 
NixonSparrow
4 Фев 2022 в 02:09
Ранее я обдумывал идею использования формы модели, но вместо этого решил использовать пользовательскую форму html/css. Также я установил в представлениях возврат на мою домашнюю страницу после отправки формы, но когда я отправляю форму, ничего не происходит. Также разве я не смогу увидеть форму, если она не отображается?
 – 
David_Codes
4 Фев 2022 в 02:18
Это нормально для создания пользовательских html form, но если form не находится в шаблоне, используемом в этом представлении, то невозможно получить данные из этого form. Нужно как-то включить. Поделитесь обоими html в основном посте, чтобы я мог вам помочь. Особенно register.html.
 – 
NixonSparrow
4 Фев 2022 в 02:22
Вот register.html в нем ничего нет: {%block title %} Создать учетную запись {% endblock %} {% load crispy_forms_tags %} {% block content %}
{% csrf_token %} {{form|crispy}}
{% endblock %}
 – 
David_Codes
4 Фев 2022 в 02:27

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

# urls.py

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

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

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

    <label for="fname">First Name</label>
    {% csrf_token %}
    <input type="text" id="fname" name="first_name" placeholder="Your first name..">
    <label for="lname">Last Name</label>
    <input type="text" id="lname" name="last_name" placeholder="Your last name..">

    ...

  </form>

Обратите внимание на изменение имени входных данных на first_name и last_name, чтобы они соответствовали вашему запросу.POST['first_name'] и request.POST['last_name']

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

0
raphael 4 Фев 2022 в 02:15
Это не тот ответ, который ищет Дэвид.
 – 
NixonSparrow
4 Фев 2022 в 00:32
Будет ли это просто связывать URL-адреса вместе или также будет ссылаться на файл views.py?
 – 
David_Codes
4 Фев 2022 в 01:58
Да, @David_Codes, он также будет ссылаться на views.py.
 – 
raphael
4 Фев 2022 в 02:01
@David_Codes, ` [03/фев/2022 16:01:23] "POST /register/HTTP/1.1" 200 1399` означает, что страница действительно найдена. Я обновил ответ с исправленным html.
 – 
raphael
4 Фев 2022 в 02:22
Надеялся, что страница отправит пользовательский ввод в мой файл views.py
 – 
David_Codes
4 Фев 2022 в 02:32