Django总计

1.django请求周期
每个人都必须给我画出来
web服务网关接口
WSGI协议
wsgiref(django自带的 可承受的并发量不是很高 通常指用于本地测试)
uwsgi (django项目上线之后会使用)
werkzeug (flask使用的)
实现WSGI协议的功能模块
ps:
请求来的时候处理http格式的数据
请求走的时候讲后端发送的数据打包成符合http格式的数据再发送

	django中间件
		django默认有七个中间件(Csrf...,Authticate...,Session...)
		
		django支持用户自定义中间件
			暴露给用户五个可以自定义的方法
				1.process_request  请求来的时候
				2.process_response  响应走的时候
				3.process_view  路由匹配成功即将执行视图函数之前
				4.process_template_response  视图函数中返回了render对象
				5.process_exception  视图函数报错之后 报错信息会交给当前方法
			
			如何自定义中间件
				1.在某个应用下创建一个任意名称的py文件
				2.写一个类继承MiddlewareMixin
				3.在该类中书写上述五个可以自定义的方法
				4.在settings配置文件将你写的中间件添加到Middleware配置项中
					ps:格式应用名.py文件名.类名 (不会自动提示 书写的时候要格外注意)
	
	CBV源码
		1.类继承了View
		2.路由自定义类名.as_view()  绑定给类的方法  书写完毕立刻执行
		3.as_view()里面的定义了一个view闭包函数 并将view函数的内存地址返回出来 也就意味着CBV的路由本质还是FBV
		4.一旦路由匹配上 执行闭包函数view  生成一个自定义类的对象 返回了对象.dispatch方法
		5.注意在设计面向对象关系查找的时候 一定要牢记 当前的self到底是谁  在我们这里调用的就是View里面的disptch方法
		6.首先判断当前请求方法在不在django提供默认的八个请求(get,post,put,delete,oprions...)内 如果不在直接报错
		7.如果请求方式存在  利用反射拿到当前对象里面对应的属性或者方法
		8.执行该方法(该方法返回上面 浏览器就能收到上面)
		ps:django必会三板斧返回的都是HttpReponse对象
		
	
	ContentType 前后端传输数据编码格式
		1.urlencode
			1.它是form表单和ajax默认提交数据的编码格式
				数据格式:username=jason&password=123
			2.不能传输文件
			3.django只会将符合urlencoded格式的数据处理并放入request.POST中
		2.formdata
			1.它可以支持传文件(既可以传文件也支持普通的键值对上传)
				1.在form表单中 通过修改form标签的enctype将默认的编码格式修改为formdata
				
		3.application/json
			1.传输的是json格式的数据
		ps:
			1.编码格式应该与数据类型一致 不能骗人家
			2.浏览器查看编码格式 右键检查 点击network 查看requestheaders里面的contentType参数  原生的数据view source
	
	
	
	Ajax两大特点
		1.异步提交
		2.局部刷新
		
		
		同步异步:描述的是任务的提交方式
		
		阻塞非阻塞:描述的是程序的运行状态
			程序的运行状态
				1.就绪态
				2.运行态
				3.阻塞态
	
	Ajax传json格式数据
		$.ajax({
			url:'',
			type:'post',
			data:JSON.stringify({'username':'jason'}),
			contentType:'application/json',
			success:function(data){
				...
			}
		
		})
	Ajax传文件 需要利用内置对象FormData(既可以传文件也支持普通的键值对上传)
		var formData = new FormData();
		formData.append('username','jason');
		# 获取文件标签内的文件数据
		var fileObj = $('#myfile')[0].files[0];
		formData.append('myfile',fileObj);
		$.ajax({
			url:'',
			type:'post',
			data:formData,
			
			# 如果利用内置对象传数据
			contentType:false,
			processData:false,
			
			success:function(data){
				alert(data)
			}
		
		})
		
		
		
forms组件
	1.渲染标签
	2.校验数据
	3.展示错误信息
	
	使用
		1.自定义一个继承forms.Form的类
			from django import forms
			class MyForm(forms.Form):
				username = forms.Charfield(max_length=6)
		2.传入字典即可校验数据
			1.判断数据是否合法 is_valid()
			2.查看校验通过的数据 cleaned_data
			3.查看校验未通过并且未通过的原因 errors
			
		
		3.渲染标签 forms组件只能帮你渲染获取用户输入的标签
			1.{{ form_obj.as_p }}
			2.{{ form_obj.username.label }}{{ form_obj.username }}
			3.{% for foo in form_obj %}
				<p>
					{{ foo.label }}
					{{ foo }}
					<span>{{ foo.errors.0 }}</span>
				</p>
			  {% endfor %}
		
		钩子函数(二次校验)
			局部钩子
				def clean_字段名(self):
					# 比如 用户名是否存在/合法
					...
			全局钩子
				def clean(self):
					# 比如密码与确认密码之间的校验
					...
			
		forms组件补充
			1.可以写正则
			2.widgets参数
				TextInput
				PassInput(attrs={'class':'form-control c1'})
			3.其他字段(参考博客)
posted @ 2019-07-23 20:57  Huanghongzheng  阅读(125)  评论(0编辑  收藏  举报