1、概述:
django表单系统中,自定义表单类都是以django.forms.Form为父类进行创建;
django中的Form一般有两种功能:
- 生成特定的HTML标签
- 后台验证用户提交的数据
2、在views文件中自定义form表单类:
# 自定义form表单类 class Userinfo(forms.Form): name = forms.CharField() password = forms.CharField() email = forms.EmailField() message = forms.CharField()
3、views中的方法:
def login(request): # 创建自定义表单的实例 form_obj = Userinfo() # 将前端表单post的数据,封装到自定义表单类中 user_info = Userinfo(request.POST) # 验证前端数据是否合法 if user_info.is_valid(): print True else: print False # 将自定义表单的实例传到html文件中 return render(request, 'login.html', {'form_obj': form_obj})
4、前端代码:
<form method="post" action="{% url 'login' %}"> <p>用户名:{{ form_obj.name }}</p> <p>密码:{{ form_obj.password }}</p> <p>邮箱:{{ form_obj.email }}</p> <p>备注:{{ form_obj.message }}</p> <input type="submit" value="提交" name="submit"> </form>
5、提取前端提交的数据和捕获错误信息:
def login(request): # 创建自定义表单的实例 form_obj = Userinfo() # 将前端表单post的数据,封装到自定义表单类中 user_info = Userinfo(request.POST) # 验证前端数据是否合法 if user_info.is_valid(): # 验证通过,提取用户提交的数据 print user_info.clean() else: # 验证未通过捕获错误提示 print user_info.errors # 将自定义表单的实例传到html文件中 return render(request, 'login.html', {'form_obj': form_obj})
6、将错误提示返回到前端展示:
def login(request): # 创建自定义表单的实例 form_obj = Userinfo() # 将前端表单post的数据,封装到自定义表单类中 user_info = Userinfo(request.POST) # 验证前端数据是否合法 if user_info.is_valid(): # 验证通过,提取用户提交的数据 print user_info.clean() else: # 验证未通过捕获错误提示 erro_info = user_info.errors # 用户提交了数据,返回错误信息的同时,也需要把用户填写的数据一起返回 return render(request, 'login.html', {'form_obj': user_info, 'erro_info': erro_info}) # 将自定义表单的实例传到html文件中 return render(request, 'login.html', {'form_obj': form_obj})
7、form表单中的字段自定义:
①、自定义错误提示的显示内容:
# 自定义form表单类 class Userinfo(forms.Form): # 自定义表单字段的错误提示信息,error_messages={'required': 'xxxxxx'} name = forms.CharField(error_messages={'required': '用户名不能为空'}) password = forms.CharField(error_messages={'required': '密码不能为空'}) email = forms.EmailField(error_messages={'required': '邮箱不能为空'}) message = forms.CharField(error_messages={'required': '备注不能为空'})
②、自定义字段对应前端标签的类型和属性:
email = forms.EmailField(error_messages={'required': u'邮箱不能为空'}) # widget属性用来修改标签的属性和类型 message = forms.CharField(error_messages={'required': u'备注不能为空'}, widget=forms.Textarea(attrs={'class': 'mess_info', 'placeholder': u'在这里写你的备注信息'}))
③、生成下拉框:
# 自定义form表单类 class Userinfo(forms.Form): # 创建一个用户类型的元组 user_type = ( (1, '普通用户'), (2, '会员用户'), ) # 创建一个下拉框,标签类型设置:widget=forms.widgets.Select usertype = forms.IntegerField( required=False, widget=forms.widgets.Select( choices=user_type, attrs={'class': 'user_type'}) )
④、自定义验证方法:
# coding:utf-8 from django.shortcuts import render from django import forms from django.core.exceptions import ValidationError def name_vaild(value): name_lenght = len(str(value)) if name_lenght < 5 or name_lenght > 10: raise ValidationError('用户名的长度必须在5到10之间') # 自定义form表单类 class Userinfo(forms.Form): name = forms.CharField(validators=[name_vaild, ], error_messages={'required': u'用户名不能为空'}) password = forms.CharField(error_messages={'required': u'密码不能为空'}) email = forms.EmailField(error_messages={'required': u'邮箱不能为空'}) # widget属性用来修改标签的属性和类型 message = forms.CharField(error_messages={'required': u'备注不能为空'}, widget=forms.Textarea(attrs={'class': 'mess_info', 'placeholder': u'在这里写你的备注信息'}))