服务端(自己实现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简化版相关推荐

  1. python django下载_简单了解django文件下载方式

    这篇文章主要介绍了简单了解django三种文件下载方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 推荐使用FileResponse,从源码中可以 ...

  2. 学点简单的Django之第一个Django程序

    学点简单的Django之第一个Django程序 这里采用PyCharm专业版可以直接创建Django项目,这里面自动部署了Django的基本环境.在创建项目时选择Django项目: 第一次建立Djan ...

  3. 简单的Django系统模板

    据说程序员的苦只有女程序员懂,而学弟的痛也只有学姐了解!还记得当学妹在扣扣微信里问你代码时,你豪言壮语的答应下来,然后半夜偷偷抱着零食去向学姐求救吗?(至于为什么不找学长-那多没意思!!) 偶然想起当 ...

  4. python增删改查的框架_简单的Django框架增删改查操作

    Django之orm对MysqL数据库的增删改查操作简介: 利用Django中orm来查找数据库中的数据,对数据库进行增.删.改.查: 增:新增数据 # 操作数据库user表新增记录 # 方式1: u ...

  5. python创建django项目语句_简单了解Django项目应用创建过程

    创建应用前必须先进入虚拟环境 workon npy007 创建个文件夹 madir test cd test django-admin strartproject djdemo djdemo为项目名 ...

  6. 如何在Linux上部署一个简单的Django项目

    参考文章:https://blog.csdn.net/a249900679/article/details/51527200 1.首先,在根目录底下建一个目录,存放python3.6.3版本,linu ...

  7. django 引入同目录下py文件_快速开发一个简单的Django网站

    一.创建工程 1. 在cmd中输入:django-admin.py startproject projectname 2. 修改settings.py文件:在installedapp中增加需要创建的应 ...

  8. 简单了解Django应用app及分布式路由

    前言 应用在Django的项目中是一个独立的业务模块,可以包含自己的路由,视图,模板,模型. 一 创建应用程序 创建步骤 用manage.py中的子命令startapp创建应用文件夹 在setting ...

  9. 秒懂系列 | 史上最简单的Python Django入门教程

    http://www.cnblogs.com/baiboy/p/django1.html 摘要:Django的学习教程也是分门别类,形式不一.或是较为体系的官方文档,或者风格自由的博客文档,或者偏向实 ...

最新文章

  1. 006_logback体系结构
  2. leetcode 263, 264, 1201, 313. Ugly Number I, II, III, Super Ugly Number(leetcode 丑数问题合集)
  3. 数据挖掘之关联分析五(序列模式)
  4. vc++栈的简单实现
  5. 7135制作自动量程电压切换_基于数字电压表的直流电位差计自动检定装置的讨论...
  6. javascript使用btoa和atob来进行Base64转码和解码
  7. rust里mp5a4_Rust源码分析:channel内部mpsc队列
  8. mysql安装./depcomp_编译安装mysql及问题汇总
  9. 对于DOM的attribute和property的一些思考
  10. 如何解决 FrameBuffer console (vc)自动关闭显示
  11. XPath学习:轴(4)——ancestor
  12. 各种边缘检测算子特点比较(canny)
  13. 【优化算法】缎面弓箭鸟优化(SBO)【含Matlab源码 1432期】
  14. 整理学习之深度可分离卷积
  15. mc服务器小地图不显示玩家,为啥小地图莫名消失了 玩家:或许是它喝完随机饮料后 自己隐身了...
  16. 图像处理珍藏版本汇总
  17. SpringCloud(4)— 统一网关Gateway
  18. android开发软件!Android免打包多渠道统计如何实现?满满干货指导
  19. Element UI, Ant Design Vue
  20. 49.SQLite 数据库 编程

热门文章

  1. 分布式系统中的领导选举
  2. (一)在GKE上创建MLOps Kubernetes集群
  3. SQL Server中的假期表和GetWorkDays函数
  4. 使用.NET Standard 2的Elasticsearch,Kibana和Docker
  5. s5pv210 linux内核移植,S5PV210(TQ210)学习笔记——内核移植与文件系统构建之二
  6. 长沙学院计算机系课程表,长沙交通学院研究生200—200学年度第学期课程表.doc...
  7. 不染用计算机数字,2013年计算机等级考试一级B知识预测题(6)
  8. css里calculate,css3 calc会计算的属性
  9. 铁甲雄兵显示服务器维护,《铁甲雄兵》5月17日09:00停机维护公告
  10. flash推荐助手怎么关掉_彻底清除“FF新推荐”“Flash助手”的弹出广告