django的表单系统

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'在这里写你的备注信息'}))

 

posted @ 2017-07-06 22:07  还是原来那个我  阅读(195)  评论(0编辑  收藏  举报