1.form表单的作用?
首先我们知道form表单的功能:
- 获取用户提交的数据
- 对用户提交的数据进行校验
- 提示错误信息
但是form表单也有缺点:
- 无法保留上次提交的数据
- 只有特定的验证规则
那有没有一个东西,既能保留form的功能又可以弥补form表单的缺点呢,当然是有的,就是django为我们提供的form组件。
所以form表单的作用不言而喻:
- 获取用户输入数据并校验
- 保存上一次输入的数据
- 可以自定义校验规则
2.form组件的简单使用
在视图函数中:
from django.forms import Form,fields
class RegForm(Form):
name = fields.CharField(
label="用户名",
min_length=8,
initial="请输入用户名",
error_messages={
"required": "不能为空", #为空时的错误提示
"invalid": "格式错误", #不正确是的错误提示
"min_length": "用户名最短8位" #不符合最小长度时的错误提示
}
)
password = CharField(
label = "密码", #显示的值
min_length = 6, #最小长度
initial = "请输入密码" #初始时的值
)
def register(request):
# 使用组件使,先实例化一个form对象,并传给模板进行渲染
form_obj = RegForm()
if request.method == "POST": #如果是post请求,获取数据并校验
form_obj = RegForm(request.POST) # 将post请求拿到的数据封装到form对象中
if form_obj.is_valid(): # 调用is_valid()方法,检验post请求的数据
return HttpResponse("注册成功")
return render(request, "register.html", {"form_obj": form_obj})
在模板文件中:
<body>
<form action="" method="post" novalidate autocomplete="off">
{% csrf_token %}
<div>
<label for="{{ form_obj.name.id_for_label }}">{{ form_obj.name.label }}</label>
{{ form_obj.name }}{{ form_obj.name.errors.0 }}
</div>
<div>
<label for="{{ form_obj.password.id_for_label }}">{{ form_obj.password.label }}</label>
{{ form_obj.password }}{{ form_obj.password.errors.0 }}
</div>
<button>注册</button>
</form>
</body>