Я пытался создать страницу регистрации пользователя и получил саму форму и рендер для формы. Я также получил форму для сохранения пользовательского ввода как 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.
Как мне связать форму с настроенным представлением?
2 ответа
Обратите внимание, что firstname
из form
не совпадает с first_name
, который вы ищете в views
. Вы должны получить точно такие же данные, как и в html
. Вы всегда можете
print(request.POST)
Чтобы посмотреть, что есть в словаре POST
:)
С этим исправлением это должно работать на данный момент.
Предполагая, что имя вашего представления регистра также является регистром, т. Е.
# 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-адрес, который имеет представление с регистром имени.
Новые вопросы
django
Django - это серверная платформа веб-приложений с открытым исходным кодом, написанная на Python. Он разработан для сокращения усилий, необходимых для создания сложных веб-сайтов и веб-приложений, управляемых данными, с особым упором на меньшее количество кода, отсутствие избыточности и более явное, чем неявное.
userinfo.html
? Вы включаете эту форму вregister.html
? Вы должны визуализировать эту форму, только тогдаview
сможет получить из нееPOST
.html form
, но еслиform
не находится в шаблоне, используемом в этом представлении, то невозможно получить данные из этогоform
. Нужно как-то включить. Поделитесь обоимиhtml
в основном посте, чтобы я мог вам помочь. Особенноregister.html
.