Django补充

发布时间 2023-11-27 16:50:39作者: 拆尼斯、帕丁顿

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