手撸WEB框架
手撸web框架
软件开发的架构
C/S架构: 客户端 / 服务端
B/S架构: 浏览器 / 服务端
bs的本质也是cs
HTTP协议
http是一种超文本传输协议
1.四大特性
- 基于TCP/I P之上作用于应用层
- 基于请求响应
- 无状态 (cookie session token..)
- 无连接 (长连接 websocket ( http 协议的大补丁))
2.数据格式
- 请求格式
- 请求首行(请求方式, 协议版本.)
- 请求头(是一大堆k: v键值对) 注意请求头和请求体之间的空格\r\n
- 请求体(真正的数据,发post请求的时候才有, 如果是get请求)
- 响应格式
- 响应首行
- 响应头 注意响应头和响应体之间的空格
- 响应体
3.响应状态码
-
- 用特定的数字表示一些意思
- 1 xx: 服务端已经成功接收到了你的数据,正在处理, 你可以继续提交其他数据
- 2 xx:服务端成功响应(200请求成功)
- 3 xx:重定向.(例如用户没有登录就让他跳转到登录网页)
- 4 xx:请求错误(404请求资源不存在, 403拒绝访问)
- 5 xx:服务器内部错误(500 比如服务器宕机了)
请求方式
get请求:
- 朝别人要数据
post请求:
- 向别人提交数据(比如: 用户的登录)
url :
- 同一资源定位符
手撸web框架
基于wsgiref模块
- urls.py: 路由与视图函数对象关系
- views.py: 放的是视图函数(就是处理一些业务逻辑)
- templates: 模板文件夹(就是一堆html文件)
HTTP协议
1.纯手撸web框架
- 手动书写socket
- 手动处理http格式数据
2.基于wsgiref模块
- 该模块实现了上面两个手动的过程
- 根据功能的不同拆分成了不同的py文件
- ursl.py: 里面是路由与视图函数的对应关系
- views.py: 放视图函数(函数 , 类)
- 当你拆分完成以后, 如果想要添加功能, 你仅仅只需要在上面的两个地方添加就可以了
3.动态与静态网页
- 静态网页
- 数据是写死的,是不变的
- 动态网页
- 数据是实时获取的
- 例如:
- 后端获取当前的时间展示到前端
- 后端获取数据库中的数据展示到前端
python主流的三大web框架
Django
- 大而全 自带的功能有很多 类似于满级的账号
- 但有的时候会显得过去笨重, 毕竟东西太对了
Flask
- 小而精, 自带的功能特别少 类似于优秀小号
- 但是他的第三方模块特别多, 如果把它的第三方模块加起来的话完全可以超过Django
- 并且它比较依赖于带三方模块,一但模块崩了,它也就凉了,相当于有一帮大佬在带它
Tornado
- 异步非阻塞的特性, 它可以牛逼到开发游戏服务器.(支持高并发啊)
这三者的一个区别
A: socket部分
B:路由与视图函数对应关系
C:模板语法
Django:
- A用的别人的 (比如:wsgiref)
- B自己写的
- C自己写的
Flask:
- A用的别人的 werkzeug(基于wsgiref)
- B自己写的
- C用的别人的 jinja2
Tornado:
- 牛逼三者都是自己写的
注意事项
- 计算机的名称不能是中文的
- 一个pycharm窗口就是一个项目
- 项目名里也尽量不要用中文
Django版本问题
- X 2. X 现在市面用的较多的还是1. X的(推荐使用1.11.9~1.11.13)
Djando安装
- pip3 install django==1.11.11
验证你是否安装成功
- 命令行直接敲Django-admin
简单介绍一个Django项目里的app
- 一个django项目就相当于一所大学,而app就类似于大学里面的学院.
- django其实就是用来写一个个应用的
- 一个app就相当于与一个独立的功能(比如你的用户功能,你的管理功能)
- django支持任意的多个app
如何来使用Django
命令行使用
- 创建django项目: (django-admin startproject mysite)
- 启动django项目:(python manage.py runserver)
- 创建应用app:( python manage.py startapp app01)
注意事项
- 新创建的app需要你去settings配置文件中注册而pycharm只会帮你注册第一个你在创建项目的时候写的应用
- 使用命令行创建Django项目, 不会帮你创建templates文件夹,你只能自己创建
- 在settings文件中, 需要你手动在TEMPLATES里写配置(os.path.join(BASE, 'remplates'))
- 在你启动Django的时候,你一定要确保一个端口只有一个djiango项目
django项目里的对应
项目名
和项目名同名的文件夹
settings.py 暴露给用户的配置文件
urls.py 路由与视图函数对应关系
应用名
migrations 文件夹 存放数据库迁移记录的
admin.py django后台管理
apps.py 注册相关
models.py 模型类
tests.py 测试文件
views.py 存放视图函数
templates 文件夹 存放html文件
manage.py django 入口文件