Table of Contents
用pattern分割string,maxsplit是最大分割次数,flags是常量
替换
- 用replace替换stirng中被匹配的内容,count是最多次数,replace可以是一个函数
- complex()
- escape(pattern) 转义正则表达式中具有特殊含义的字符
- re.purge() 清除正则表达式缓存
2.灵感代办
-
python 多对多操作
- author.book_set.all()
- author.book_set.filter()
- author.book_set.create(...) # 创建新书并联作用author
- author.book_set.add(book) # 添加已有的书为当前作者author
- author.book_set.clear() # 删除author所有并联的书
- author.book_set.remove() # 删除所author所有并联的书
-
session_id
- 在使用session时候,浏览器会自动生成
-
django 聚合函数使用 aggregate ,annotate
-
python 中的正则使用
-
会话
-
django APP应用自己的模板
3.学习内容
-
django 中间件 middleware
-
什么是中间件?
- 类似一个钩子,在请求响应之前做一些操作。
- 一个中间件会实现特定的功能,比如crsf可以简单防止跨域攻击
-
创建自定义中间件
-
1.继承MiddlewareMixin类(django.utils.deprecation包中)
-
2.选定一个多个方法来实现功能
-
def process_request(self, request):
- 执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
-
def process_view(self, request, callback, callback_args,callback_kwargs):
- 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
-
def process_response(self, request, response):
- 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
-
def process_exception(self, request, exception):
- 当处理过程中抛出异常时调用,返回一个HttpResponse对象
-
def process_template_response(self, request, response):
- 在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
-
注: 中间件中的大多数方法在返回None时表示忽略当前操作进入下一项事件,当返回HttpResponese对象时表示此请求结果,直接返回给客户端
- 3.在setting中添加中间件的位置
- 4.详细 https://segmentfault.com/a/1190000019992887
-
跨站请求伪造保护 CSRF
-
跨站请求伪造攻击
- 不是自己的网站,要登录自己的网站做操作
-
CSRF
- Cross-Site Request Forgey
跨 站点 请求 伪装
-
django中默认带了简单的中间件来防护
- django.middleware.csrf.CsrfViewMiddleware
- 在视图处理中添加装饰器 @csrf_protect
- 在form表单中添加{% csrf_token %}
-
Django forms模块
- 作用:类似模型,用来创建一个form表单,可以方便验证表单的数据(通过对象创建form表单)
-
使用:
-
1.导入 from django import forms
-
2.创建一个类,继承(forms.From),
-
3.一个类属性就是一个控件(和模型很相似)
- forms.CharField() : 文本框
- forms.ChoiceField() : 下拉选项框
- 可以传递的参数
- label
控件前的文本
- widget
指定小部件
- initial
控件的初始值(主要针对文本框类型)
- required
是否为必填项,值为(True/False)
-
4.在创建的类中,可以验证数据
-
5.在view中创建自定义的form对象,名字为form,传递给html,html中需要{% form.as_p %}
- 可以接收表单数据
- form = XXXForm(request.POST)
- 验证数据是否通过
- form.is_valid()
返回True:通过验证,可以取值
- 接收数据需要使用
- 通过 form.cleaned_data 字典的属性接收数据
form.cleaned_data : dict 类型
-
6.使用测试
-
注意:提交按钮需要在html中手动写
-
解析方式:
-
1.手动解析 {% for field in form %}XXX{% endfor %}
- field : 表示的是form对象中的每个属性(控件)
- {{field.label}} :表示的是label参数值
- {{field}} : 表示的就是控件
- 注意:属性等需要自己读取,field就是一个对象
-
2.自动解析
- {{form.as_p}}
- form中的内容都被p包裹
- {{form.as_ul}}
- ul 或 ol都是自己在html中创建的
- {{form.as_table}}
- table等创建也需要手动
-
widget小部件
- 1.什么是小部件
- 表示的是生成到网页上的控件以及一些其他的html属性
- 2.常用的小部件
- TextInput type='text'
- PasswordInput type='password'
- NumberInput type="number"
- EmailInput type="email"
- URLInput type="url"
- HiddenInput type="hidden"
- CheckboxInput type="checkbox"
- CheckboxSelectMultiple type="checkbox"
- RadioSelect type="radio"
- Textarea textarea标记
- Select select标记
- SelectMultiple select multiple 标记
- 小部件的使用方法:
- 1.继承自forms.From
- 1.基本使用
- password = forms.CharField(widget=forms.PasswordInput)
- 2.高级使用(自定义属性值)
- password = forms.CharField(widget=forms.PasswordInput(attr={‘key’,value,…..}))
-
form表单验证
- 当在创建有不同的多个表单需要提交的网站时,用表单验证比较方便验证的封装
-
调用form.is_valid() 来验证表单
-
验证步骤:
- 先对form.XXXField() 参数值进行验证,比如:min_length,max_length, validators=[...],如果不符合
form.is_valid()返回False
- 有Email类型 账户密码等等
- 对各自from.clean_zzz属性名(self): 方法对相应属性进行验证,如果验证失败form.is_valid()返回False
- form.clean(self): 对表单的整体结构进行验证,如果验证失败form.is_valid()返回False
- 以上验证都成功 form.is_valid()返回True
-
验证方法:
- validators = [验证函数1, 验证函数1]
- 验证函数验证失败抛出forms.ValidationError
验证成功返回None
- def clean_xxx属性(self):
- 验证失败必须抛出forms.ValidationError
验证成功必须返回xxx属性的值
- def clean(self):
- 验证失败必须抛出forms.ValidationError
验证成功必须返回 self.cleaned_data
-
分页
- 有大量数据需要展示,就用到分页
- 分页的类位于:django/core/paginator.py中
-
Paginator对象
-
1.生成Paginator对象(object_list,per_page)
- object_list ,all()等查询出来的数据
- per_page ,一页需要多少书记
- 返回:分页对象
-
2.Paginator属性
- count 对象总数
- num_pages :页面总数
- page_range() 从1开始的range对象,用于记录当前页码
- per_page 每页个数
-
Paginator方法
- Paginator.page(number)
- 传递页码数字
- 返回的是当前页的数据
- 不存在页码则抛出InvalidPage异常
-
Paginator异常
- InvalidPage:当传递一个无效页码抛出
- PageNotAnInteger() 传递页码不是数字抛出
- EmptyPage: 传递有效值,但是页面没有对象
-
Page对象
- 调用Paginator对象的Page()方法返回page对象
- page对象属性
- object_list:当前页上所有对象的列表
- number:当前页的序号,从1开始
- paginator:当前page对象相关的Paginator对象
- Page对象方法
- has_next():如果有下一页返回True
- has_previous():如果有上一页返回True
- has_other_pages():如果有上一页或下一页返回True
- next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
- previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
- len():返回当前页面对象的个数
- page对象使用:
- Page 对象是可迭代对象,可以用 for 语句来遍历
4.扩展延伸知识
- python包导入方法
-
python 反向解析的使用注意
- href = ”{% url ‘反向解析的名称’ %}?page={{p}}”
- 带引号,单引号双引号
- ?后面的变量要在引号内
-
python 标签的使用
- 字典和对象的方法,也都是用.来调用
- python forms讲解
5.知识内容个人梳理
6.今天都复习了之前的什么内容
python 多对多操作
- author.book_set.all()
- author.book_set.filter()
- author.book_set.create(...) # 创建新书并联作用author
- author.book_set.add(book) # 添加已有的书为当前作者author
- author.book_set.clear() # 删除author所有并联的书
- author.book_set.remove() # 删除所author所有并联的书
session_id
- 在使用session时候,浏览器会自动生成
django 聚合函数使用 aggregate ,annotate
python 中的正则使用
会话
django APP应用自己的模板
-
django 中间件 middleware
-
什么是中间件?
- 类似一个钩子,在请求响应之前做一些操作。
- 一个中间件会实现特定的功能,比如crsf可以简单防止跨域攻击
-
创建自定义中间件
-
1.继承MiddlewareMixin类(django.utils.deprecation包中)
-
2.选定一个多个方法来实现功能
-
def process_request(self, request):
- 执行视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
-
def process_view(self, request, callback, callback_args,callback_kwargs):
- 调用视图之前被调用,在每个请求上调用,返回None或HttpResponse对象
-
def process_response(self, request, response):
- 所有响应返回浏览器之前被调用,在每个请求上调用,返回HttpResponse对象
-
def process_exception(self, request, exception):
- 当处理过程中抛出异常时调用,返回一个HttpResponse对象
-
def process_template_response(self, request, response):
- 在视图刚好执行完毕之后被调用,在每个请求上调用,返回实现了render方法的响应对象
-
注: 中间件中的大多数方法在返回None时表示忽略当前操作进入下一项事件,当返回HttpResponese对象时表示此请求结果,直接返回给客户端
-
- 3.在setting中添加中间件的位置
- 4.详细 https://segmentfault.com/a/1190000019992887
-
-
跨站请求伪造保护 CSRF
-
跨站请求伪造攻击
- 不是自己的网站,要登录自己的网站做操作
-
CSRF
- Cross-Site Request Forgey
跨 站点 请求 伪装
- Cross-Site Request Forgey
-
django中默认带了简单的中间件来防护
- django.middleware.csrf.CsrfViewMiddleware
- 在视图处理中添加装饰器 @csrf_protect
- 在form表单中添加{% csrf_token %}
-
-
-
Django forms模块
- 作用:类似模型,用来创建一个form表单,可以方便验证表单的数据(通过对象创建form表单)
-
使用:
-
1.导入 from django import forms
-
2.创建一个类,继承(forms.From),
-
3.一个类属性就是一个控件(和模型很相似)
- forms.CharField() : 文本框
- forms.ChoiceField() : 下拉选项框
- 可以传递的参数
- label
控件前的文本 - widget
指定小部件 - initial
控件的初始值(主要针对文本框类型) - required
是否为必填项,值为(True/False)
- label
-
4.在创建的类中,可以验证数据
-
5.在view中创建自定义的form对象,名字为form,传递给html,html中需要{% form.as_p %}
- 可以接收表单数据
- form = XXXForm(request.POST)
- 验证数据是否通过
- form.is_valid()
返回True:通过验证,可以取值
- form.is_valid()
- 接收数据需要使用
- 通过 form.cleaned_data 字典的属性接收数据
form.cleaned_data : dict 类型
- 通过 form.cleaned_data 字典的属性接收数据
- 可以接收表单数据
-
6.使用测试
-
-
注意:提交按钮需要在html中手动写
-
解析方式:
-
1.手动解析 {% for field in form %}XXX{% endfor %}
- field : 表示的是form对象中的每个属性(控件)
- {{field.label}} :表示的是label参数值
- {{field}} : 表示的就是控件
- 注意:属性等需要自己读取,field就是一个对象
-
2.自动解析
- {{form.as_p}}
- form中的内容都被p包裹
- {{form.as_ul}}
- ul 或 ol都是自己在html中创建的
- {{form.as_table}}
- table等创建也需要手动
-
-
widget小部件
- 1.什么是小部件
- 表示的是生成到网页上的控件以及一些其他的html属性
- 2.常用的小部件
- TextInput type='text'
- PasswordInput type='password'
- NumberInput type="number"
- EmailInput type="email"
- URLInput type="url"
- HiddenInput type="hidden"
- CheckboxInput type="checkbox"
- CheckboxSelectMultiple type="checkbox"
- RadioSelect type="radio"
- Textarea textarea标记
- Select select标记
- SelectMultiple select multiple 标记
- 1.什么是小部件
- 小部件的使用方法:
- 1.继承自forms.From
- 1.基本使用
- password = forms.CharField(widget=forms.PasswordInput)
- 2.高级使用(自定义属性值)
- password = forms.CharField(widget=forms.PasswordInput(attr={‘key’,value,…..}))
- 1.基本使用
- 1.继承自forms.From
-
form表单验证
- 当在创建有不同的多个表单需要提交的网站时,用表单验证比较方便验证的封装
-
调用form.is_valid() 来验证表单
-
验证步骤:
- 先对form.XXXField() 参数值进行验证,比如:min_length,max_length, validators=[...],如果不符合
form.is_valid()返回False- 有Email类型 账户密码等等
- 对各自from.clean_zzz属性名(self): 方法对相应属性进行验证,如果验证失败form.is_valid()返回False
- form.clean(self): 对表单的整体结构进行验证,如果验证失败form.is_valid()返回False
- 以上验证都成功 form.is_valid()返回True
- 先对form.XXXField() 参数值进行验证,比如:min_length,max_length, validators=[...],如果不符合
-
验证方法:
- validators = [验证函数1, 验证函数1]
- 验证函数验证失败抛出forms.ValidationError
验证成功返回None
- 验证函数验证失败抛出forms.ValidationError
- def clean_xxx属性(self):
- 验证失败必须抛出forms.ValidationError
验证成功必须返回xxx属性的值
- 验证失败必须抛出forms.ValidationError
- def clean(self):
- 验证失败必须抛出forms.ValidationError
验证成功必须返回 self.cleaned_data
- 验证失败必须抛出forms.ValidationError
- validators = [验证函数1, 验证函数1]
-
分页
- 有大量数据需要展示,就用到分页
- 分页的类位于:django/core/paginator.py中
-
Paginator对象
-
1.生成Paginator对象(object_list,per_page)
- object_list ,all()等查询出来的数据
- per_page ,一页需要多少书记
- 返回:分页对象
-
2.Paginator属性
- count 对象总数
- num_pages :页面总数
- page_range() 从1开始的range对象,用于记录当前页码
- per_page 每页个数
-
Paginator方法
- Paginator.page(number)
- 传递页码数字
- 返回的是当前页的数据
- 不存在页码则抛出InvalidPage异常
- Paginator.page(number)
-
Paginator异常
- InvalidPage:当传递一个无效页码抛出
- PageNotAnInteger() 传递页码不是数字抛出
- EmptyPage: 传递有效值,但是页面没有对象
-
-
Page对象
- 调用Paginator对象的Page()方法返回page对象
- page对象属性
- object_list:当前页上所有对象的列表
- number:当前页的序号,从1开始
- paginator:当前page对象相关的Paginator对象
- Page对象方法
- has_next():如果有下一页返回True
- has_previous():如果有上一页返回True
- has_other_pages():如果有上一页或下一页返回True
- next_page_number():返回下一页的页码,如果下一页不存在,抛出InvalidPage异常
- previous_page_number():返回上一页的页码,如果上一页不存在,抛出InvalidPage异常
- len():返回当前页面对象的个数
- page对象使用:
- Page 对象是可迭代对象,可以用 for 语句来遍历
4.扩展延伸知识
- python包导入方法
-
python 反向解析的使用注意
- href = ”{% url ‘反向解析的名称’ %}?page={{p}}”
- 带引号,单引号双引号
- ?后面的变量要在引号内
-
python 标签的使用
- 字典和对象的方法,也都是用.来调用
- python forms讲解
5.知识内容个人梳理
6.今天都复习了之前的什么内容
python 反向解析的使用注意
- href = ”{% url ‘反向解析的名称’ %}?page={{p}}”
- 带引号,单引号双引号
- ?后面的变量要在引号内
python 标签的使用
- 字典和对象的方法,也都是用.来调用
6.今天都复习了之前的什么内容