HTTP协议、手撸web框架
时间:2019-10-18
本文章向大家介绍HTTP协议、手撸web框架,主要包括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入口文件
原文地址:https://www.cnblogs.com/17vv/p/11700412.html
- 微信小程序获取用户信息签名解密C#
- Docker的核心概念,镜像操作
- RabbitMQ的基本使用到高级特性
- RabbitMQ的应用场景以及基本原理介绍
- JournalNode的edits目录没有格式化异常分析
- 聊一聊Javasript继承
- Git基础命令使用(个人总结)
- Centos搭建Docker环境
- Consul Config 使用Git做版本控制的实现
- 让XP支持4G内存
- Consul微服务的配置中心体验篇
- 如何使用Sentry实现Hive/Impala的数据脱敏
- 如何使用Oozie API接口向Kerberos环境的CDH集群提交Shell作业
- Docker下redis的主从、持久化配置
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于Python循环,看这一篇就够了
- Python新手常见错误汇总|附代码检查清单
- 入门快速安装ElasticSearch
- Kubernetes强制删除Terminating的ns
- 如何使用慢查询快速定位执行慢的 SQL?
- 前端路由实现原理
- 模拟虚拟dom生成实际dom
- Promise教程之产房里生孩子的故事
- 一个现实生活中的例子让你理解Promise的使用场景
- react 跨级组件传参方式 context方式的传参
- Excel文件导入导出操作
- nprogress路由切换添加进度条
- vue-json-excel导出excle表格
- Dom树 CSS树 渲染树(render树) 规则、原理
- Canvas圆形时钟