在Django中提供了了form表单,可以更为简单的创建表单模板信息,简化html的表单。
一、网页应用程序中表单的应用
表单通常用来作为提交数据时候使用。
1.1 创建表单模板文件夹
在项目文件夹下创建一个template文件夹,用于存储所有的html模板文件。
1.2 在文件夹下创建对应的html模板文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>User Name</title>
</head>
<body><form><label for="name">名字</label><input type="text" id="name" name = "name" maxlength="10" required/><label for="phone">电话</label><input id="phone" type="text" name="phone" maxlength="11" required/></form>
</body>
</html>
1.3 添加模板文件路径到settings.py文件中
填写项目的相对路径即可。
1.4 路由设置
在app中views.py文件中添加响应函数:
def get_person(request):"""method of re match"""return render(request,"person.html")
在urls.py添加路由设置
urlpatterns = [path('test/2023', serverapp_views.test), # 精确匹配path('converter/<int:num>', serverapp_views.converter), # 格式转换re_path(r'^re/(?P<num>[0-9]{1,4})/$', serverapp_views.rematch), # 正则表达式,通过添加起止符限制匹配,避免中间多级路径后匹配到,造成错误匹配。path('person', serverapp_views.get_person), # 获取人员信息
]
1.5 访问表单
直接浏览器通过“http://127.0.0.1:8000/serverapp/person” 访问:
二、使用Django的forms表单替换html的表单
2.1 在App中创建一个forms.py文件统一管理表单
2.2 创建表单类PersonForm
定义的属性就对应表单中的每一项。
# _*_ coding:utf-8 _*_from django import formsclass PersonForm(forms.Form):"""人员表单类"""name = forms.CharField(label="name", max_length=10)phone = forms.CharField(label="phone", max_length=11)
2.3 修改html模块,用form替代HTML字待的表单
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>User Name</title>
</head>
<body><!--action 是访问的url--><form action="/serverapp/views/get_personform" method="post">{% csrf_token %} <!--防止跨域攻击-->{{ personform }} <!--引用表单,views函数中定义的名称一致--><button type="submit">提交</button></form>
</body>
</html>
2.4 views.py中定义函数引用表单
通过路由处理函数可以对访问信息进行识别,获取表单的基本信并进行处理。
def get_personform(request):"""method of re match"""if request.method == "POST":# 获取表单form = PersonForm(request.POST)# 判断是否为有效表单if form.is_valid():# 使用cleaned_data获取请求数据name = form.cleaned_data["name"]phone = form.cleaned_data["phone"]# 返回数据return HttpResponse(f"Data is :\r\n name:{name}\r\nphone:{phone}")else:return HttpResponseRedirect("/error/")# Get方法访问else:# 重定向到登录表单页面return render(request, "personform.html", {'personform':PersonForm()})
2.5 添加路径到urls.py中
from django.urls import path,re_path
from serverapp import views as serverapp_viewsurlpatterns = [path('test/2023', serverapp_views.test), # 精确匹配path('converter/<int:num>', serverapp_views.converter), # 格式转换re_path(r'^re/(?P<num>[0-9]{1,4})/$', serverapp_views.rematch), # 正则表达式,通过添加起止符限制匹配,避免中间多级路径后匹配到,造成错误匹配。path('person', serverapp_views.get_person), # 获取人员信息path('personform', serverapp_views.get_personform), # 使用表单获取人员信息
]
2.6 访问表单
放到后直接获取到表单模板。
输入后提交数据: