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

4ioopgfo  于 2023-08-08  发布在  Go
关注(0)|答案(3)|浏览(121)

我一直在尝试创建一个用户注册页面,并已经得到了表单本身和表单的呈现设置。我还得到了将用户输入保存为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的用户数据库表中。
如何将表单链接到已设置的视图?

bakd9h0s

bakd9h0s1#

假设注册视图的名称也是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_namelast_name的输入名称的变化,以便匹配您的请求。POST['first_name']和request.POST['last_name']
{% url 'register' %}告诉Django查找一个包含名称为register的视图的url路径。

6ljaweal

6ljaweal2#

注意,从form得到的firstname与在views中查找的first_name不同。您必须获取与放入html中完全相同的数据。你总是可以

print(request.POST)

字符串
看看POST字典有什么:)
有了这个固定它应该工作了。

qcbq4gxm

qcbq4gxm3#

我找到答案使用**(request.POST.get)**或(request.POST.items()}
如果打印它,它将返回一个包含表单中所有输入qureydict,因此应该将其转换为常规dic:

data = {key: value for key, value in request.POST.items()}

字符串
在此之前,您还应该在模板中命名所有输入:

<input type="text" name="firstname">
<input type="text" name="lastname">
<input type="text" name="age">


因此“firsname”将是您字典中的关键字,您的DIC结果将是:{“firstname”:“input-name”,“lastname”:“input-lname”,“age”:“20”}
你也可以使用

(request.POST.get("firstname"))


要以这种方式从str类型的表单中获取单个输入,您应该命名您的in input:

<input type="text" name="firstname">


抱歉英语不好

相关问题