zoukankan      html  css  js  c++  java
  • 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.其他字段(参考博客)
  • 相关阅读:
    软件构架实践_阅读笔记04(-11)
    软件构架实践_阅读笔记03(7-9)
    Tsinsen-A1488 : 魔法波【高斯消元+异或方程组】
    Tsinsen-1487:分配游戏【树状数组】
    Tsinsen-1486:树【Trie树 + 点分治】
    Splay初步【bzoj1503】
    Treap初步
    [BZOJ3207] 花神的嘲讽计划Ⅰ
    可持久化Trie树初步
    可持久化线段树初步
  • 原文地址:https://www.cnblogs.com/huanghongzheng/p/11234423.html
Copyright © 2011-2022 走看看