form 组件的使用
class Register(forms.Form):
user = forms.CharField(min_length=2, widget=widgets.TextInput(attrs={'class': 'form-control'}),
label='用户名',
error_messages={'required': "参数错误", 'invalid': '输入的用户名格式错误'})
pwd = forms.CharField(widget=widgets.PasswordInput(attrs={'class': 'form-control'}),
label='密码',
error_messages={'required': "参数错误", 'invalid': '输入的密码格式错误'})
email = forms.EmailField(widget=widgets.EmailInput(attrs={'class': 'form-control'}),
label='邮箱',
error_messages={'required': "参数错误", 'invalid': '输入的邮箱格式错误'})
#进行user对象校验
def clean_user(self):
user = self.cleaned_data.get('user')
ret = Users.objects.filter(user=user).first()
if not ret:
return user
else:
raise ValidationError('用户名存在')
逻辑代码
def regist(request):
form = Register()
if request.method == 'GET':
return render(request, 'reg.html', locals())
else:
form = Register(request.POST)
if form.is_valid():
print(form.cleaned_data)
Users.objects.create(**form.cleaned_data)
else:
print(form.cleaned_data)
errors = form.errors
return render(request, 'reg.html', locals())
return HttpResponse('ok')
模板渲染
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Title</title>
<style>
.demo {
color: red;
margin-left: 15px;
}
.error {
color: red;
margin-left: 12px;
}
</style>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>
{# 方式1 #}
{#<form action="" method="post">#}
{# {% csrf_token %}#}
{# <p>用户名:<input type="text" name="user"><span class="demo">{{ errors.user.0 }}</span></p>#}
{# <p>密码:<input type="password" name="pwd"><span class="demo">{{ errors.pwd.0 }}</span></p>#}
{# <p>邮箱:<input type="text" name="email"><span class="demo">{{ errors.email.0 }}</span></p>#}
{# <p><input type="submit" value="提交"></p>#}
{#</form>#}
<hr>
{# 方式2 #}
{#<form action="" method="post">#}
{# {% csrf_token %}#}
{# {{ form.as_p }}#}
{# <p><input type="submit" value="提交"></p>#}
{#</form>#}
{#方式3 #}
<hr>
{#<div class="container">#}
{# <div class="row">#}
{# <div class="col-md-8 col-md-offset-2">#}
{# <form action="" method="post" novalidate>#}
{# {% csrf_token %}#}
{# <p> 用户名 {{ form.user }}<span class="error">{{ errors.user.0 }}</span></p>#}
{# <p>密码 {{ form.pwd }}<span class="error">{{ errors.pwd.0 }}</span></p>#}
{# <p>邮箱 {{ form.email }}<span class="error">{{ errors.email.0 }}</span></p>#}
{##}
{# <input type="submit" class="btn btn-success pull-right">#}
{# </form>#}
{# </div>#}
{# </div>#}
{#</div>#}
<hr>
{# 方式4 #}
<div class="container">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<p> {{ field.label }} {{ field }}<span class="error">{{ field.errors.0 }}</span></p>
{% endfor %}
<input type="submit" class="btn btn-success pull-right">
</form>
</div>
</div>
</div>
</body>
</html>