前言:

  为什么要用form去验证呢?

  我们提交的是form表单,在看前端源码时如果检查到POST URL及我们提交的字段,如果没有验证我们是否可以直接POST数据到URL,后台并没有进行校验,直接处理,那样会不会对我们系统产生影响?答案是肯定的,FORM的作用就是起到一定的数据保护作用加一层校验将不合法数据丢弃

1.针对上一章 django form表单验证 补充

form表单补充,select框

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
from django import forms
from  django.core.exceptions import ValidationError


def phone_validate(value):
    phone_re = re.compile(r'^(13[0-9]|15[012356789]|17[0678]|18[0-9]|14[57])[0-9]{8}$')
    if not phone_re.match(value):
        raise ValidationError('手机号码格式错误')

class TestForm(forms.Form):
    user_type_choice = (
        (0, u'普通用户'),
        (1, u'管理员'),
    )

    user_type = forms.IntegerField(widget=forms.widgets.Select(choices=user_type_choice,
                                                               attrs={'class': "form-control"}))

 注:

  widget 生成前端展示 .SELECT选择下拉框,attrs属性class前端显示类

二. 通过model form来自定义表单

1. 字段类型

 生成的表单类中将具有和指定的模型字段对应的表单字段,顺序为fields 属性中指定的顺序。

 

Form field
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 to the model field’s max_length
CommaSeparatedIntegerField CharField
DateField DateField
DateTimeField DateTimeField
DecimalField DecimalField
EmailField EmailField
FileField FileField
FilePathField FilePathField
FloatField FloatField
ForeignKey ModelChoiceField (see below)
ImageField ImageField
IntegerField IntegerField
IPAddressField IPAddressField
GenericIPAddressField GenericIPAddressField
ManyToManyField ModelMultipleChoiceField (see below)
NullBooleanField NullBooleanField
PositiveIntegerField IntegerField
PositiveSmallIntegerField IntegerField
SlugField SlugField
SmallIntegerField IntegerField
TextField CharField with widget=forms.Textarea
TimeField TimeField
URLField URLField

 

完整示例:

1. 数据模型

创建:

 1 from django.db import models
 2 
 3 
 4 # Create your models here.
 5 
 6 
 7 class Publisher(models.Model):
 8     name = models.CharField(max_length=30, unique=True)
 9     address = models.CharField(max_length=50)
10     city = models.CharField(max_length=60)
11     state_province = models.CharField(max_length=60)
12     country = models.CharField(max_length=60)
13     website = models.URLField()
14 
15     def __str__(self):
16         return self.name
17 
18 
19 class Author(models.Model):
20     first_name = models.CharField(max_length=32)
21     last_name = models.CharField(max_length=32)
22     email = models.EmailField()
23 
24     def __str__(self):
25         name = self.first_name + self.last_name
26         return name
27 
28 
29 class Book(models.Model):
30     name = models.CharField(max_length=128)
31     authors = models.ManyToManyField(Author)
32     publisher = models.ForeignKey(Publisher)
33     publish_date = models.DateField()
34 
35     def __str__(self):
36         return self.authors
model.py

相关文章:

  • 2021-07-13
  • 2022-02-02
  • 2021-05-30
  • 2022-01-22
  • 2021-06-29
  • 2021-10-27
猜你喜欢
  • 2021-12-27
  • 2021-11-06
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-06-02
相关资源
相似解决方案