服务端(自己实现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. Centos6.4下安装及配置FTP Server
  2. GDCM:gdcm::UIDGenerator的测试程序
  3. sysbench测试mysql性能(TPS、QPS、IOPS)(重要)
  4. java 接口的访问权限_证明接口interface中定义的方法的访问权限为public
  5. Java 理论与实践: 流行的原子
  6. ArcGIS Engine 10.2开发环境搭建
  7. 获取两个数的最大值,判断是否相等;
  8. 开发人员如何成为架构师
  9. tomcat配置url跳转_web和tomcat的区别
  10. python iterable对象_一篇文章看懂 Python iterable,
  11. sql server 群集_SQL Server 2014 –安装群集实例–分步(2/3)
  12. MATLAB 写入 txt
  13. IDEA如何导出war包
  14. ISBN码书籍信息查询
  15. android 日志打印内容完全相同,Log的chatty机制,identical 391 lines
  16. 在电影库中查找演员评分最高的5部电影
  17. Qt使用两组RadioButton,两组之间相互独立
  18. 【无人机 学习笔记 1】无人机导航技术及其特点分析
  19. 北京2022年最后一次快开始了,准备好了吗?
  20. 推荐一个Linux远程桌面工具

热门文章

  1. (四)Raspberry Pi上的人工智能人脸检测
  2. 使用WPF和.NET 6将Windows应用程序迁移到Windows on Arm
  3. Blazor UI事件和渲染
  4. AI队列长度检测:R-CNN用于使用Keras进行自定义对象检测
  5. .NET Core,PostgreSQL和文档数据库
  6. 在IIS上部署ASP.NET Core Web API
  7. gitlab ci php 构建,GitLab CI的入门搭建
  8. springBoot的一些注解以及静态资源的处理
  9. java类的实例参数传递_获取我正在通过参数传递的相同Java类实例
  10. 将一个项目中的图片存到另一个项目中_复盘一个Smart200小项目(2)