第一章 Django基础与虚拟环境

随笔2个月前发布 也许
5 0 0

1.Web框架和Django框架

1.1网络通信

第一章 Django基础与虚拟环境
注意:局域网

第一章 Django基础与虚拟环境
个人一般写程序,想要让别人访问:阿里云、腾讯云。

去云平台租服务器(含公网IP)
程序放在云服务器

第一章 Django基础与虚拟环境

让网络中可以互相通信的双发收发数据。

服务端【我的电脑】

import socket

# 1.监听本机的IP和端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR,1)
socket.bind(('127.0.0.1',8080))

# 2.让多少人等待
sock.listen(5)

# 3.循环接受客户端发来的请求连接
while True:
  # 4.等待连接请求的申请,有人来连接(阻塞)
  conn, addr = sock.accept()

  # 5.连接成功后立即发送
  conn.sendall("欢迎使用xxx系统".encode("utf-8"))

  # 6.断开连接 
  conn.close()

# 7.停止服务端程序
sock.close()

客户端【其他人的电脑】

import socket

# 1.向指定IP发送连接请求
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
client = connect(('127.0.0.1',8080))

# 2.接受你发的消息
message = client.recv(1024)
print(message.decode("utf-8"))

# 3.断开连接
client.close()


我们自己写时,通过socket模块可以实现网络上的两端进行通信

1.2 常见软件架构

bs架构

浏览器:充当客户端
服务器:网站

cs架构,开发应用程序,例如:QQ、Pycharm、网易云音乐(安装在电脑上的软件)

客户端:安装在电脑上的软件。 网易云音乐
服务端:网易服务器

对于程序原来说:

网站,只需要写服务端程序。

基于django开发的本质就是网站(web应用)
电脑上浏览器本质上是socket实现网络通信。

软件,客户端 + 服务端。

1.3 手撸web框架

快速自己写以为网站(不能用django、flask等)。

import socket

# 1.监听本机的IP和端口
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('192.168.0.6', 9000))  # 我自己的电脑IP,端口8001

# 2.让多少人等待
sock.listen(5)

while True:
    # 3.等待连接请求的申请,有人来连接(阻塞) -> 登录浏览器来连接我
    conn, addr = sock.accept()

    # 4.收到浏览器发送的消息
    buf = conn.recv(2048)
    print(buf)

    # 5.给浏览器返回数据
    conn.send(b"HTTP/1.1 200 OK

")
    conn.send(b"Hello, World")

    # 6.断开连接
    conn.close()

# 6.停止服务端程序
sock.close()

再引出一个知识点,浏览器再与服务端的网站进行通信时,多了几个规则。

服务端:网站

客户端:浏览器

创建连接

发送数据,固定格式

# 请求头首行
GET /xxx/xxx/?name=xxx&age=111 HTTP/1.1


# 请求头
Host: 192.168.0.6:9000

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7

'
# 请求头首行
POST /xxx/xxx/ HTTP/1.1


# 请求头
Host: 192.168.0.6:9000

Connection: keep-alive

Upgrade-Insecure-Requests: 1

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

Accept-Encoding: gzip, deflate

Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,zh-TW;q=0.7


# 请求体
username=wupeiqi&password=123
浏览器本质上发送请求时,包含请求头和请求体。
- GET请求
	- 只有请求头 + 没有请求体
	- 请求头之间用 

	- 请求头和请求体之间用 


	
- POST请求
	- 只有请求头 + 有请求体
	- 请求头之间用 

	- 请求头和请求体之间用 


一次请求和一次响应后,断开连接。

告诉你两个关键点:

http协议?

http协议特点:无状态的短连接。
http的应用:浏览器向服务端发送请求,就是按照http协议来的。
	- 请求头+请求体 ;请求头和请求体之间用 

 ;请求头之间用 

	- 一次请求和一次响应后,断开连接。  -> 短连接。  ->无状态如何体现?
	- 后期记住 请求头+cookie

GET请求和POST到底有什么区别?

get请求他请求的东西在网站的访问网址里面,一般?后面的东西
post请求的东西一般装的是密码,放在request进行加密,让程序员看到,别人看不到

2.web框架

常见的web框架:django、flask、tornado、sanic、fastapi..

第一章 Django基础与虚拟环境

web应用程序:

用户网络通信的socket
web框架
业务开发

以django为例:

wsgiref模块、uwsgi、daphne -> 本质上都是socket实现。
原来实现了框架

以flask为例:

werkzurg、uwsgi、…
flask框架

以tornado为例:

tornado、werkzurg、uwsgi、…
框架

2.1 wsgiref

from wsgiref.simple_server import make_server


def run_server(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/html')])
    return [bytes('<h1>Hello, web!</h1>', encoding='utf-8'), ]


if __name__ == '__main__':
    httpd = make_server('127.0.0.1', 8000, run_server)
    httpd.serve_forever()

2.2 werkzeug

pip install werkzeug
from werkzeug.wrappers import Response


def application(environ, start_response):
    response = Response('Hello World!', mimetype='text/plain')
    return response(environ, start_response)


if __name__ == '__main__':
    from werkzeug.serving import run_simple

    run_simple('localhost', 4000, application)

第一章 Django基础与虚拟环境

2.3 各框架的区别

django、flask、tornado、sanic、fastapi..

内部集成功能的多少

django,内部提供了很多组件。 【相对大】
flask、tornado、sanic、fastapi… 本身自己功能很少+第三方组件。【相对小】

同步框架 vs 异步非阻塞

异步非阻塞:tornado、sanic、fastapi、django

同步:django、flask、bottle、webpy..

1.django、flask
2.tornado,异步非阻塞,特别NB。
	- 同步:常见应用。
	- 异步:IO应用 + conroutine装饰器 + redis/MySQL/...
3.sanic,路飞小猿圈平台
4.fastapi
	- 参考flask
	- py最新注解
	- restfulAPI
	- 异步
	
目前不看好:
	- 增加编程的难度,功能&效率
	- 项目中不会有那么IO操作 ---> 100功能/2-IO ---> celery

感受不深刻,只是听我讲完了,鬼吹这么NB东西到底是怎么实现的?

socket & 多线程 & 多进程
IO多路复用
顿悟

https://www.cnblogs.com/wupeiqi/p/6536518.html
© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...