尝试将我的 HTML 表单链接到 Django 中的视图函数

问题描述 投票:0回答:3

我一直在尝试创建一个用户注册页面,并已获取表单本身和设置的表单渲染。我还获得了将用户输入保存为 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 的用户数据库表中。

我该如何将表单链接到我设置的视图?

django django-views django-templates django-urls
3个回答
2
投票

假设你的寄存器视图的名称也是register,即

# 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
输入名称的更改,以便与您的 request.POST['first_name'] 和 request.POST['last_name'] 匹配

{% url 'register' %}
告诉 Django 寻找具有名称为 register 的视图的 url 路径。


0
投票

请注意,来自

firstname
form
与您在
first_name
中寻找的
views
不同。您必须获取与放入
html
中完全相同的数据。你永远可以

print(request.POST)

看看

POST
字典有什么:)

修复后,现在应该可以工作了。


0
投票

我找到答案了 使用(请求.POST.get)

© www.soinside.com 2019 - 2024. All rights reserved.