Django的补充及弥缺
WEB应用
分为CS 与 BS 架构
MySQL其实也是C/S 架构 C和S装在同一机器上
C/S连接 在cmd窗口中 mysql -h 127.0.0.1 (写那个人的地址) -p 3306 -u root -p password
我们可以通过一个人的电脑 访问到另一个人的电脑 但可能报错 原因是:(MySQL不允许远程连接,只允许本地连接)
网络协议: 一般情况都是软件自定制协议--- 基本都是基于TCP
如果不是HTTP协议 识别不了
----------------------------------------
B/S 架构 浏览器 --服务端
B/s本质就是C/s
而B/S 区别于 C/S更新 需要客户自主更新 ----
B/S更新 只需要 后端更新 --前端是浏览器 ,不需要变
B/S架构软件开发 ---开发S端
使用 socket 写一个 S端 --浏览器就可以访问
import socket
def server_run():
soc = socket.socket()
soc.bind(('127.0.0.1', 8008))
# 如果监听的0.0.0.0 所有人都可访问 但此时只可以本机访问
soc.listen(5)
while True:
conn, addr = soc.accept()
recv_data = conn.recv(1024)
print(recv_data)
# 1 直接在send里写,发送给客户端 http响应的格式
# conn.send(b'HTTP/1.1 200 OK\r\n\r\n<h1>hello web</h1><img src="https://img2.woyaogexing.com/2022/12/24/a22973058eab2aafa11248a8b6031f5e.jpg"></img>')
#2 打开一个html文件,发送给客户端
# with open('index.html','r',encoding='utf-8') as f:
# data=f.read()
# conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
# 3 动态网页,字符串替换
动态时间在html中 加@@
import time
now=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
print(now)
with open('index.html','r',encoding='utf-8') as f:
data=f.read()
data=data.replace('@@',now)
conn.send(('HTTP/1.1 200 OK\r\n\r\n%s'%data).encode('utf-8'))
conn.close()
if __name__ == '__main__':
server_run()
-----------------------------------------------------------------------
HTTP协议
——是什么?
HTTP协议 Hyper Text Transfer protocol (超文本传输协议)
——什么作用?
服务器与本地浏览器之间传输超文本(数据)时要遵守的传送协议
——特点是什么?
①
基于TCP协议之上的 [ 应用层 ] 协议 --是可靠传输
②
基于请求---响应模式 : 必须客户端主动发起;服务端才会响应
如果实时跟服务端通信 每隔几S发送一次请求 不断地发送(轮询)实现实时聊天
web版微信
--实时通信 使用轮询, webscoket 协议
③
无状态保存
发送多次请求,对于服务端来讲,都是新的
cookie,session做会话保持
④
无连接 客户端不会一直跟服务端链接
基于 TCP 有链接
——http请求协议 与响应协议
请求协议
请求首行 -- 请求方式 --请求地址 --请求协议版本号 1.1 \r\n
请求头: key -value形式 \r\n做区分 \r\n\r\n
请求体 : get请求一般没有请求体,post请求有请求体
# 请求首行
GET / HTTP/1.1\r\n
# 请求头
Host: 127.0.0.1:8008\r\n
Connection: keep-alive\r\n
sec-ch-ua: "Google Chrome";v="119", "Chromium";v="119", "Not?A_Brand";v="24"\r\nsec-ch-ua-mobile: ?0\r\nsec-ch-ua-platform: "Windows"\r\n
Upgrade-Insecure-Requests: 1\r\n
csrftoken=0Eq1YnctKcjVroVgrU0MtwZ7hTMsEAkUUqf9nSyKBJsOtowSZbO4Cb99eCk4y0LH\r\n\r\n
#请求体
响应协议
响应首行 : HTTP/1.1 200 OK \r\n ----协议版本 ---响应状态码--响应描述符
响应头:
响应体: 一般给个html标签
浏览器中看到的页面,都是响应体的内容
HTTP有哪些主要版本,版本区别是什么?
HTTP/0.9:最初版本的HTTP协议,只支持GET方法,并且没有请求头和响应头的概念,只能传输纯文本。于1991年发布,由Tim Berners-Lee创建,被认为是HTTP的起源。该版本只支持GET请求,并且响应只能是HTML文本。
HTTP/1.0:在HTTP/0.9的基础上增加了请求头和响应头的概念,并支持多种HTTP方法,包括GET、POST、PUT、DELETE等。在2000年左右被广泛使用。
HTTP/1.1:在HTTP/1.0的基础上进行了扩展和优化,包括持久连接、管线化、分块传输编码等特性,可以更高效地传输数据。目前仍然是主流。
HTTP/2:在HTTP/1.1的基础上进行了进一步的优化,包括二进制协议、多路复用、服务器推送等特性,能够更快地传输数据。
HTTP/3:是HTTP协议的最新版本,基于QUIC协议进行了重构,具有更快的传输速度、更低的延迟和更好的安全性。HTTP/3于2020年发布,采用基于UDP的QUIC协议,该版本目前正在逐渐被广泛采用。
常用请求头有哪些:
常用响应头有哪些:
有哪些常用响应状态码:
自己的ip地址查询:cmd+R: ipconfid
可以连接到他人的MySQL需要
1.关闭防火墙
2.知道其 ip
3.链接: MySQL 或者navicate链接
保证而你的Django 他人也能访问
需要在 设置文件 setting.py 中
ALLOWED_HDSTS =[ "*"]
注:监听的地址 不能是 127.0.0.1