Python系统学习-21

1.中间件
https://www.cnblogs.com/maple-shaw/articles/9333824.html

	1. Django的请求的生命周期
	2. 中间件的五种方法
	
		process_request(self,request)
			1. 执行时间
				在视图函数执行之前
			2. 参数
				request :请求对象 和视图的参数是一个 
			3. 执行顺序
				按照注册的顺序 顺序执行 
				
			4. 返回值
				None  : 正常流程
				response对象: 正常流程后的process_request方法、视图都不执行,执行执行当前中间件的process_response,
				response对象返回给浏览器
			
		
		process_response(self, request, response)
			1. 执行时间
				在视图函数执行之后
			2. 参数
				request :请求对象 和视图的参数是一个 
				response : 视图返回的响应对象
			3. 执行顺序
				按照注册的顺序 倒叙执行
				
			4. 返回值
				response对象:必须返回
		
		process_view(self, request, view_func, view_args, view_kwargs)
			1. 执行时间
				在视图函数执行之前,在process_request之后,在路由匹配之后
			2. 参数
				request :请求对象 和视图的参数是一个 
				view_func:视图函数
				view_args:视图函数的位置参数
				view_kwargs:视图函数的关键字参数
			3. 执行顺序
				按照注册的顺序 顺序执行
				
			4. 返回值
				None  : 正常流程
				response对象: 之后中间的process_view方法、视图不执行,执行所有中间的process_response
		process_template_response(self,request,response)
			1. 执行时间
				触发条件: 视图返回响应对象有一个render方法
				时间:  在视图执行之后
				
			2. 参数
				request :请求对象 和视图的参数是一个 
				response : 视图返回的响应对象
			3. 执行顺序
				按照注册的顺序 倒叙执行
				
			4. 返回值
				response对象: 必须的

		process_exception(self, request, exception)
			1. 执行时间
				触发条件: 视图层面有错误之后执行
			2. 参数:
				request :请求对象 和视图的参数是一个
				exception:  错误对象
			3. 执行顺序
				按照注册的顺序 倒叙执行
			4. 返回值
				None: 正常报错 
				response对象:之后的中间件process_exception方法不执行,执行所有中间件的process_response

	3. csrf中间件源码分析
		from django.views.decorators.csrf import csrf_exempt,csrf_protect
	
2. ajax
	https://www.cnblogs.com/maple-shaw/articles/9524153.html
	1. 发请求的途径
		1. 在浏览器地址上输入地址  回车  ——》 GET
		2. form表单                      ——》 GET / POST
		3. a标签                         ——》 GET
	2. ajax
		使用js技术发送异步请求 一般传输json数据
		特点:
			局部刷新 当前页面不刷新
			异步 
	
	1. 计算示例
	
		 $.ajax({
			url:'/calc1/',
			type:'post',
			data:{
				i1:$('[name="ii1"]').val(),
				i2:$('[name="ii2"]').val()
			},
			success:function (res) {
				console.log(res);
				$('[name="ii3"]').val(res)
			}
		})
	2. ajax的参数介绍
		上传文件
			form_obj = new FormData();
			form_obj.append('f1', $('#f1')[0].files[0]);
			$.ajax({
				url: '/upload/',
				type: 'post',
				processData: false,   # 告诉ajax不处理编码方式
				contentType: false,	  # 告诉ajax不处理contentType
				data: form_obj,
				success: function (res) {
					console.log(res);     # 返回的响应的响应体
				},
			})
			
	3. 提交post请求的设置
		前提有cookie csrftoken 
		1. 
			使用 {% csrf_token %}
			data: {
            i1: $('[name="i1"]').val(),
            i2: $('[name="i2"]').val(),
            csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
        },
		
		2. 
			headers:{'X-csrftoken':$('[name="csrfmiddlewaretoken"]').val()},
		3. 使用文件
			

3. form组件
	https://www.cnblogs.com/maple-shaw/articles/9537309.html
	1. 注册示例
	2. form组件的使用
		1. 定义
		# 注册form
		class RegForm(forms.Form):
			user = forms.CharField(label='用户名')
			pwd = forms.CharField(label='密码',widget=forms.widgets.PasswordInput)
			
			
		2. 使用
			1. 视图中
				form_obj = RegForm()
				
				form_obj = RegForm(request.POST)
				form_obj.is_valid    布尔值
				
			2. 模板中
				{{ form_obj.as_p }}   —— 》 生成P标签 (label 和 input)
				
				{{ form_obj.user }}   —— 》 生成input框
				{{ form_obj.pwd }}
				
				{{ form_obj.pwd.label }}  ——》 对应的中文
				{{ form_obj.pwd.id_for_label }}  ——》 input的ID
				

				{{ form_obj.errors }}  —— 》 所有错误提示
				{{ form_obj.pwd.errors }}  —— 》 某个字段的所有错误提示
				{{ form_obj.pwd.errors.0 }}  —— 》 某个字段的第一错误提示
		
	3. 字段及参数介绍
		见博客
				min_length=8,
				max_length=16,
				label='用户名',
				initial='alex',
				widget=forms.widgets.Input(attrs={'class': 'form-control'}),
				error_messages=
				
	4. 内置校验器和自定义检验
		1. 内置的校验
			min_length=8,
			max_length=16,
			required 
		2. 自定义校验
			1. 提供校验的类
			from django.core.validators import RegexValidator
			
			2. 函数
			from django.core.exceptions import ValidationError

			def check_name(value):

				if 'alex' in value:
					raise ValidationError('涉黄')
	5. is_valid源码解析及局部、全局钩子
	
		1. 局部钩子
			校验某个字段
			    def clean_pwd(self):
					value =self.cleaned_data.get('pwd')
					if len(value)<6:
						raise ValidationError('密码少于6位')

					return value
		2. 全局钩子
			def clean(self):
				pwd = self.cleaned_data.get('pwd')
				re_pwd = self.cleaned_data.get('re_pwd')
				if pwd == re_pwd:
					return self.cleaned_data
				self.add_error('re_pwd','两次密码不一致')
				raise ValidationError('两次密码不一致')
								
	
4. auth模块
	https://www.cnblogs.com/maple-shaw/articles/9537320.html
	1. 登录
		1. auth.authenticate  验证用户名和密码
			obj = auth.authenticate(request, username=user, password=pwd)
		2. login(request,user)	保存登录状态 写session
		
		3. login_required  登录之后才能访问某个页面
			from django.contrib.auth.decorators import login_required
		4. request.user.is_authenticated()  判断登录状态
		
	2. 注销
	3. 注册
	4. 扩展auth表

猜你喜欢

转载自blog.csdn.net/weixin_41765871/article/details/83443484
今日推荐