Form 示例

######################## Form #####################
from django import forms
from django.forms import widgets
from django.forms import fields
class FM(forms.Form):

    # 字段本身只做验证,
    #is_valid它会循环每一个字段进行验证, 
    #clean_data是一个字典
    #widget这是一个插件,用于定制你的html.下面中{'class': 'c1'}  就是会加个class=c1 的样式  定制页面的时候,想写什么就写什么。可以 {'class': 'c1','root'} 也是可以
    #在django forms中 有个fileds, fileds就是代指的字段
    #widgets 是插件的意思,所以只要加上这个,就是变成插件了 例如:widget=widgets.PasswordInput
    
    #设置字段的时候。可以设置错误信息error_messages  更具你的 值来配置

    
    #混合验证(可以用于多个条件验证):  ComboField(Field)  
                    #fields.ComboField(fields=[fields.CharField(max_length=20), fields.EmailField(),])
    
    user = fields.CharField(
        error_messages={'required': '用户名不能为空.'},
        widget=widgets.Textarea(attrs={'class': 'c1'}),
        label="用户名",
        )
        
        
    pwd = fields.CharField(
        max_length=12,
        min_length=6,
        ##如果设置了error_messages 那么这个数据类型就是dict_error。那么在前端获取的时,就是去获取这个字典
        error_messages={'required': '密码不能为空.', 'min_length': '密码长度不能小于6', "max_length": '密码长度不能大于12'},
        widget=widgets.PasswordInput(attrs={'class': 'c2'})
    )
    
    
    
    email = fields.EmailField(error_messages={'required': '邮箱不能为空.','invalid':"邮箱格式错误"})

    f = fields.FileField()

    # p = fields.FilePathField(path='app01')
    
    
    #ChoiceField 帮你在前端页面显示单选下拉框
    city1 = fields.ChoiceField(
        choices=[(0,'上海'),(1,'广州'),(2,'东莞')]
    )
    
    #MultipleChoiceField 前端页面显示多选下拉框
    city2 = fields.MultipleChoiceField(
        choices=[(0,'上海'),(1,'广州'),(2,'东莞')]
    )

from app01 import models
def fm(request):
    if request.method == "GET":
        # 从数据库中吧数据获取到
        dic = {
            "user": 'r1',
            'pwd': '123123',
            'email': 'sdfsd',
            'city1': 1,
            'city2': [1,2]
        }
        
        #obj=FM()   这样的方式也可以使用:这样的用法用途是,对于认证通过的字段前端会保留客户填写的内容,只会打印认证出错的字段
        #obj = FM(initial=dic)  按照字典的方式传输默认值
        obj = FM(initial=dic)
        return render(request,'fm.html',{'obj': obj})
    elif request.method == "POST":
        # 获取用户所有数据
        # 每条数据请求的验证
        # 成功:获取所有的正确的信息
        # 失败:显示错误信息
        obj = FM(request.POST)
        r1 = obj.is_valid()
        if r1:
            # obj.cleaned_data
            models.UserInf.objects.create(**obj.cleaned_data)
        else:
            # ErrorDict
            # print(obj.errors.as_json())
            # print(obj.errors['user'][0])
            return render(request,'fm.html', {'obj': obj})
        return render(request,'fm.html')

#如果程序设计过大!,介意把mode和form分割开来

 

posted @ 2017-05-11 23:31  所有的梦想都画在墙上  阅读(121)  评论(0)    收藏  举报