doraemon的python form组件(国庆大更新)

### 11.12 form组件

form组件的功能:

1. 生产input标签
2. 对提交的数据进行校验
3. 提供错误提示

定义form组件

```python
from django import forms

class RegForm(forms.Form):
    username = forms.CharField()
    pwd = forms.CharField()
```

使用的流程

视图

```python
form_obj = RegForm()
form_obj = RegForm(request.POST)
form_obj.is_valid():  #对数据进行校验
    print(form_obj.cleaned_data)  #通过检验的数据
    return render(request,‘regs.html‘,{‘form_obj‘:form_obj})
```

模板

```html
{{form_obj.as_p}}   ----> 生产一个个p标签 input label
{{form_obj.errors}}    ----->form表单中所有字节的错误
{{form_obj.username}}    ----->一个字段对应的input框
{{form_obj.username.label}}  ---》该字段的中文提示
{{form_obj.username.id_for_label}}   ----->该字段的input框的id
{{form_obj.username.errors}} ---->给字段的所有错误
{{form_obj.username.errors.0}}   ---->该字段的第一个错误
```

常用字段

```python
CharField
ChoiceField
MultipleChoiceField
```

字段参数

```python
required=True        是否允许为空
widget=None            html插件
label=None            用于生成label的标签或者显示内容
initial = None       初始值
error_message=None     错误信息 {‘required‘:‘不能为空‘,‘invalid‘:‘格式错误‘}
validators=[函数名]   自定义验证规则
disabled=False         是否可以编辑
```

验证

1.内置验证

```python
required=True
min_length
max_length
```

2.自定义校验器:

?    1.写函数

```python
def checkname(value):
    #通过校验规则 不做任何操作
    #不通过校验规则 抛出异常
    if ‘liujia‘ in value:
        raise ValidationError(‘不合格我的想法‘)
```

?    2.使用内置的检器

```python
from django.core.validators import RegexValidator
```

3.钩子函数

?    1.局部钩子

```python
def clean_字段名(self):
    # 局部钩子
    # 通过校验规则  必须返回当前字段的值
    # 不通过校验规则   抛出异常
    raise ValidationError(‘不符合社会主义核心价值观‘)
```

?    2.全局钩子

```python
def clean(self):
    # 全局钩子
    # 通过校验规则  必须返回当前所有字段的值
    # 不通过校验规则   抛出异常   ‘__all__‘
    pass
```

is_valid的流程:

1.执行full_clean()的方法:

定义错误字典

定义存放清洗数据的字典

2.执行_clean_fields方法:

?    循环所有的字段

?    获取当前的值

?    对进行校验 ( 内置校验规则   自定义校验器)

1. 通过校验

   self.cleaned_data[name] = value 

   如果有局部钩子,执行进行校验:

   通过校验——》 self.cleaned_data[name] = value 

   不通过校验——》     self._errors  添加当前字段的错误 并且 self.cleaned_data中当前字段的值删除掉

   2. 没有通过校验

   self._errors  添加当前字段的错误

3.执行全局钩子clean方法

原文地址:https://www.cnblogs.com/doraemon548542/p/11638571.html

时间: 2024-07-30 11:33:36

doraemon的python form组件(国庆大更新)的相关文章

Django 批量插入数据、自定义分页器、多表关系的建立及Form组件(待更新。。。)

目  录 django批量出入数据 自定义分页器 创建多对多表关系的建立 form组件 form组件钩子函数 一.django批量出入数据 视图函数: from app01 import models # 向表中插入1000条数据 def index(request): # 方式1: # for i in range(1000): # models.Book.objects.create(title='第%s本书'%i) # book_Queryset = models.Book.objects

doraemon的python ORM必会操作(国庆大更新)

### 11.9 ORM的字段和参数 ```python AutoField 主键 IntegerField 整数 CharField 字符串 BoolleanField 布尔值 DateTimeField DateField 日期时间 auto_now_add=True #新增数据的时候回自动保存当前的时间 auto_now=True #新增.修改数据的时候回自动保存当前的时间 DecimalField 十进制的小数 max_digits 小数总长度 decimal_place 小数长度 ``

doraemon的python csrf校验(国庆大更新)

### 11.11 csrf装饰器 ```python from django.views.decorators.csrf import csrf_exempt,csrf_protect,ensure_csrf_cookie csrf_exempt #某个视图不需要进行csrf校验 csrf_protect #某个视图需要进行csrf校验 ensure_csrf_cookie #确保生成csrf的cookie ``` csrf功能: 1.csrf中间件中执行process_request: ?

doraemon的python cookie和session(国庆大更新)

### 11.10 cookie和session #### 11.10.1 cookie 定义:保存在浏览器本地上的一组组键值对 为什么有cookie? - http协议是无状态的,每次http请求都是对立的,相互之间没有关联,yongcoolie保存状态 特点: 1. 由服务器让浏览器进行设置的 2. 浏览器保存在浏览器本地 3. 下次访问的时候自动携带 4. 应用场景:登录.保存浏览器习惯.简单的投票 django中操作cookie 设置: ```python ret = redirect(

doraemon的python django框架的路由详解(国庆大更新)

### 11.8 路由 #### 11.8.1 urlconf ```python from django.conf.urls import url from app01 import views urlpatterns = [ url(r'^admin/',admin.site.urls), #这里用到了正则 url(r'^home',views.home,{},name='home'), ] ``` #### 11.8.2 分组和命名分组 url上捕获的都是字符串 分组 ```python

doraemon的python django的中间件(国庆大更新)

### 11.13 中间件 中间件的定义: 中间件是处理django的请求和相应的框架级别的钩子,本质上就是一个类 中间件可以定义为五个方法: - process_request(self,request) - process_view(self, request, view_func, view_args, view_kwargs) - process_template_response(self,request,response) - process_exception(self, requ

Python之路【第二十一篇】:Django之Form组件

Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 from django.forms import Form from django.forms import widgets from django.forms imp

Python学习(三十九)—— Django之Form组件

一.构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method="post"> <label for="your_name">Your name: </label> <input id="your_name" type="text" name="your

Python Django 多对多三种创建方式 form组件 cookie和session

一 表中多对多关系三种创建方式 以Book表和Author表多对多关系例 1.第一种方式:全自动(推荐使用):models.ManyToManyField(to='类名') 优点:不需要你手动创建第三张表 缺点:第三张表不是你手动创建的,字段是固定的无法拓展 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_place