Djangosocket简单实现django简化版
服务端(自己实现django)
'''django简化版:socket服务端a.收发浏览器信息----wsgiref.pyb.根据用户访问的不同路径执行不同函数c.从html读取出内容,并完成字符串的替换(动态网页)按照功能划分web框架1.框架自带a,b,c------tornado框架2.框架自带b,c,使用第三方的a-------django框架3.框架自带b,使用第三方a和c--------flask按照维度划分1.django----大而全,网站能用的都有2.其他------fLask轻量级
'''import socket# 生成socket实例对象
sk = socket.socket()
# 绑定ip和端口
sk.bind(("127.0.0.1", 8000))
# 监听
sk.listen()# 处理xiaohei的函数
def xiaohei(url):with open("xiaohei.html",'r',encoding='utf-8') as f:ret = f.read()import time# 动态网页本质都是字符串的替换--发生在服务端ret = ret.replace("@@&&@@",str(time.ctime()))return bytes(ret,encoding='utf-8')# ret = "<h1>hello {} xiaohei<h1>".format(url)# return bytes(ret,encoding='utf-8')def xiaobai(url):with open("xiaobai.html",'rb') as f:ret = f.read()return ret# ret = "<h2>hello {} xiaobai<h2>".format(url)# return bytes(ret,encoding='utf-8')def f404(url):ret = "找不到{}这个url".format(url)return bytes(ret,encoding='utf-8')# urls.py
url_func = [("/xiaohei/",xiaohei),("/xiaobai/",xiaobai),
]# 一直等待链接
while 1:# 获取客户端的链接和地址conn, addr = sk.accept()# 没有用的变量通常用下划线表示# conn,_ = sk.accept()# 接收消息data = conn.recv(8989)# 把收到的数据转成字符串类型data_str = str(data, encoding="utf-8") # bytes("str", enconding="utf-8")print(data_str)# 用\r\n去切割上面的字符串-----切割出路径l1 = data_str.split("\r\n")# 按照空格切割上面的字符串-----切割出urll2 = l1[0].split()url = l2[1]print(url)# 回复消息消息必须包含四部分:即响应格式(协议版本,状态码,状态描述,回车符)conn.send(b'http/1.1 200 OK\r\ncontent-type:text/html;charset=utf-8\r\n\r\n')# 空行后面接响应正文,想让浏览器在页面上显示出来的内容都是响应正文# 根据不同url返回不同内容# if url == '/xiaohei/':# response = xiaohei(url)# else:# response=b"404 not found"# conn.send(b'<h1>hello world<h1>')# conn.send(response)for i in url_func:if i[0] == url:func = i[1]breakelse:func = f404response = func(url)conn.send(response)# 关闭conn.close()
sk.close()
Django的wsgiref模块
"""
根据URL中不同的路径返回不同的内容--函数进阶版
返回HTML页面
让网页动态起来
wsgiref模块版
"""import time
from wsgiref.simple_server import make_server# 将返回不同的内容部分封装成函数
def xiaohei(url):with open("xiaohei.html", "r", encoding="utf8") as f:s = f.read()now = str(time.time())s = s.replace("@@&&@@", now)return bytes(s, encoding="utf8")def xiaobai(url):with open("xiaobai.html", "r", encoding="utf8") as f:s = f.read()return bytes(s, encoding="utf8")# 定义一个url和实际要执行的函数的对应关系
list1 = [("/xiaohei/", xiaohei),("/xiaobai/", xiaobai),
]def run_server(environ, start_response):start_response('200 OK', [('Content-Type', 'text/html;charset=utf8'), ]) # 设置HTTP响应的状态码和头信息url = environ['PATH_INFO'] # 取到用户输入的urlfunc = Nonefor i in list1:if i[0] == url:func = i[1]breakif func:response = func(url)else:response = b"404 not found!"return [response, ]if __name__ == '__main__':httpd = make_server('127.0.0.1', 8080, run_server)print("我在8080等你哦...")httpd.serve_forever()
xiaohei.html
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>xiaohei</title>
</head>
<body>
<h1>返回html文件</h1>
<p>随便写几句</p>
<p>随便写几句</p>
<p>随便写几句</p>
<a href="https://www.douyu.com/directory/all"><h1>斗鱼</h1></a>
<p>@@&&@@</p>
</body>
</html>
xiaohei.html
<!DOCTYPE html>
<html lang="zh-CN">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>xiaobai</title>
</head>
<body>
<h1>用来测试的第二个页面</h1>
<h1>用来测试的第二个页面</h1>
<h1>用来测试的第二个页面</h1>
<h1>用来测试的第二个页面</h1>
</body>
</html>
转载于:https://www.cnblogs.com/shuimohei/p/10704202.html
Djangosocket简单实现django简化版相关推荐
- python django下载_简单了解django文件下载方式
这篇文章主要介绍了简单了解django三种文件下载方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 推荐使用FileResponse,从源码中可以 ...
- 学点简单的Django之第一个Django程序
学点简单的Django之第一个Django程序 这里采用PyCharm专业版可以直接创建Django项目,这里面自动部署了Django的基本环境.在创建项目时选择Django项目: 第一次建立Djan ...
- 简单的Django系统模板
据说程序员的苦只有女程序员懂,而学弟的痛也只有学姐了解!还记得当学妹在扣扣微信里问你代码时,你豪言壮语的答应下来,然后半夜偷偷抱着零食去向学姐求救吗?(至于为什么不找学长-那多没意思!!) 偶然想起当 ...
- python增删改查的框架_简单的Django框架增删改查操作
Django之orm对MysqL数据库的增删改查操作简介: 利用Django中orm来查找数据库中的数据,对数据库进行增.删.改.查: 增:新增数据 # 操作数据库user表新增记录 # 方式1: u ...
- python创建django项目语句_简单了解Django项目应用创建过程
创建应用前必须先进入虚拟环境 workon npy007 创建个文件夹 madir test cd test django-admin strartproject djdemo djdemo为项目名 ...
- 如何在Linux上部署一个简单的Django项目
参考文章:https://blog.csdn.net/a249900679/article/details/51527200 1.首先,在根目录底下建一个目录,存放python3.6.3版本,linu ...
- django 引入同目录下py文件_快速开发一个简单的Django网站
一.创建工程 1. 在cmd中输入:django-admin.py startproject projectname 2. 修改settings.py文件:在installedapp中增加需要创建的应 ...
- 简单了解Django应用app及分布式路由
前言 应用在Django的项目中是一个独立的业务模块,可以包含自己的路由,视图,模板,模型. 一 创建应用程序 创建步骤 用manage.py中的子命令startapp创建应用文件夹 在setting ...
- 秒懂系列 | 史上最简单的Python Django入门教程
http://www.cnblogs.com/baiboy/p/django1.html 摘要:Django的学习教程也是分门别类,形式不一.或是较为体系的官方文档,或者风格自由的博客文档,或者偏向实 ...
最新文章
- 006_logback体系结构
- leetcode 263, 264, 1201, 313. Ugly Number I, II, III, Super Ugly Number(leetcode 丑数问题合集)
- 数据挖掘之关联分析五(序列模式)
- vc++栈的简单实现
- 7135制作自动量程电压切换_基于数字电压表的直流电位差计自动检定装置的讨论...
- javascript使用btoa和atob来进行Base64转码和解码
- rust里mp5a4_Rust源码分析:channel内部mpsc队列
- mysql安装./depcomp_编译安装mysql及问题汇总
- 对于DOM的attribute和property的一些思考
- 如何解决 FrameBuffer console (vc)自动关闭显示
- XPath学习:轴(4)——ancestor
- 各种边缘检测算子特点比较(canny)
- 【优化算法】缎面弓箭鸟优化(SBO)【含Matlab源码 1432期】
- 整理学习之深度可分离卷积
- mc服务器小地图不显示玩家,为啥小地图莫名消失了 玩家:或许是它喝完随机饮料后 自己隐身了...
- 图像处理珍藏版本汇总
- SpringCloud(4)— 统一网关Gateway
- android开发软件!Android免打包多渠道统计如何实现?满满干货指导
- Element UI, Ant Design Vue
- 49.SQLite 数据库 编程
热门文章
- 分布式系统中的领导选举
- (一)在GKE上创建MLOps Kubernetes集群
- SQL Server中的假期表和GetWorkDays函数
- 使用.NET Standard 2的Elasticsearch,Kibana和Docker
- s5pv210 linux内核移植,S5PV210(TQ210)学习笔记——内核移植与文件系统构建之二
- 长沙学院计算机系课程表,长沙交通学院研究生200—200学年度第学期课程表.doc...
- 不染用计算机数字,2013年计算机等级考试一级B知识预测题(6)
- css里calculate,css3 calc会计算的属性
- 铁甲雄兵显示服务器维护,《铁甲雄兵》5月17日09:00停机维护公告
- flash推荐助手怎么关掉_彻底清除“FF新推荐”“Flash助手”的弹出广告