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的学习教程也是分门别类,形式不一.或是较为体系的官方文档,或者风格自由的博客文档,或者偏向实 ...
最新文章
- Centos6.4下安装及配置FTP Server
- GDCM:gdcm::UIDGenerator的测试程序
- sysbench测试mysql性能(TPS、QPS、IOPS)(重要)
- java 接口的访问权限_证明接口interface中定义的方法的访问权限为public
- Java 理论与实践: 流行的原子
- ArcGIS Engine 10.2开发环境搭建
- 获取两个数的最大值,判断是否相等;
- 开发人员如何成为架构师
- tomcat配置url跳转_web和tomcat的区别
- python iterable对象_一篇文章看懂 Python iterable,
- sql server 群集_SQL Server 2014 –安装群集实例–分步(2/3)
- MATLAB 写入 txt
- IDEA如何导出war包
- ISBN码书籍信息查询
- android 日志打印内容完全相同,Log的chatty机制,identical 391 lines
- 在电影库中查找演员评分最高的5部电影
- Qt使用两组RadioButton,两组之间相互独立
- 【无人机 学习笔记 1】无人机导航技术及其特点分析
- 北京2022年最后一次快开始了,准备好了吗?
- 推荐一个Linux远程桌面工具
热门文章
- (四)Raspberry Pi上的人工智能人脸检测
- 使用WPF和.NET 6将Windows应用程序迁移到Windows on Arm
- Blazor UI事件和渲染
- AI队列长度检测:R-CNN用于使用Keras进行自定义对象检测
- .NET Core,PostgreSQL和文档数据库
- 在IIS上部署ASP.NET Core Web API
- gitlab ci php 构建,GitLab CI的入门搭建
- springBoot的一些注解以及静态资源的处理
- java类的实例参数传递_获取我正在通过参数传递的相同Java类实例
- 将一个项目中的图片存到另一个项目中_复盘一个Smart200小项目(2)