最新要闻
- 钉钉个人版来了!将全面接入千问大模型
- 驱动网简介
- 焦点信息:“大块头”正当时,中国经济网带您走进2023上海车展
- 【全球新要闻】20多万有戏!全新宝马iX1纯电SUV发布:中国独享加长版
- 世界热议:钉钉宣布接入通义千问!一条“/”拉高生产力
- 天天新消息丨不给小鹏留活路?理想一只脚踏入纯电领域:城市高阶辅助驾驶也来了
- 天天要闻:小米13 Ultra同时把潜望+1英寸可变光圈塞进手机里 雷军:非常不容易
- 女司机误将车内空调开成热风中暑:交警帮忙开下高速
- 天长新型城镇化提质升级补短板项目开展消防演练
- 环球快播:吃避孕药副作用有哪些_吃避孕药的副作用有什么
- 闹大!近10万人联合抵制 网飞黑人《埃及艳后》摊上事:歧视非裔 篡改历史
- 【世界热闻】Mate60或将首发 华为鸿蒙4.0秋季发布:AI会是亮点
- 曝芒果TV涉嫌恶意扣费 页面无取消续费选项 你中招没
- 要闻:2199元 小米米家无线洗地机2发布:活水杀菌 180°躺平洗地
- 环球讯息:迈威生物(688062)2022年年报简析:增收不增利,存货大幅上升
- 全球热议:新车充电烧毁 特斯拉回应因电流过大:曾甩锅被国家电网硬怼
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
精选!Python实现搭建-简单服务器教程
(资料图)
Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下:1.等待客户端的链接,服务器会收到一个http协议的请求数据报2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文件的环境)3.提取出文件的环境之后,利用截断取片的方法将文件名转化为模块名称4.使用m = __import__()
,就可以得到返回值为m的模块5.创建一个env字典:其中包含的是请求方式及文件环境等各种的键值对6.创建一个新的动态脚本,其中定义了application这个函数,必须包含env和start_response的参数(也是服务器里的调用方法)7.在这个动态脚本中定义状态码status和响应头headers(注意是字典形式,如Content-Type)8.然后再调用start_response(status,headers),但是要注意,这个函数在服务器被定义9.在动态脚本中编写动态执行程序10.m.appliction的返回值就是回应数据包的body,它的数据头在start_response被整合11.将数据头与数据body拼接起来,然后发送给客户端,就可显示动态网页
MyWebServer
import socketimport reimport sys from multiprocessing import Processfrom MyWebFramework import Application # 设置静态文件根目录HTML_ROOT_DIR = "./html"WSGI_PYTHON_DIR = "./wsgipython" class HTTPServer(object): """""" def __init__(self, application): """构造函数, application指的是框架的app""" self.server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.app = application def start(self): self.server_socket.listen(128) while True: client_socket, client_address = self.server_socket.accept() #print("[%s,%s]用户连接上了" % (client_address[0],client_address[1])) print("[%s, %s]用户连接上了" % client_address) handle_client_process = Process(target=self.handle_client, args=(client_socket,)) handle_client_process.start() client_socket.close() def start_response(self, status, headers): """ status = "200 OK" headers = [ ("Content-Type", "text/plain") ] star """ response_headers = "HTTP/1.1 " + status + "\r\n" for header in headers: response_headers += "%s: %s\r\n" % header self.response_headers = response_headers def handle_client(self, client_socket): """处理客户端请求""" # 获取客户端请求数据 request_data = client_socket.recv(1024) print("request data:", request_data) request_lines = request_data.splitlines() for line in request_lines: print(line) # 解析请求报文 # "GET / HTTP/1.1" request_start_line = request_lines[0] # 提取用户请求的文件名 print("*" * 10) print(request_start_line.decode("utf-8")) file_name = re.match(r"\w+ +(/[^ ]*) ", request_start_line.decode("utf-8")).group(1) method = re.match(r"(\w+) +/[^ ]* ", request_start_line.decode("utf-8")).group(1) env = { "PATH_INFO": file_name, "METHOD": method } response_body = self.app(env, self.start_response) response = self.response_headers + "\r\n" + response_body # 向客户端返回响应数据 client_socket.send(bytes(response, "utf-8")) # 关闭客户端连接 client_socket.close() def bind(self, port): self.server_socket.bind(("", port)) def main(): sys.path.insert(1, WSGI_PYTHON_DIR) if len(sys.argv) < 2: sys.exit("python MyWebServer.py Module:app") # python MyWebServer.py MyWebFrameWork:app module_name, app_name = sys.argv[1].split(":") # module_name = "MyWebFrameWork" # app_name = "app" m = __import__(module_name) app = getattr(m, app_name) http_server = HTTPServer(app) # http_server.set_port http_server.bind(8000) http_server.start() if __name__ == "__main__": main()
MyWebFrameWork
import time# from MyWebServer import HTTPServer # 设置静态文件根目录HTML_ROOT_DIR = "./html" class Application(object): """框架的核心部分,也就是框架的主题程序,框架是通用的""" def __init__(self, urls): # 设置路由信息 self.urls = urls def __call__(self, env, start_response): path = env.get("PATH_INFO", "/") # /static/index.html if path.startswith("/static"): # 要访问静态文件 file_name = path[7:] # 打开文件,读取内容 try: file = open(HTML_ROOT_DIR + file_name, "rb") except IOError: # 代表未找到路由信息,404错误 status = "404 Not Found" headers = [] start_response(status, headers) return "not found" else: file_data = file.read() file.close() status = "200 OK" headers = [] start_response(status, headers) return file_data.decode("utf-8") for url, handler in self.urls: #("/ctime", show_ctime) if path == url: return handler(env, start_response) # 代表未找到路由信息,404错误 status = "404 Not Found" headers = [] start_response(status, headers) return "not found" def show_ctime(env, start_response): status = "200 OK" headers = [ ("Content-Type", "text/plain") ] start_response(status, headers) return time.ctime() def say_hello(env, start_response): status = "200 OK" headers = [ ("Content-Type", "text/plain") ] start_response(status, headers) return "hello itcast" def say_haha(env, start_response): status = "200 OK" headers = [ ("Content-Type", "text/plain") ] start_response(status, headers) return "hello haha" urls = [ ("/", show_ctime), ("/ctime", show_ctime), ("/sayhello", say_hello), ("/sayhaha", say_haha), ]app = Application(urls)# if __name__ == "__main__":# urls = [# ("/", show_ctime),# ("/ctime", show_ctime),# ("/sayhello", say_hello),# ("/sayhaha", say_haha),# ]# app = Application(urls)# http_server = HTTPServer(app)# http_server.bind(8000)# http_server.start()
关键词:
-
【世界播资讯】Nlog-动态修改DatabaseTarget,对数据库字符串进行加密
privatestaticLoggerprocessLogger; ①LnProcessDBLog标签LogManager GetLogger("LnProcessDBLog
来源: 【世界播资讯】Nlog-动态修改DatabaseTarget,对数据库字符串进行加密
精选!Python实现搭建-简单服务器教程
滚动:PHP 7 教程_编程入门自学教程_菜鸟教程-免费教程分享
钉钉个人版来了!将全面接入千问大模型
驱动网简介
头条:【新华500】新华500指数(989001)18日上涨0.24%
焦点信息:“大块头”正当时,中国经济网带您走进2023上海车展
【全球新要闻】20多万有戏!全新宝马iX1纯电SUV发布:中国独享加长版
世界热议:钉钉宣布接入通义千问!一条“/”拉高生产力
天天新消息丨不给小鹏留活路?理想一只脚踏入纯电领域:城市高阶辅助驾驶也来了
天天要闻:小米13 Ultra同时把潜望+1英寸可变光圈塞进手机里 雷军:非常不容易
女司机误将车内空调开成热风中暑:交警帮忙开下高速
天长新型城镇化提质升级补短板项目开展消防演练
世界滚动:好物分享:一款可以加密云盘视频,并依然可在线播放的免费小工具——Alist 云盘视频加密助手!
环球报道:Grafana监控OracleDB的完整过程
环球简讯:Jenkins常用插件
全球热头条丨仅1.0MB,开源压缩软件7-Zip
全量通过,华为云GaussDB首批完成信通院全密态数据库评测
环球快播:吃避孕药副作用有哪些_吃避孕药的副作用有什么
闹大!近10万人联合抵制 网飞黑人《埃及艳后》摊上事:歧视非裔 篡改历史
【世界热闻】Mate60或将首发 华为鸿蒙4.0秋季发布:AI会是亮点
曝芒果TV涉嫌恶意扣费 页面无取消续费选项 你中招没
要闻:2199元 小米米家无线洗地机2发布:活水杀菌 180°躺平洗地
环球讯息:迈威生物(688062)2022年年报简析:增收不增利,存货大幅上升
了解GIS地图和可视化如何改变我们对地理信息的理解
天天热议:火山引擎DataLeap下Notebook 系列文章一:技术选型之路
全球热议:新车充电烧毁 特斯拉回应因电流过大:曾甩锅被国家电网硬怼
环球看点!潍坊风筝节现躺平版“秦始皇” 网友:这是他摔过最狠的一跤
大众拟2026年之前再推10款电动汽车
看热讯:网络编程懒人入门(十五):外行也能读懂的网络硬件设备功能原理速成
环球热议:若依前后端分离 代码生成修改(2)
【聚看点】用C#破解Chrome浏览器cookie值
【世界时快讯】3D轻量化引擎推出新技术,模型渲染更逼真!
17.88万起圆你跑车梦 哪吒GT开售:双门四座零百三秒
环球焦点!鸿蒙5G新机来了!WIKO Hi畅享60官宣:4800万金环双摄
全品牌销冠!魅族20系列成3000元档周线上销量第一
内外双2K E6旗舰屏!vivo X Fold2配置详解:九大全球领先科技
环球微速讯:农业农村部:今年全国农作物种子市场总体上供大于求,合格率稳定保持在98%以上
报道:【Git代码仓库托管】上海道宁为您提供构建、扩展和交付安全软件的完整开发人员平台
世界今日讯!windows系统git使用ssh方式和gitee/github进行同步
【天天时快讯】springboot统一响应实体封装+统一异常类管理
当前观察:Redis---哨兵服务
全球即时:python的matplotlib绘制动态图形(用animation中的FuncAnimation)
财政部:将专项债务限额及时下达各地 推动尽快形成实物工作量
世界看热讯:在史上“最热闹”的上海车展 特斯拉竟然缺席了 维权有阴影?
漫威面临征服者康难题
世界微头条丨爆款狂促!玫瑰精油洗发水47.8元买1000ml:解决软塌油头
焦点观察:王一博主演!《长空之王》领跑五一档预售票房榜
72岁王石出手创立私募基金:曾表态市场一定会惩罚暴利
方萍萍:2023年04月18日原油交易策略
秦昊结了几次婚?秦昊的老婆叫什么名字?
罗云熙真实身高体重是多少?罗云熙为什么那么瘦?
粉红法拉利是谁唱的?粉红法拉利完整版歌词
化骨绵掌是什么意思?化骨绵掌是谁的绝招?
车俊焕多大了?车俊焕个人资料介绍
【世界报资讯】Go 单表头结构体导入导出
世界看点:nginx服务在高并发场景下的优化方案及具体配置
今日观点!兔子产子问题
关注:大连积极扩大有效投资加速迈向“万亿GDP城市”
【财经分析】紧缩预期压制买需 2月超六成海外“债主”抛售美债
视讯!新华社重庆分社社长李勇:将从三方面助力重庆数字政府建设
首批扩募REITs将召开持有人大会
每日热议!生产力起飞!金山官宣WPS AI:聊天帮忙做好Word文档
环球今日报丨发布三个月跳水超1000!苹果M2版Mac mini降到3478元了
全球快资讯:上海一物流网点起火:快递员怀疑液体可燃 用打火机尝试发现真的可燃
今晚发布!小米13 Ultra配置带你提前看 就差价格了
全球快看:AI绘制90年代“复仇者联盟” 阿汤哥来演钢铁侠
世界速看:uniapp ios app离线打包
如何假装你懂Meta Segment Anything?
前沿资讯!基础电子元器件产业发展专项协调机制年度工作会议在深圳召开
【全球时快讯】游戏掉帧电脑卡顿?这锅CPU不背
四电机原地掉头 奔驰EQG概念车亮相上海车展:全新电池装车
理想汽车累计交付破32万辆 30万元以上新能源品牌销量第一
全球短讯!像人一样开 理想发布理想AD Max 3.0:连路上的狗都能识别
世界新资讯:iPhone 15 Pro新变化:用音量键组合关机重启成过去式
福建省厦门市发布雷雨大风黄色预警
【全球聚看点】如何在 Linux 上录制你的终端操作
dbatools demo
当前速递!一段话理解正向代理和反向代理的区别
热头条丨大数据开发相关技术汇总
环球热消息:6月6日全平台发售!《暗黑破坏神4》已完成开发:送厂压盘
蒙古国发布强沙尘暴预警:今日起席卷全境 影响我国部分地区
天天观热点:抢先看!迪士尼送真人版《小美人鱼》新预告:黑小美人鱼水中甩发画面动情
环球微资讯!蒙古国发布强沙尘暴预警 18日起将席卷全境
债务违约担忧加剧 美国3个月期国库券中标收益率超5%
天天热点!探营2023上海车展:一场新能源和智能化技术的盛宴
【环球报资讯】293份一季报预告逾七成预喜 机械设备等赛道业绩亮眼
【天天聚看点】坐地铁被收15元“超时费”?网友吵翻
环球聚焦:长荣航空两飞机发生碰撞:空客A321把波音777“割喉”了
女子骑摩托车遇沉降路段摔倒遭碾压身亡 竟担主责引争议:网友吵翻
比亚迪汽车APP升级7.0版本:界面全新改版 美观太多了
焦点热议:饲养员用竹竿打大熊猫“暖暖” 园方回应:永不允许此人养熊猫
当前快看:【长测】小米蒸烤箱维修记录:不到一年半就坏了
【天天聚看点】大批“学生特种兵”留宿淄博海底捞:出示车票即可
2023年农牧行业6大CRM系统、5大场景盘点
React 组件进入和退出动画实现
又一家果链代工巨头被苹果拖累 歌尔业绩暴雷:利润暴跌近90%
焦点热议:华为首发L2.9999 新势力们开始卷技术了?
【全球速看料】提前泄密上海车展:没想到 全是黑幕!
世界微动态丨SNK正版授权!腾讯《合金弹头:觉醒》今日上线:iPhone 5S也能玩