HTTP协议、手撸web框架
目录
一、软件开发架构
C/S架构:Client:客户端、Server:服务端
B/S架构: Browser: 浏览器端、 Server:服务端
ps: B/S本质也是C/S
二、HTTP协议
HTTP协议:超文本传输协议
四大特性
- 基于TCP/IP之上作用于应用层
- 基于请求响应
- 无状态 cookie session token...
- 无连接 长连接 websocket(HTTP协议的大补丁)
数据格式
1.请求格式
- 请求首行(请求方式,协议版本)
- 请求头(一大堆k:v键值对)
- /r/n
- 请求体(真正的数据 发post请求的时候才有 如果是get请求不会有)
2.响应格式
- 响应首行
- 响应头
- /r/n
- 响应体
响应状态码
用特定的数字表示一些意思:
- 1XX:服务端已经成功接收到了你的数据,正在处理,你可以继续提交其他数据
- 2XX:服务端成功响应(200请求成功)
- 3XX:重定向(301, 302)
- 4XX:请求错误(404请求资源不存在, 403 拒绝访问)
- 5XX:服务器内部错误(500)
三、请求方式
get请求:向服务端要数据
post请求:向服务端提交数据(eg:用户登陆)
(url:统一资源定位符)
四、纯手撸web框架
1.纯手撸web框架:
- 手动书写socket
- 手动处理http格式数据
2.基于wsgiref模块:
- 该模块实现了上面两个手动的过程
- 根据功能不同拆分了不同的py文件
- urls.py 只放路由与视图函数对应关系
- view.py 放视图函数(函数,类)
- 拆分完成之后 如果想要添加功能,你仅仅只需要在上面两个地方动手脚就可以了
3.动静态网页:
- 静态网页:数据是前端写死的。
- 动态网页:数据是实时获取的(eg:后端获取数据库中的数据展示到前端)。
4.jinja2模块实现模板的渲染。
五、Python三大主流web框架
1、Django:
- 优点:大而全,自带的功能特别特别多,类似于航空母舰
- 缺点:有时候过于笨重
2、Flask:
- 优点:小而精,自带的功能特别特别少,类似于游骑兵,但是第三方的模块特别多
- 缺点:过于依赖第三方模块
3、Tornado:
- 异步非阻塞
- 牛逼到可以开发游戏服务器
A:socket部分
B:路由与视图函数对应关系
C:模板语法
Django:
A用的别人的(wsgiref),B和C都是自己写的
Flask:
A用的别人的 werkzeug(基于wsgiref), C用的别人的(jinja2), B自己写的
Tornado:
三个都是自己写的
六、Django目录简介
项目名
跟项目名同名的文件夹
settings.py 暴露给用户的配置文件
urls.py 路由与视图函数对应关系
应用名(app)
migrations文件夹 存放数据库迁移记录的
admin.py Django后台管理
apps.py 注册相关
models.py 模型类
tests.py 测试文件
views.py 存放视图函数
templates文件夹 存放html文件
manage.py Django入口文件