django表单

表单<form>...</form>可以收集其内部标签中的用户输入,然后将数据发送到服务端。

一个HTML表单必须指定两样东西:

目的地:用户数据发送的目的URL
方式:发送数据所使用的HTTP方法

form元素内部还定义了一个说明标签<label>和一个发送按钮‘submit’,以及最关键的接收用户输入的<input>元素。
例如,Django Admin站点的登录表单包含几个<input>元素:type="text"用于用户名,type="password"用于密码,type="submit"用于“登录"按钮。它还包含一些用户看不到的隐藏的文本字段,Django 使用它们来提高安全性和决定下一步的行为。
它还告诉浏览器表单数据应该发往<form>的action属性指定的URL:/admin/,而且应该使用method属性指定的HTTP post方法发送数据。
当点击<input type="submit" value="Log in">元素时,数据将发送给/admin/

处理表单时候只会用到POST和GET方法。
GET方法将用户数据以键=值的形式,以‘&’符号组合在一起成为一个整体字符串,最后添加前缀“?”,将字符串拼接到url内,生成一个类似https://docs.djangoproject.com/search/?q=forms&release=1的URL

以最简单的GET-POST请求为例:
views.py

from django.http import HttpResponse
from django.shortcuts import render


# 表单
def search_form(request):
    return render(request, 'search_form.html')


# 接收POST请求数据
def search_post(request):
    ctx = {}
    print(request, request.POST['q'])
    if request.POST:
        ctx['rlt'] = request.POST['q']
    return render(request, "search_post.html", ctx)


# 接收GET请求数据
def search(request):
    request.encoding = 'utf-8'
    print(request)
    if 'q' in request.GET and request.GET['q']:
        message = '你搜索的内容为: ' + request.GET['q']
    else:
        message = '你提交了空表单'
    return HttpResponse(message)

search_from.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>search_form</title>
</head>
<body>
    <form action="/search/" method="get">
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
</body>
</html>

search_post.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>search_post</title>
</head>
<body>
    <form action="/search-post/" method="post">
        {% csrf_token %}
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>

    <p>{{ rlt }}</p>
</body>
</html>

urls.py

from django.urls import path
from . import views
urlpatterns = [
    path('search-form/', views.search_form),
    path('search/', views.search),
    path('search-post/', views.search_post),
]

在search_form.html 中action=“/search/” method=“get”,指定用GET方法将数据发送到/search
因此在http://127.0.0.1:8000/search-form/输入abc回车,则会跳转到http://127.0.0.1:8000/search/?q=abc并回显

你搜索的内容为:abc

在search_post.html 中action=“/search-post/” method=“post”,指定用POST方法将数据发送到/search-post
因此在http://127.0.0.1:8000/search-post/输入abc回车,则会在本页面回显信息

Django的表单中的HTML字段有以下几种:

<form action="/your-name/" method="post"> 这一行定义了我们的发送目的地/your-name/和HTTP方法POST
<input type="submit" value="搜索">
<input type="text">: 这个字段用于输入单行文本信息,例如用户名、密码等。
<input type="password">: 这个字段用于输入密码信息,会隐藏所输入的文本。
<input type="email">: 这个字段用于输入电子邮件地址。
<input type="url">: 这个字段用于输入网址。
<input type="checkbox">: 这个字段用于选择一个或多个选项,例如勾选协议同意框等。
<input type="radio">: 这个字段用于从多个选项中选择一个选项。
<input type="file">: 这个字段用于上传文件。
<input type="hidden">: 这个字段用于隐藏数据,例如存储一些需要在表单提交时携带的数据,但用户不需要看到这些数据。

此外,还有一些HTML字段是Django自定义的,例如:

CharField: 这个字段用于输入单行文本信息。
EmailField: 这个字段用于输入电子邮件地址。
IntegerField: 这个字段用于输入整数。
FloatField: 这个字段用于输入浮点数。
BooleanField: 这个字段用于选择是或否。
DateField: 这个字段用于输入日期。
DateTimeField: 这个字段用于输入日期和时间。
这些Django自定义的HTML字段可以在Django表单中使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值