django基础 -- 1. 前奏 web框架的本质
一. http协议
1.请求方法(get和post)
1.GET提交的数据会放在URL之后,也就是请求行里面,以?分割URL和传输数据,参数之间以&相连,如EditBook?name=test1&id=123456.(请求头里面那个content-type做的这种参数形式,后面讲) 2.POST方法是把提交的数据放在HTTP包的请求体中.GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
2.请求协议(格式)
3.响应协议(格式)
4.状态码
二.简单的web框架
1.最简单的(所需文件放在响应目录下)
import socket server = socket.socket() server.bind(('127.0.0.1',8080)) server.listen()while 1:conn, addr = server.accept()from_b_msg = conn.recv(1024).decode('utf-8')# print(from_b_msg) #客户端的请求内容# 获得请求文件path = from_b_msg.split('\r\n')[0].split(' ')[1]print(path)conn.send(b'HTTP/1.1 200 ok\r\n\r\n')# conn.send(b'<h1>hello</h1>') #发送需要的文件if path == '/':with open('test.html', 'rb') as f:data = f.read()conn.send(data)conn.close()elif path == '/test.css':with open('test.css','rb') as f:data = f.read()conn.send(data)conn.close()elif path == '/timg.jpg':with open('timg.jpg', 'rb') as f:data = f.read()conn.send(data)conn.close()elif path == '/test.js':with open('test.js', 'rb') as f:data = f.read()conn.send(data)conn.close()elif path == '/meinv.ico':with open('meinv.ico', 'rb') as f:data = f.read()conn.send(data)conn.close()
2.多线程框架(所需文件放在响应目录下)
from threading import Thread import socket server = socket.socket() # server.bind(('192.168.12.45',8080)) server.bind(('127.0.0.1',8080)) server.listen()def html(conn):with open('test.html', 'rb') as f:data = f.read()conn.send(data)conn.close() def js(conn):with open('test.js', 'rb') as f:data = f.read()conn.send(data)conn.close() def css(conn):with open('test.css', 'rb') as f:data = f.read()conn.send(data)conn.close() def img(conn):with open('timg.jpg', 'rb') as f:data = f.read()conn.send(data)conn.close() def ico(conn):with open('meinv.ico', 'rb') as f:data = f.read()conn.send(data)conn.close() urlpatterns=[('/',html),('/test.css',css),('/timg.jpg',img),('/test.js',js),('/meinv.ico',ico), ] while 1:conn, addr = server.accept()from_b_msg = conn.recv(1024).decode('utf-8')print(from_b_msg)path = from_b_msg.split('\r\n')[0].split(' ')[1]# print(path)conn.send(b'HTTP/1.1 200 ok\r\nk1:v1\r\n\r\n')# conn.send(b'<h1>hello</h1>')for url_func in urlpatterns:if url_func[0] == path:#多线程函数版t = Thread(target=url_func[1],args=(conn,))t.start()# 简单函数版# url_func[1](conn)
3.多个页面切换和动态效果(所需文件放在响应目录下)
①python文件
from threading import Thread import socket server = socket.socket() # server.bind(('192.168.12.45',8080)) server.bind(('127.0.0.1',8080)) server.listen()import datetime def base(conn):with open('base.html','r',encoding='utf-8') as f:data = f.read()t1 = datetime.datetime.now()new_data = data.replace('@xx@',str(t1))conn.send(new_data.encode('utf-8')) def index(conn):with open('index.html', 'rb') as f:data = f.read()conn.send(data) def home(conn):with open('home.html', 'rb') as f:data = f.read()conn.send(data) def articles(conn):with open('art.html', 'rb') as f:data = f.read()conn.send(data) urlpatterns=[('/',base),('/index',index),('/home',home),('/articles',articles), ]while 1:conn, addr = server.accept()from_b_msg = conn.recv(1024).decode('utf-8')print(from_b_msg)path = from_b_msg.split('\r\n')[0].split(' ')[1]# print(path)conn.send(b'HTTP/1.1 200 ok\r\nk1:v1\r\n\r\n')# conn.send(b'<h1>hello</h1>')for url_func in urlpatterns:if url_func[0] == path:#多线程函数版t = Thread(target=url_func[1],args=(conn,))t.start()# 简单函数版# url_func[1](conn)
②html文件
<!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Bootstrap 101 Template</title> </head> <body> <h1 style="color: purple;">欢迎来到王者荣耀页面</h1> <a href="http://127.0.0.1:8080/index">这是index</a> <a href="http://127.0.0.1:8080/home">这是home</a> <h1 style="color: pink;">@xx@</h1></body> </html>
4.wsgire模块板web框架
from wsgiref.simple_server import make_server # wsgiref本身就是个web框架,提供了一些固定的功能(请求和响应信息的封装,不需要我们自己写原生的socket了也不需要咱们自己来完成请求信息的提取了,提取起来很方便) #函数名字随便起 def application(environ, start_response):''':param environ: 是全部加工好的请求信息,加工成了一个字典,通过字典取值的方式就能拿到很多你想要拿到的信息:param start_response: 帮你封装响应信息的(响应行和响应头),注意下面的参数:return:'''start_response('200 OK', [('Content-Type', 'text/html'),('k1','v1')])# print(environ)print('>>>>>',environ['PATH_INFO']) #输入地址127.0.0.1:8000, 这个打印的是'/',输入的是127.0.0.1:8000/index,打印结果是'/index'return [b'<h1>Hello, web!</h1>']#和咱们学的socketserver那个模块很像啊 httpd = make_server('127.0.0.1', 8080, application)print('Serving HTTP on port 8080...') # 开始监听HTTP请求: httpd.serve_forever()
转载于:https://www.cnblogs.com/sc-1067178406/p/10407850.html
django基础 -- 1. 前奏 web框架的本质相关推荐
- day 65 Django基础一之web框架的本质
Django基础一之web框架的本质 django第一天 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Dja ...
- Django基础一之web框架的本质
我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应,按照http协议的请求协议发送请求, ...
- Python学习-基础篇14 Web框架本质及第一个Django实例
Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...
- Django之web框架的本质
web框架的本质及自定义web框架 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端,基于请求做出响应,客户都先请求,服务端做出对应的响应, ...
- Django/Flask/Tornado三大web框架性能分析
写在前面: 本文的数据涉及到之前遇到过的问题,大概一次 http 请求到收到响应需要多少时间.这个问题在实际工作中与框架有比较大的关系,因此特别就框架的性能做了一次分析. 这里使用之前的一个报告数据: ...
- python web框架 多线程_Django基础知识 web框架的本质详解
姑娘,你好,我是Jaden,请问约吗?嘻嘻~~ alert('这是我们第一个网页')
- python web flask开发框架_零基础入门python web框架Flask开发
Flask框架是Python开发的一个基于Werkzeug和Jinja 2的web开发微框架,它的优势就是极其简洁,但又非常灵活,而且容易学习和应用.因此Flask框架是Python新手快速开始web ...
- Python自动化开发学习的第十一周----WEB框架--Django基础
WEB框架的本质 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端. #!/usr/bin/env python #coding:utf-8imp ...
- django基础、自定义框架
django基础 HTTP 超文本传输协议 是在应用层 如今广泛使用的是HTTP1.1 默认为80端口 5层协议: HTTP协议 应用层 TCP/UDP协议 运输层 IP 网络层 数据链路层 物理层 ...
最新文章
- DFTug - Getting Started(上篇)
- python 加载mat文件
- 海驾学车过程全揭秘——第九篇:科目三集训及考试
- 最简单的java单例
- c程序设计语言 hello,Hello, World!
- python数字转换成中文大写_python中如何将货币数字转化成汉字大写金额
- POJ - 3494
- 基于matlab的电池管理系统开发,基于MATLAB的锂电池组均衡仿真系统设计
- redis数据中的key如果是中文
- oracle创建用户密码和权限--ORA-65096 invalid common user or role name
- HTML的img插入本地图片
- windows10 freeswitch soundtouch 变声
- c语言编程基础心得,C语言编程学习心得体会
- JSSDK公众号微信分享功能
- 挑战用五行代码轻松集成登录系统,实现单点登录
- 365值得吗 office_对于一个大学生来说,Office365是否值得购买?
- 拆解博朗一款剃须刀,质量真心差。德吹可以休已
- 高数-极限-存在与连续1
- 主板2个M. 2接口,哪个m2插槽是与CPU直连?总结不得不说PCIE知识
- html中的xmlns是什么意思?