django学习1:web框架的内部原理——http请求的生命周期

内容摘要

1. 自己开发web框架

(1)tcpip、socket、http

	 tcpip是协议,是约定好的规范,位于网络5层模型的传输层。tcpip表示的是一系列协议。
    规定好的协议总要操作系统实现了才能使用,而socket就是操作系统实现的,tcpip协议族的接口,用于创建一个套接字,可以理解为,通过网络读写的文件描述符,socket、bind、listen、accept、connect一系列都是操作系统提供的接口用于实现tcp协议相关的功能。
  tcp协议可以让两个进程通过三次握手建立稳定的通信信道,发送字节流,而http协议建立在tcp协议之上,也就是说tcp协议可以让两个程序说话,而http协议定义了说话的规则。
  
总结:http连接=以http协议为通信协议的tcp连接http短连接=以http协议为通信协议的,请求一次就断开的tcp连接http长连接=以http协议为通信协议的,请求多次才断开的tcp连接(这个是为了通过减少建立tcp连接的次数达到节省两端资源的目的)

(2) socket通讯实践

服务端:
1、创建socket对象
2、bing 绑定ip及端口
3、对该端口进行监听
4、消息阻塞(等待客户端消息)

客户端:
1、创建socket对象
2、连接服务ip及端口
3、发送消息到服务器ip

python 的socket通信,要使用socket内置包:
服务端代码:

#*_*coding:utf-8*_*

import socket

addr_ip = ('127.0.0.1',8005)
sk = socket.socket()
sk.bind(addr_ip)
sk.listen(5)
print('Service waiting.....')
conn,addr = sk.accept()
while True:

    client_msg =conn.recv(1024)
    print(str(client_msg))
    send_msg = raw_input('发送消息:')
    if send_msg !='exit':
        conn.sendall('服务小强:'+send_msg)
    else:
        break


conn.close()

客户端代码:

#*_*coding:utf-8*_*
import socket

addr_ip = ('127.0.0.1',8005)
sk = socket.socket()
sk.connect(addr_ip)

while True:

    send_msg = raw_input('发送消息:')
    if send_msg!='exit':
        sk.sendall('客户小强:'+send_msg)
        server_rev = sk.recv(1024)
        print(str(server_rev))
    else:
        break
sk.close()

或者客户端使用浏览器代替。只需要编写服务端代码。

(2) HTML知识

如果用http请求的话,可以看到socket给回复的http请求是有固定格式的,叫http格式,分为head和body。
请求有请求头和请求体,如下所示:

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, br
Accept-Language: zh-CN,zh;q=0.9
Connection: keep-alive
Cookie: BAIDUID=DDD39E6ED8BF5EC7AA901AEE453F3DCA:FG=1; PSTM=1626776433; BIDUPSID=B1CCC86FDCF9A94035AE6286A7AF3496; COOKIE_SESSION=113_0_1_2_13_1_0_0_1_1_0_0_92_0_10_0_1626777030_0_1626777020%7C2%230_0_1626777020%7C1; __yjs_duid=1_055e63905e8f03baae63733c7fb9b7a61626777591872; BAIDUID_BFESS=8AC53B89312FB662003EC68D19BE9505:FG=1
Host: www.baidu.com
sec-ch-ua: " Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"
sec-ch-ua-mobile: ?0
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.164 Safari/537.36

响应也有响应头和响应体:
其中响应头如下:
响应体则为html显示的内容,本质为字符串。是浏览器认识字符串的格式,所以翻译成了浏览器显示的样子。
响应头和响应体之间用\r\n\r\n分割

accept-ranges: bytes
access-control-allow-origin: *
age: 162355
content-length: 7456
content-type: image/webp
date: Fri, 10 Sep 2021 03:08:48 GMT
etag: 9aa9cc8baa06417d516126122dae4b19
expires: Wed, 06 Oct 2021 11:48:31 GMT
last-modified: Thu, 01 Jan 1970 00:00:00 GMT
ohc-cache-hit: tj3un64 [4], czix227 [4]
ohc-file-size: 7456
server: JSP3/2.0.14
timing-allow-origin: *

(3)数据库(pymysql、SQLAlchemy)

2. Django框架

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值