文章目录
一、 forms组件之校验字段
# 第一步:定义一个类,继承forms.Form
# 第二步:在类中写字段,要校验的字段,字段属性就是校验规则
# 第三步:实例化得到一个Form对象,把要校验的数据传入
# 第四步:调用register_form.is_valid()校验,校验通过就是True
# 第五步:校验通过有register_form.cleaned_data
# 第六步:校验不通过 register_form.errors
校验手动渲染示例html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册用户</title>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/css/bootstrap.min.css" rel="stylesheet">
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.1/js/bootstrap.min.js"></script>
</head>
<body>
<div class="col-md-6 col-md-offset-3">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">注册功能</h3>
</div>
<div class="panel-body">
<h1 class="text-center">注册</h1>
<form action="" method="post">
<p>用户名:<input type="text" name="name" class="form-control"></p>
<p>密码:<input type="password" name="password" class="form-control"></p>
<p>确认密码:<input type="password" name="re_password" class="form-control"></p>
<p>邮箱:<input type="text" name="email" class="form-control"></p>
<input id="id_btn" type="submit" class="btn btn-primary btn-block">
</div>
</div>
</div>
</body>
</html>
创建用户表models.py
class User(models.Model):
name = models.CharField(max_length=32,verbose_name='用户名')
password = models.CharField(max_length=32,verbose_name='密码')
email = models.EmailField(verbose_name='邮箱')
views.py
from django.shortcuts import render
from django import forms
#定义类
class RegisterForm(forms.Form):
# name字符串类型最大8位,最小3位
name = forms.CharField(max_length=8, min_length=3, label='用户名')
# password字符串类型最大8位,最小3位
password = forms.CharField(max_length=8, min_length=3, label='密码')
# re_password字符串类型最大8位,最小3位
re_password = forms.CharField(max_length=8, min_length=3, label='确认密码')
# email必须符合邮箱格式,xxx@xx.com
email = forms.EmailField(label='邮箱')
#在视图中使用
register_form = RegisterForm(request.POST)
if register_form.is_valid():
# 校验通过,存
# 取出校验通过的数据
print('校验通过')
print(register_form.cleaned_data)
# 存储前先删除多余的字段
register_form.cleaned_data.pop('re_password')
# 将数据存入数据库的user表中
models.User.objects.create(**register_form.cleaned_data)
else:
# 校验不通过
print('校验不通过')
print(register_form.errors)
二、 forms组件之渲染标签
视图层:views.py
def login(request):
# 1.先生成一个对象
form_obj = MyForm()
# 2.将该对象传递给html页面
return render(request,'login.html',locals())
渲染方式一
简单粗暴 一次性渲染label文本和input框
<h2>form渲染</h2>
<form action="" method="post">
{
{
form.as_p }}
{
# {
{ form.as_table }}#}
{
# {
{ form.as_ul }}#}
</form>
"""
优点:速度快 代码书写极少
缺点:封装程度高 不便于扩展 一般情况下只在本地测试使用
"""
渲染方式二
一步步需要自己书写字段对象
<h2>form渲染</h2>
<form action="" method="post">
{
{
form_obj.username.label }}
{
{
form_obj.username }}
<input type="submit" value="提交"></form>
"""
优点:字段之间相互解耦
缺点:字段多的时候书写麻烦
"""
渲染方式三
推荐使用,代码书写简单,并且可扩展性强
<h2>form渲染(基本用这种)</h2>
<form action="" method="post">
{
% for form in form_obj %}
<p>{
{
form.label }}:{
{
form }}</p>
{
% endfor %}
<input type="submit" value="提交"><span style="color: red">{
{
error }}</span>
# forms组件无法渲染提交按钮和form标签都需要你自己编写
</form>
三、 forms组件之展示提示信息
from django import forms
from django.forms import widgets
class RegisterForm(forms.Form):
name = forms.CharField(max_length=8, min_length=3, label='用户名',
error_messages