python - 一键复习知识点
## rest规范:
通过不同的 method 找到对应的 url
## Django 请求生命周期
- wsgi ,它就是socket 服务端,服务端接收用户请求并将请求初次封装,然后交给 Django
- 中间件帮助我们对请求进行校验或在请求对象中添加其他相关数据,如:csrf,request.session
- 路由匹配
- 视图函数中进行业务逻辑的处理,可能涉及到 orm,templates ->渲染
- 中间件对响应的数据进行处理,
- wsgi,将响应的内容发送给浏览器
## CBV 和 FBV
CBV 通过函数调用方法
FBV 通过类调用方法
其本质上都是 CBV
但是 FBV 内部封装了关于 method 的方法,由于基本上都是前端的请求,所有像GET,POST等方法用的频繁,
而CBV将这些方法封装了起来,使得开发时更便捷了许多,所以CBV更适合写接口
###### 标准的 ######
2.1 FBV方式请求的过程
用户发送url请求,Django会依次遍历路由映射表中的所有记录,一旦路由映射表其中的一条匹配成功了,
就执行视图函数中对应的函数名,这是fbv的执行流程
2.2 FBV方式请求的过程
当服务端使用CBV模式的时候,用户发给服务端的请求包含url和method,这两个信息都是字符串类型
服务端通过路由映射表匹配成功后会自动去找dispatch方法,然后Django会通过dispatch反射的方式找到类中对应的方法并执行
类中的方法执行完毕之后,会把客户端想要的数据返回给dispatch方法,由dispatch方法把数据返回经客户端
## HTTP 协议
什么是 HTTP协议?
"""
HTTP 协议是 超文本传输的协议,是一种规范。
HTTP优点:
1. HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type加以标记
2. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
3.由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
4. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。
HTTP缺点:
安全性低,数据都是以明文方式传输的。
"""
HTTP协议是一种传输数据格式
自己模拟过一次 客户端与服务端的 socket 连接,
当客户端请求数据的是时候,会携带请求头与请求体,
请求头常见类型:Content-Type,User-Agent,cookie,Accept,Host等
请求体常见类型:application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml
而服务器需要根据指定的请求头来解析数据,
一次请求响应后,则断开连接
常见请求体:
Form 表单提交
Ajax 请求
Django 获取请求体:
- request.POST
- request.body
## 跨域
由于浏览器的同源策略 -- 当浏览器的url发送一个请求,请求回来的时候url,端口等不一致而导致跨域
协议,域名,端口一致则称为同源
解决方法: 绕过同源策略
-- jsonp
动态创建 script 标签
同源策略会阻止ajax请求,但不会阻止具有 src 属性的标签 :
<script src=''></script>
-- cors
在第一次发送请求的时候,会有一个校验的过程 - opption(请求) 如果校验成功,则发送真实数据
服务端 设置响应头
response['Access-Control-Allow-Origin'] = "*"
## 中间件
- 中间件 五个方法
- 应用场景:
- 登陆认证,不需要在每个函数中添加装饰器
- 权限,当用户登陆的时候获取当前用户所有权限并放入session,当访问其他页面时,
将当前url和session中进行匹配如有就通过,没有就禁止访问
- 跨域,
jsonp,
cors
python - 一键复习知识点的更多相关文章
- python遇到的知识点
python遇到的知识点,记录一下.方便学习. 文件相关操作 查了资料,关于open()的mode参数: 'r':读 'w':写 'a':追加 'r+' == r+w(可读可写,文件若不存在就报错(I ...
- Python并发复习1 - 多线程
一.基本概念 程序: 指令集,静态, 进程: 当程序运行时,会创建进程,是操作系统资源分配的基本单位 线程: 进程的基本执行单元,每个进程至少包含一个线程,是任务调度和执行的基本单位 > 进程和 ...
- Python数据分析--Pandas知识点(三)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) Python数据分析--Pandas知识点(二) 下面将是在知识点一, ...
- Python数据分析--Pandas知识点(二)
本文主要是总结学习pandas过程中用到的函数和方法, 在此记录, 防止遗忘. Python数据分析--Pandas知识点(一) 下面将是在知识点一的基础上继续总结. 13. 简单计算 新建一个数据表 ...
- python一键电影搜索与下载
代码地址如下:http://www.demodashi.com/demo/14313.html python一键电影搜索与下载 概述 使用python搜索并爬取豆瓣电影信息,包括评分,主演,导演,类型 ...
- 用Python一键搭建Http服务器的方法
用Python一键搭建Http服务器的方法 Python3请看 python -m http.server 8000 & Python2请看 python -m SimpleHTTPServe ...
- Python 五个知识点搞定作用域
Python 五个知识点搞定作用域 1.块级作用域 想想此时运行下面的程序会有输出吗?执行会成功吗? #块级作用域 if 1 == 1: name = "lzl" print(na ...
- Python一键转Jar包,Java调用Python新姿势!
粉丝朋友们,不知道大家看故事看腻了没(要是没腻可一定留言告诉我^_^),今天这篇文章换换口味,正经的来写写技术文.言归正传,咱们开始吧! 本文结构: 需求背景 进击的Python Java和Pytho ...
- JavaEE期末复习知识点总结
JavaEE期末复习知识点总结 Java企业应用开发环境 Maven的基础概念 Maven是一个项目管理工具,可以对 Java 项目进行构建.依赖管理 Maven仓库 Maven 仓库是项目中依赖的第 ...
随机推荐
- windows10 ubuntu子系统运行docker出现的问题
前一篇笔记记录了安装的过程及错误处理办法,但是在正式使用docker时,却又出现新的问题: “docker: Cannot connect to the Docker daemon at unix:/ ...
- Charles手机代理设置
Charles工具 手机 方法/步骤 1.打开Charles 点击Proxy,选择proxy settings,输入端口8888 打开电脑,在cmd中输入ipconfig,查看本地 ...
- Spring全家桶注解一览(精选)
废话 最近想整理一波Spring注解相关的文章,虽然写CURD就只涉及到那些常用的注解.但是笔者我也想去了解一下其他注解,丰富下自己的知识面(提升一下逼格!). 就想在网上搜了半天,好像大家的都差不多 ...
- 【LEETCODE】44、509. Fibonacci Number
package y2019.Algorithm.array; /** * @ProjectName: cutter-point * @Package: y2019.Algorithm.array * ...
- Typora语法使用说明
目录 文本 标题 超链接 锚点 列表 引用 插入图片 脚注 代码 LaTex公式 插入表情 任务列表 高亮 注脚 文本 代码: *斜体* **粗体** ***斜体加粗体*** ~~删除线~~ < ...
- UOJ185 ZJOI2016 小星星 容斥、树形DP
传送门 先考虑一个暴力的DP:设\(f_{i,j,S}\)表示点\(i\)映射到了图中的点\(j\),且点\(i\)所在子树的所有点映射到了图中的集合\(S\)时的映射方案数,转移暴力地枚举子集即可, ...
- Future Failure CodeForces - 838C (博弈论,子集卷积)
大意: 两人轮流操作一个长$n$, 只含前$k$种小写字母的串, 每次操作删除一个字符或者将整个串重排, 每次操作后得到的串不能和之前出现过的串相同, 求多少种串能使先手必胜. 找下规律发现$n$为奇 ...
- navicat 连接 mysql 提示Client does not support authentication protocol requested by server错误
安装完mysql后,命令行登录没问题,但是用Navicat连接出现提示性错误.Mysql版本为:8.0.15 命令如下: 1.use mysql; 2.alter user 'root'@'local ...
- Java 处理异常
Java中 ,catch块和 finally块中都有可能发生异常,这时候就需要 用throw 抛出异常 类似于 C#里方法体中的 throw:
- 记一次在 Get 请求参数为 Null 值的折腾
先说主要原因,是因为一个 NgZerro 的 Select 组件,需要显示 placeHolder 文字,初始值为 null,然后直接绑定到查询参数中,传输到后端导致 BadRequest,参数解析失 ...