djanog总结
目录
1.简述http协议
超文本传输协议
特点:
无状态:第一次请求完毕,发起第二次请求,第二次请求还是如第一次请求一样,他不会记忆你是否访问过
短链接:一次请求一次响应,然后就断开链接
格式:
请求头和请求体
请求头首行的格式是 请求方式 请求地址 http协议版本 ,(除了首行)使用\r\n分隔,和请求体需要使用2个\r\n来分隔
响应头和响应体
GET和POST的请求头又不一样:GET只有请求头,而POST有请求头和请求体
2.你了解的请求头和响应头有哪些?
请求头:
User-Agent:访问设备的信息
Host:访问的服务器地址
referer:做防盗链的
Content-Type:
响应头:
3.你了解的请求方式和状态码有哪些
请求方式
状态码(常见的)
详细参考:
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版本未被支持
4.django请求的生命周期 / 当在浏览器上输入了一个网址,并敲下回车他中间发生了什么?
1.对域名进行dns解析
2.浏览器(socket客户端)根据返回的ip和端口进行向服务器发送请求
3.当服务器接收到请求
1.实现了wsgi协议的模块,如:wsgiref或uwsgi进行数据的接收
2.然后将请求转交给django的中间件(如:process_request)
3.路由系统匹配视图函数
4.视图函数进行业务处理 (orm的数据操作+模板渲染)
5.交给中间件的process_response方法进行传递
6.数据到达wsgi,然后wsgi把数据传递给浏览器,然后断开链接
4.浏览器接收到数据后断开链接
5.什么是wsgi?
web服务的网关接口,它是一个协议,
实现wsgi协议的常用两个模块
wsgiref和uwsgi
实现wsgi的本质其实是socket服务端
6.django中间件的作用?应用场景?
作用:中间件可以对用户的请求和响应进行批量操作
应用场景:
自己玩的:
黑名单
记录日志
实际应用:
权限校验
用户登录
跨域问题
csrf(校验:django自带的)
相关知识点
1.流程实现原理:列表+翻转列表
2.反射
7.路由系统
本质:保存路由与视图的对应关系的地方
8.什么是MVC,MTV?
MVC:model view controller
模型视图控制器
MTV :model template view
模型模板和视图
9.FBV和CBV
FBV:写函数进行业务逻辑的处理
CBV:写类来进行业务逻辑的处理
本质是他们两个都一样,因为都是对应的是一个函数,cbv返回的就是一个view函数
10.视图函数的返回值?
1.Httpresponse
返回的是一个字符串
2.render
从数据库拿到数据,然后对模板进行渲染,返回的是一个字符串
3.redirect
返回一个响应头,他的location及对应的值就是你要跳转的地方
问题
1.现象:两个系统之间进行相互数据传输,系统1向系统2发送POST请求,但系统2的request.POST中没有获取到数据,可能是因为什么?
分析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数据解析的解析器)