django form插件简单使用,判断用户名是否存在、用户输入是否合法,HTML input自动生成
首先HTML效果图:
HTML代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册内容验证</title>
</head>
<body>
<form action="/register/" method="post" novalidate>
<p>username:{{ obj.username }}{{ obj.errors.username.0 }}</p>
<p>password:{{ obj.password }}{{ obj.errors.password.0 }}</p>
<p>age:{{ obj.age }}{{ obj.errors.age.0 }}</p>
<p>email:{{ obj.email }}{{ obj.errors.email.0 }}</p>
<p>address:{{ obj.address }}{{ obj.errors.address.0 }}</p>
<p>{{ obj.gender }}</p>
<p>{{ obj.users }}</p>
<p>{{ obj.myaddrs }}</p>
<p><input type="submit" value="提交"><input type="reset" value="重置"> </p>
</form>
</body>
</html>
后台Veiws代码:
from django.shortcuts import render,redirect
from django import forms
from django.forms import widgets
# Create your views here.
#创建Form验证类,继承forms.Form
class RegisterForm(forms.Form):
username = forms.CharField(max_length=32,min_length=12,required=True,error_messages={
"max_length":"长度必须为6~12",
"min_length":"长度必须为6~12",
"required":"用户名不能为空",
})
password = forms.CharField(required=True,error_messages={
"required":"密码不能为空!"
})
age = forms.IntegerField(required=True,error_messages={
"required": "密码不能为空!",
"invalid":"年龄必须为数字!"
})
email = forms.EmailField(required=True,error_messages={
"required": "邮箱不能为空!",
"invalid": "邮箱格式不正确!"
})
address = forms.CharField(
initial=2,
widget = widgets.Select(choices=((1,"北京"),(2,"上海"),(3,"深圳"),))
)
gender = forms.ChoiceField(
choices=((0,"男"),(1,"女")),
widget=widgets.RadioSelect,
initial=0
)
#多选select,值为列表
users = forms.MultipleChoiceField(
choices=((1,'上海'),(2,'北京'),(3,"深圳")),
initial=[2,],
#可以加属性
widget=widgets.SelectMultiple(attrs={"class":"ray"})
)
myaddrs = forms.MultipleChoiceField(
choices=((1, '上海'), (2, '北京'), (3, "深圳")),
initial=3,
widget=widgets.CheckboxSelectMultiple
)
def register(request):
if request.method=="GET":
obj = RegisterForm()
return render(request,"registervalid.html",{"obj":obj})
else:
#将表单值获取到 传入Form参数
obj = RegisterForm(request.POST)
if obj.is_valid():
print("验证成功!",obj.cleaned_data)
return redirect("Http://www.baidu.com")
else:
print("验证失败!",obj.errors)
return render(request,"registervalid.html",{"obj":obj})
如果要加一些额外功能,比如判断用户名是否存在,input为password格式等:
from django.shortcuts import render,redirect,HttpResponse
from django import forms
from django.forms import widgets
from app1 import models
import json
class AjaxForm(forms.Form):
username = forms.CharField(
#如果要设置密码字段
# widget=widgets.PasswordInput,
required=True,
min_length=3,
error_messages={
"min_length":"用户名输入不正确",
},
)
gender = forms.BooleanField(
widget=widgets.RadioSelect(choices=[(0,"男"),(1,"女"),]),
required=False
)
# birthday = forms.DateTimeField(
# widget=widgets.DateInput(attrs={"type":"date"})
# )
# Create your views here.
def ajaxForm(request):
if request.method=="GET":
user = AjaxForm()
print("heheh ")
return render(request,"AjaxForm.html",{"user":user})
else:
ret = {"status": "NG", "msg": None}
af = AjaxForm(request.POST)
#判断用户名是否已经存在
is_exist = False
print(af.data.get("username"),"asdfasd")
if models.User.objects.filter(username=af.data.get("username")).count():
is_exist = True
else:
is_exist = False
if af.is_valid() and not is_exist :
print(af.cleaned_data)
models.User.objects.create(**af.cleaned_data)
ret["status"]="OK"
return HttpResponse(json.dumps(ret))
else:
print("NG")
if is_exist:
af.errors["username"]="用户名已存在!"
ret["msg"] = af.errors
return HttpResponse(json.dumps(ret))