django入门笔记6- form

本文介绍 Django 中 Form 的定义与使用方法,包括初始化、验证及数据提取等关键步骤,并提供了多种字段类型的对应形式。

参考链接:https://docs.djangoproject.com/en/1.4/topics/forms/

Form的用法

       1.定义

              方法一:入门定义

              fromdjango import forms

              classContactForm(forms.Form):

                     subject= forms.CharField(max_length=100)

                     message= forms.CharField()

                     sender= forms.EmailField()

                     cc_myself= forms.BooleanField(required=False)

                     manager= forms.RegexField(regex=r'(\s*[a-zA-Z0-9_-]+\s*;)*')

              1.form一般存放在二级app目录中

              2.比较通用的属性是required=False,blank=True,null=True,

             

              方法二:和class绑定的form格式

                     classItemSimple(forms.ModelForm):

                            classMeta:

                                   model= Item

                                   fields= ('name','conten', 'start_time', 'end_time',"status")

      

       2.form常用方法

              f= XXXFrom()     #初始化一个空form

              f= ContactForm({'subject': 'Hello', 'message': ''}) #初始化一个有值form

              实例化一个与对象绑定的form

              a= Article.objects.get(pk=1)

              f= ArticleForm(instance=a)

 

 

              f#输出整个form

              f['subject']#输出单个input元素

              f.is_bound             #是否有值,对任意一个字段赋值,这个判断就为true

              f.is_valid()      #是否是验证表单

             

              f['message'].errors #查看单个input的错误

              f.errors#查看整个form的错误

             

              如果表单验证通过,则有clean_data属性

              f.cleaned_data   #得到的结果是:{message': uNice site!, email: uadrian@example.com, subject:uHello}

              self.cleaned_data['message']#得到单个字段的值

             

       3.通常form在view中的处理

              defcontact(request):

                     ifrequest.method == 'POST':

                            form= ContactForm(request.POST)

                            ifform.is_valid():

                            #这里是获取form中通过验证的数据,在获取以后通常的操作是插入到数据库中

                            subject= form.cleaned_data['subject']

                                   message= form.cleaned_data['message']

                                   sender= form.cleaned_data['sender']

                                   cc_myself= form.cleaned_data['cc_myself']

                            returnHttpResponseRedirect('/thanks/')

                     else:

                            form= ContactForm()

                            returnrender(request, 'contact.html', {

                                   'form':form,

                            })

      

      

可用的form字段

       AutoField               Not represented in the form

       BigIntegerField              IntegerField with min_value set to-9223372036854775808 and max_value set to 9223372036854775807.

       BooleanField          BooleanField

       CharField               CharField with max_length set tothe model field’s max_length

       CommaSeparatedIntegerField CharField

       DateField               DateField

       DateTimeField        DateTimeField

       DecimalField          DecimalField

       EmailField                     EmailField

       FileField                FileField

       FilePathField          CharField

       FloatField                     FloatField

       ForeignKey                   ModelChoiceField (see below)

       ImageField                    ImageField

       IntegerField           IntegerField

       IPAddressField              IPAddressField

       GenericIPAddressField          GenericIPAddressField

       ManyToManyField         ModelMultipleChoiceField (see below)

       NullBooleanField     CharField

       PositiveIntegerField              IntegerField

       PositiveSmallIntegerField       IntegerField

       SlugField               SlugField

       SmallIntegerField    IntegerField

       TextField               CharField withwidget=forms.Textarea

       TimeField                     TimeField

       URLField               URLField

      

      

 

 

 

RTX多人名称的获取

 

#先在form.py中定义一个拆分人名的函数

def _rtxnames_2_member(text):

   re_split = re.compile(r'\s*;\s*')

       

   members = []

   for username in re_split.split(text):

       if username == "":

           continue

       try:

           member = Member.objects.get(name=username)

       except Member.DoesNotExist:

           member = Member(name=username)

           member.save()

 

 

       members.append(member)

       

   return members

 

#在相关的form中定义一段解析"a;b;c;d;e"这样的方法

manager =forms.RegexField(regex=r'(\s*[a-zA-Z0-9_-]+\s*;)*')

def clean_member(self):

       member_text = self.cleaned_data['member']

       return _rtxnames_2_member(member_text)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值