最新要闻
- 火热征集中!全国城市生活垃圾分类标识征集大赛邀你来参与-世界新消息
- 大气!蔚来宣布五一期间所有车主高速免费换电:不限次
- 47个楼盘2块钱甩卖!恒大汽车:只为专注造车
- 《古剑奇谭》开发商新作!类银河城游戏《心渊梦境》登陆PC/主机全平台
- 上海杭州之间或将建世界首条超级高铁:仅9分钟车程 全球热点
- 起诉苹果后 百度文心一言推出内测专用独立App:支持语音输入
- 坐下、抬爪、击掌……“毛孩子”们为患者带来欢乐与慰藉!
- 安徽宿州:在房交会期间购买90平米以上新房,将给予每套10000元消费券
- 千万粉网红回应打卡徐州烧烤被网暴:不是黑 问题确实存在
- “祝融号”火星车休眠近一年仍未唤醒 设计师回应:可能遭遇不可预知沙尘|微动态
- 睡个美容觉!马应龙蒸汽眼罩0.99元/片冲量大促 快看点
- 《赛博朋克2077》自研REDEngine出Bug:开启DLSS 3反而变卡 当前资讯
- 今日港股异动个股一览:中创新航(03931)现跌超5% 高盛称产能过剩或拖累利润率 产能扩张计划或提高杠杆水平_世界独家
- 吴镇宇14岁儿子官宣恋情!是日本无数宅男的女神
- 总裁赵伟与欧冶工业品公司领导座谈交流 时讯
- 扎克伯格醉心AI:Facebook或将更名MetAI
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
【天天新要闻】仿Django框架-基于wsgiref模块和jinja2模块写一个简单的框架 主流框架简介 动静态网页 Python虚拟环境
目录
仿Django框架-基于wsgiref模块和jinja2模块写一个简单的框架
一、前期需要的了解背景知识
- web框架的本质
- 理解1:连接前端与数据库的中间介质
- 理解2:socket服务端
- 手写web框架的大概思路1.编写socket服务端代码2.浏览器访问响应无效>>>:HTTP协议3.根据网址后缀的不同获取不同的页面内容4.想办法获取到用户输入的后缀>>>:请求数据5.请求首行>>>GET /login HTTP/1.1
GET请求 朝别人索要数据
POST请求 朝别人提交数据
6.处理请求数据获取网址后缀问题:1.socket代码过于重复2.针对请求数据处理繁琐3.后缀匹配逻辑过于LowB
基于socket模块写的服务端
import socketserver = socket.socket() # TCP UDPserver.bind(("127.0.0.1", 8080)) # IP PORTserver.listen(5) # 半连接池while True: sock, address = server.accept() # 等待连接 data = sock.recv(1024) # 字节(bytes) # print(data.decode("utf8")) # 解码打印 sock.send(b"HTTP/1.1 200 OK\r\n\r\n") data_str = data.decode("utf8") # 先转换成字符串 target_url = data_str.split(" ")[1] # 按照空格切割字符串并取索引1对应的数据 # print(target_url) # /index /login /reg if target_url == "/index": # sock.send(b"index page") with open(r"myhtml01.html","rb") as f: sock.send(f.read()) elif target_url == "/login": sock.send(b"login page") else: sock.send(b"home page!")
二、基于wsgiref模块做优化
wsgiref功能简单介绍内置模块 很多web框架底层使用的模块
(资料图片)
- 功能1:封装了socket代码
- 功能2:处理了请求数据1.固定代码启动服务端2.查看处理之后的request大字典3.根据不同的网址后缀返回不同的内容>>>:研究大字典键值对4.立刻解决上述纯手撸的两个问题5.针对最后一个问题代码如何优化
代码编写
from wsgiref.simple_server import make_serverdef run(request, response): """ :param request: 请求相关数据 :param response: 响应相关数据 :return: 返回给客户端的真实数据 """ response("200 OK", []) # 固定格式 不用管它 # print(request) 是一个处理之后的大字典 path_info = request.get("PATH_INFO") if path_info == "/index": return [b"index"] elif path_info == "/login": return [b"login"] return [b"hello wsgiref module"]if __name__ == "__main__": server = make_server("127.0.0.1", 8080, run) # 实时监听127.0.0.1:8080 一旦有请求过来自动给第三个参数加括号并传参数调用 server.serve_forever() # 启动服务端
三、代码封装优化
1.网址后缀的匹配问题2.每个后缀匹配成功后执行的代码有多有少,所以可以分成面条版函数版模块版3.将分支的代码封装成一个个函数4.将网址后缀与函数名做对应关系5.获取网址后缀循环匹配6.如果想新增功能只需要先写函数再添加一个对应关系即可7.根据不同的功能拆分成不同的py文件
views.py存储核心业务逻辑(功能函数)
urls.py存储网址后缀与函数名对应关系
templates目录 存储html页面文件
8.为了使函数体代码中业务逻辑有更多的数据可用,将request大字典转手传给这个函数(可用不用但是不能没有)
四、jinja2模块
命令行下载pip3 install jinja2
使用
from jinja2 import Templatedef get_dict_func(request): user_dict = {"name": "jason", "age": 18, "person_list": ["阿珍", "阿强", "阿香", "阿红"]} with open(r"templates/get_dict_page.html", "r", encoding="utf8") as f: data = f.read() temp_obj = Template(data) # 将页面数据交给模板处理 res = temp_obj.render({"d1": user_dict}) # 给页面传了一个 变量名是d1值是字典数据的数据 return res{{ d1 }}
{{ d1.name }}
{{ d1["age"] }}
{{ d1.get("person_list") }}
五、动静态网页
动态网页:页面数据来源于后端
静态网页:页面数据直接写死的,就是我们常见的:CSS文件、JS文件、img文件、我们的第三方前端框架:bootstrap相关的
- 了解概念1.访问某个网址后缀 后端代码获取当前时间 并将该时间传到html文件上再返回给浏览器展示给用户看读取html内容(字符串类型) 然后利用字符串替换 最后再返回给浏览器2.将字典传递给页面内容 并且在页面上还可以通过类似于后端的操作方式操作该数据模板语法>>>:jinja2模块
六、Python主流web框架
- django
大而全 自身自带的功能组件非常的多 类似于航空母舰
- flask
小而精 自身自带的功能组件非常的少 类似于游骑兵,几乎所有的功能都需要依赖于第三方模块
- tornado
异步非阻塞 速度极快效率极高甚至可以充当游戏服务端
ps:还有sanic、fastapi...提示:作为小白的你 初学阶段不要混着学 很容易走火入魔
七、虚拟环境
为什么要使用虚拟环境?项目1需要使用:django1.11 python38项目2需要使用:django2.22 pymysql requests python38项目3需要使用:django3.22 request_html flask urllib3 python38实际开发项目中我们只会给项目配备所需的环境,不需要的一概不配!!!虚拟环境:能够针对相同版本的解释器创建多个分身 每个分身可以有自己独立的环境
创建虚拟环境:(每创建一个虚拟环境就相当于重新下载了一个全新的解释器)方式一:pycharm创建
方式二:命令行的方式创建
python -m venv pyvenv38
PS:python命令此处不支持多版本共存的操作 python27 python36 python38,环境变量中谁靠前就用哪个解释器版本激活:activate关闭:deactivate(后面会详细解释)
关键词:
-
头条:使用Dockerfile部署springboot打包jar包
1、docker下载JDK1 8镜像dockerpulljava:82、进行需要编译的镜像文件目录编写Dockerfile文件 依赖的父镜像F
来源: -
【天天新要闻】仿Django框架-基于wsgiref模块和jinja2模块写一个简单的框架 主流框架简介 动静态网页 Python虚拟环境
目录仿Django框架-基于wsgiref模块和jinja2模块写一个简单的框架一、前期需要的了解背景知识web框架的本质
来源: MySQL 备忘清单_开发速查表分享
头条:使用Dockerfile部署springboot打包jar包
【天天新要闻】仿Django框架-基于wsgiref模块和jinja2模块写一个简单的框架 主流框架简介 动静态网页 Python虚拟环境
火热征集中!全国城市生活垃圾分类标识征集大赛邀你来参与-世界新消息
收评:创指跌1.83%创近半年来新低 锂电池产业链跌幅靠前 天天热点
当前短讯!【财经分析】供应收缩叠加需求前景有望改善 原油止跌反弹
大气!蔚来宣布五一期间所有车主高速免费换电:不限次
47个楼盘2块钱甩卖!恒大汽车:只为专注造车
《古剑奇谭》开发商新作!类银河城游戏《心渊梦境》登陆PC/主机全平台
上海杭州之间或将建世界首条超级高铁:仅9分钟车程 全球热点
起诉苹果后 百度文心一言推出内测专用独立App:支持语音输入
坐下、抬爪、击掌……“毛孩子”们为患者带来欢乐与慰藉!
焦点快看:高质量数仓建模
火山引擎 DataLeap:在数据研发中,如何提升效率?
全球观点:数仓实践丨主动预防-DWS关键工具安装确认
支持全文检索、知识图谱、工作流审批的知识平台_天天时讯
【Mysql】复合主键的索引
安徽宿州:在房交会期间购买90平米以上新房,将给予每套10000元消费券
千万粉网红回应打卡徐州烧烤被网暴:不是黑 问题确实存在
“祝融号”火星车休眠近一年仍未唤醒 设计师回应:可能遭遇不可预知沙尘|微动态
睡个美容觉!马应龙蒸汽眼罩0.99元/片冲量大促 快看点
《赛博朋克2077》自研REDEngine出Bug:开启DLSS 3反而变卡 当前资讯
今日港股异动个股一览:中创新航(03931)现跌超5% 高盛称产能过剩或拖累利润率 产能扩张计划或提高杠杆水平_世界独家
吴镇宇14岁儿子官宣恋情!是日本无数宅男的女神
总裁赵伟与欧冶工业品公司领导座谈交流 时讯
扎克伯格醉心AI:Facebook或将更名MetAI
爱过的人我已不再拥有是什么歌?爱过的人我已不再拥有完整版歌词
终极系列正确观看顺序是什么?终极系列战力指数排名
双探的原型是什么?双探剧情介绍
天津德云鼓曲社升平雅乐特别奉献专场观演攻略 当前播报
光芒程亦治和丽姿第几集复婚的?光芒程亦治的身份是什么?
by2是双胞胎吗?by2个人资料介绍
强强联合,ByteHouse 携手亚马逊云科技,新一代云数仓服务重磅升级 世界新消息
全球通讯!深入理解C#泛型:new与where关键字全解析
使用docker 运行etcd 单实例/集群|环球播资讯
厦门市场监管部门发出“五一”旅游行业价格行为提醒告诫_天天速看
日本强推“排污入海”!学界:全球海洋生态将面临核污染水风险 全球信息
天天微速讯:自动泊车挑战立体车库 奔驰唯一成功 碾压华为、特斯拉
世界新资讯:特斯拉动能回收要彻底取消?博主辟谣:不实、只有两级可调
未上线就创纪录!《原神》开发商新作《崩坏:星穹铁道》iOS 113国登顶-热点
歼-20试飞员评价《长空之王》:很真实的影片
常欣科技2022年亏损30.64万同比由盈转亏 产品销售下降
要闻:彻底服了!这JB,NBA第一硬!黑8,必须黑8!
2023年宁德社保费用参考 宁德社保个人缴费标准是多少|速讯
iFlutter - 加速Flutter开发 环球消息
江西日报经济版头条 | 分宜工业经济高质量发展步履坚实
昭通昭阳富滇村镇银行获批解散 被富滇银行吸收合并 世界要闻
【环球财经】美国第一共和银行一季度业绩显著恶化
宋都基业投资股份有限公司发布公司股票可能被实施退市风险警示的第二次风险提示公告
东北地区及新疆等地有雨雪天气 江南华南有明显降雨过程
2023一卡逛崇川在哪里购买
今日报丨青岛口岸启运港退税政策宣传推介会举行
汽车也能戴“手表” 五菱宝骏悦也预告:行业首次搭载Car-watch
2499元 雷神MIX迷你主机上架:13代i5 比一罐可乐还小 世界快消息
商家浑水摸鱼 买到无码SteamDeck你肯定被骗了 全球观速讯
全球球精选!苹果影像破天荒升级!iPhone 15 Pro Max终于跟上安卓步伐了
今日热讯:恒大汽车暂缓生产恒驰5 全国交付量“感人”
广生泉:家政服务进社区
全球观天下!晋宁区开展“你点我检”食品安全专项抽检工作
安庆市养老金能提前支取吗 2023年安庆养老金如何计算 要闻速递
dnfyy是什么意思?dnfyy有哪些辅助频道?
首次发布!成都这个地方上火星了!
电压低是什么原因造成的?电压低对笔记本有影响吗?
戴尔inspiron 1440右侧卡槽干什么用?戴尔inspiron 1440配置
华为手机怎么获得root权限?华为手机怎么设置24小时时间显示?
[XXL-JOB] 分布式调度XXL-JOB快速上手 世界最新
今日观点!登录接口实现细节分析与登录接口代码实现
使用AI优化慢SQL,开发秒变DBA|焦点资讯
视讯!MIME Base64编码
圆通速递和圆通快递一样吗?圆通速递价格表查询
不止新机血赚!去年苹果iPhone在翻新手机市场占比达49%,同比增长16%
璞泰来江苏新设膜材料科技子公司 注册资本4亿元|今头条
台安县气象局发布大风黄色预警【Ⅲ级/较重】【2023-04-25】
企业有诉求,深圳坂田服务小组立即出动……
OPPO Reno 10 Pro+通过认证:骁龙8+、100W超级闪充
每日播报!强风吹倒墙壁女子新车被砸烂 4S店:无偿修复 赔7千
网友想要比小米13更小的小屏手机!雷军回应
世界资讯:电车出行半径不设限 AITO问界M5纯电版五一说走就走
博主曝易车网策划宝马MINI冰淇淋热点传播 易车回应 当前信息
快看:现代侧钻井技术_关于现代侧钻井技术介绍
【环球热闻】中国代表队在2022
锻造年轻干部成长链 环球简讯
青年宫合唱团成立10余年 已成为百余名老年人的心灵港湾 天天精选
天天播报:2023上海车展:捷尼赛思G90 财阀大佬座驾灵不灵?
接口测试快速入门1简介 焦点关注
Netstat 备忘清单_开发速查表分享|焦点播报
焦点速递!我要手把手教你搭建一套抗瞬时百万流量的秒杀系统
全球时讯:如何在Android studio导入jdk9及以上版本中依赖包,如'rt.jar',' dt.jar'等
第133届广交会第三期行业论坛闭幕
长城汽车一季度净利同比下跌近9成,皮卡成唯一增长板块 天天热资讯
烤箱吐司面包的做法窍门_烤箱吐司面包的做法
手机厂商们宣传的“等效光圈”是什么鬼?如何计算
酒店在五一推出“99元睡大厅”:0.8米的沙发床!已火速下架
全球聚焦:1399元起 荣耀X50i开售:一亿像素、轻羽纹理后盖
全球快看点丨《王者荣耀》五五朋友节皮肤来了:刘关张桃源结义、妲己九尾狐
世界快资讯:CPU为什么很少会坏?答案揭晓
信用卡欠钱影响政审吗?信用卡逾期影响考公务员吗?|热闻
二级医疗事故赔偿标准是怎样的
中宏保险官网登录-中宏保险骗了多少人 环球观点
QDII基金一季度吸金效应显著-世界讯息