初始Django
首先要知道Django是一种框架,但是框架又是什么呢?
简单来说,框架的本质就是一系列功能集合体,然后可以把不同的功能放在不同的文件中,有了框架以后,就可以让我们写项目整个的周期大幅度的缩短,效率表的极大的提高,一个成熟合适的框架更是可以实现很多我们无法实现的功能
软件开发架构简介
c/s 客户端 服务端
b/s 浏览器 服务端
bs本质也是cs
HTTP协议
超文本传输协议.
应用层协议,为了实现某一类具体应用的协议,并且由某一运行在用户空间的应用程序去实现功能,基于c/s架构进行通信的.
规定浏览器和服务端之间消息传输的数据格式
HTTP事务处理过程
基于客户.服务器模式,而且面向连接的,
- 客户与服务器建立连接;
- 又向它提出请求
- 服务器接收请求,根据请求返回响应文件作为应答;
- 客户与服务器关闭连接
web(互联网)服务本质.
也就是当你在浏览器输入网址回车发生那些事?
1.浏览器向服务端发送请求
2.服务端接受请求
3.服务端返回相应响应
4.浏览器接受相应 根据规则 渲染页面展示给用户看
HTTP协议的四个特性
- 基于请求响应
- 基于TCP/IP之上,作用于应用层
- 无状态, (服务端没法保存用户的状态,)cookie session token...
- 无连接 (请求一次,我就响应一次,然后立即拔吊无情,从此毫无瓜葛)
websocket(互联网套接字) 相当于是HTTP协议的一个大的补丁,支持长连接
数据格式
有两个,请求和响应,主要就是请求和响应.两者对应一样
请求数据格式:
-
请求首行(为了标识HTTP协议的版本,当前请求方式)
-
请求头(一大堆K,V键值对,)
accept:浏览器通过这个头告诉服务器,它所支持的数据类型
Accept-Charset: 浏览器通过这个头告诉服务器,它支持哪种字符集
Accept-Encoding:浏览器通过这个头告诉服务器,支持的压缩格式
Accept-Language:浏览器通过这个头告诉服务器,它的语言环境
Host:浏览器通过这个头告诉服务器,想访问哪台主机
If-Modified-Since: 浏览器通过这个头告诉服务器,缓存数据的时间
Referer:浏览器通过这个头告诉服务器,客户机是哪个页面来的 防盗链
Connection:浏览器通过这个头告诉服务器,请求完后是断开链接还是何持链接 -
/r/n(换行)
-
请求体(真正的数据,post请求才会有 而且是key:value形式,get不会)
请求首行
b'GET /index HTTP/1.1
请求头
Host: 127.0.0.1:8080
Connection: keep-alive
Cache-Control: max-age=0
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Sec-Fetch-Site: none
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
请求体
User-Agent :User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。
Accept:客户端可是别的内容类型列表
Host:主机地址
响应格式:
- 响应首行(http版本 + 状态码 + 状态代码的文本描述)
- 响应头(包含服务器类型,日期,长度,内容类型)
- 响应体 服务器返回的HTML页面或者json数据
响应状态码
用特定的数字表示一些意思
'''
1XX:服务端已经成功接收到你的数据,正在处理,你可以继续提交其他数据
2XX Success(成功状态码):
200 服务端成功响应客户端发来的消息
204 表示服务端接收的请求已经被成功处理,但是在返回的响应报文中不含实体的主体部分
3XX Redirection(重定向状态码):
301 永久性重定向
302 临时性重定向
4XX Client Error(客户端错误状态码)
400 表示请求报文中存在语法错误
401 表示发送的请求需要有通过HTTP认证的认证信息
403 表示对请求资源的访问被服务器拒绝了
404 服务器上无法找到请求的资源,是我们最常见的报错
5XX Server Error(服务器内部错误状态码)
500 表示服务端在执行请求的时候发生了错误
503 表示服务器暂时处于超负载或者正在进行停机维护,无法处理请求
'''
请求方式
get,post请求,(从字面理解,一个是要数据,一个是提交数据(eg:用户的登录))
url www统一资源定位标志,网络地址
纯手撸web框架
import socket
server = socket.socket()
server.bind(('127.0.0.1', 8080))
server.listen(5)
while True:
conn,addr = server.accept()
data = conn.recv(1024)
# print(data)
conn.send(b'HTTP/1.1 200 OK
')
data = data.decode('utf8')
current_path = data.split('
')[0].split(' ')[1]
# print(current_path)
if current_path == '/index':
with open(r"test.html", 'rb')as f:
conn.send(f.read())
elif current_path == '/login':
conn.send(b'login')
else:
conn.send(b'404 error')
conn.close()
手撸过于麻烦,还好我们的python是调包侠