格式:web
请求头和请求体数据库
请求头首行的格式是 请求方式 请求地址 http协议版本 ,(除了首行)使用\r\n分隔,和请求体须要使用2个\r\n来分隔django
响应头和响应体json
GET和POST的请求头又不同:GET只有请求头,而POST有请求头和请求体 跨域
请求头:浏览器
User-Agent:访问设备的信息服务器
Host:访问的服务器地址数据结构
referer:作防盗链的socket
Content-Type:ide
响应头:
详细参考:
100 继续 101 分组交换协 200 OK 201 被建立 202 被采纳 203 非受权信息 204 无内容 205 重置内容 206 部份内容 300 多选项 301 永久地传送 302 找到 303 参见其余 304 未改动 305 使用代理 307 暂时重定向 400 错误请求 401 未受权 402 要求付费 403 禁止 404 未找到 405 不容许的方法 406 不被采纳 407 要求代理受权 408 请求超时 409 冲突 410 过时的 411 要求的长度 412 前提不成立 413 请求实例太大 414 请求URI太大 415 不支持的媒体类型 416 没法知足的请求范围 417 失败的预期 500 内部服务器错误 501 未被使用 502 网关错误 503 不可用的服务 504 网关超时 505 HTTP版本未被支持
1.对域名进行dns解析
2.浏览器(socket客户端)根据返回的ip和端口进行向服务器发送请求
3.当服务器接收到请求
1.实现了wsgi协议的模块,如:wsgiref或uwsgi进行数据的接收
2.而后将请求转交给django的中间件(如:process_request)
3.路由系统匹配视图函数
4.视图函数进行业务处理 (orm的数据操做+模板渲染)
5.交给中间件的process_response方法进行传递
6.数据到达wsgi,而后wsgi把数据传递给浏览器,而后断开连接
4.浏览器接收到数据后断开连接
web服务的网关接口,它是一个协议,
实现wsgi协议的经常使用两个模块
wsgiref和uwsgi
实现wsgi的本质实际上是socket服务端
做用:中间件能够对用户的请求和响应进行批量操做
应用场景:
本身玩的:
黑名单
记录日志
实际应用:
权限校验
用户登陆
跨域问题
csrf(校验:django自带的)
相关知识点
1.流程实现原理:列表+翻转列表
2.反射
本质:保存路由与视图的对应关系的地方
模型视图控制器
模型模板和视图
FBV:写函数进行业务逻辑的处理
CBV:写类来进行业务逻辑的处理
本质是他们两个都同样,由于都是对应的是一个函数,cbv返回的就是一个view函数
1.Httpresponse
返回的是一个字符串
2.render
从数据库拿到数据,而后对模板进行渲染,返回的是一个字符串
3.redirect
返回一个响应头,他的location及对应的值就是你要跳转的地方
分析1:多是csrf_token的问题,对post发送的数据进行拦截了
解决方法:在对一个的函数或类加装饰器(目的:不对其进行csrf校验)
from django.views.decorators.csrf import csrf_exempt(不校验),csrf_protect(校验)
分析2:可能传过来的数据格式有问题,如:传过来的数据是json的数据结构
解决办法:1.你能够去request.body中把数据取出来,而后转换成字符串,再经过反序列化获得数据(不推荐)
2.使用django-rest_framework来对数据进行解析(它里面自带着对json数据解析的解析器)