<Django>socket简单实现django简化版
服务端(自己实现django)
- '''
- django简化版:socket服务端
- a.收发浏览器信息----wsgiref.py
- b.根据用户访问的不同路径执行不同函数
- 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")
- # 按照空格切割上面的字符串-----切割出url
- l2 = 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]
- break
- else:
- func = f404
- response = 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'] # 取到用户输入的url
- func = None
- for i in list1:
- if i[0] == url:
- func = i[1]
- break
- if 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>
<Django>socket简单实现django简化版的更多相关文章
- django的简单原理
一.自定义客户端和服务端的请求响应 1.客户端打开url,向服务器发出请求 2.服务端用socket写一个py,用于接收请求和做出响应 3.服务端接收请求 4.服务端模拟HTTP协议做出响应,状态行为 ...
- django的下载安装,目录结构的介绍,简单的django应用
1.django的下载安装 pip3 install django==1.11.9 2.django的创建 1.在windows的cmd窗口下 1.1创建django项目 django-admin s ...
- Django - Django框架 简单介绍
Django框架 简单介绍 本文地址: http://blog.csdn.net/caroline_wendy/article/details/29172271 1. 介绍 Django是一个开放源码 ...
- Python django实现简单的邮件系统发送邮件功能
Python django实现简单的邮件系统发送邮件功能 本文实例讲述了Python django实现简单的邮件系统发送邮件功能. django邮件系统 Django发送邮件官方中文文档 总结如下: ...
- 使用一个Python脚本来运行一个简单的Django项目
创建视图 Django是一个模型-模板-视图(model-template-view,MTV)框架. 视图部分通常检查看HTTP给出的请求和查询或者结构,这些信息是发送到表示层的数据. 我们在 hel ...
- Django 实现简单的文件上传
今天分享一下Django实现的简单的文件上传的小例子. 步骤 创建Django项目,创建Django应用 设计模型 处理urls.py 以及views.py 设计模板,设计表单 运行项目,查看数据库 ...
- RESTful架构&简单使用Django rest framework
RESTful架构 1 什么是REST REST全称是Representational State Transfer,中文意思是表述性状态转移. 它首次出现在2000年Roy Fielding的博士论 ...
- Django中简单添加HTML、css、js等文件(非正规添加,适合小白)
Django中简单添加HTML.css.js等文件 首先申明下自己的环境, python版本3.65(亲测3.7版本有毒,没解决掉!) Django版本1.11.15(版本比较成熟,也可以用最新的版本 ...
- 沉淀,再出发:Django的简单使用
沉淀,再出发:Django的简单使用 一.前言 在学习了python的基础语法之后,其实大家都很怀疑python的使用场景,其实python在很多场合都有很强的适应性,就比如说web开发之中使 ...
随机推荐
- eclipse如何实现智能提示功能
一直时候用idea很久没有使用eclipse了,idead的ctrl+鼠标滚轮是可以调节字体大小,这项功能是我的最爱. 早就忘记eclipse的智能助手设置,今天翻下以前的笔记,觉得还是做个博客方便今 ...
- 暑假集训test-8-31(pm)
以为可以AK,结果t3没有调出来,然后被林巨踩了. everyday被踩,很开心. 林巨真的好巨啊,这么多天已经总计虐我75分了. 1.玩具装箱 第一眼还以为是那道斜率优化dp,结果是个签到水题. / ...
- NX二次开发-创建直线UF_CURVE_create_line与NXOpen->CreateLine
NX11+VS2013 #include <uf.h> #include <uf_curve.h> #include <NXOpen/CurveCollection.hx ...
- NX二次开发-UFUN体找边UF_MODL_ask_body_edges
NX11+VS2013 #include <uf.h> #include <uf_ui.h> #include <uf_modl.h> #include <u ...
- Codeforces786B
传送门 n个节点且固定起点最短路,三种加边方法 1.u->v, 边权为w:2. u->[l, r], 边权为w:3. [l, r]->u, 边权为w AC_Code #include ...
- yolov1代码阅读
yolov1使用的backbone是由GoogLeNet启发而来,有24个卷积层,最后接2个全连接层,详细结构如下图: 检测网络的输入分辨率是448X448,最后的特征图大小为7X7.在特征图的每一个 ...
- LeetCode 1019. Next Greater Node In Linked List (链表中的下一个更大节点)
题目标签:Linked List, Stack 题目给了我们一个 Linked List,让我们找出对于每一个数字,它的下一个更大的数字. 首先把 Linked List 里的数字 存入 ArrayL ...
- Centos6.5安装mysql5.7.19
一.安装前准备 安装采用二进制包方式,软件包5.7.19版本下载地址:https://dev.mysql.com/downloads/mysql/ 选择MYSQL Community Server版本 ...
- Allow Pin Swapping Using these Methods options
Frm:http://techdocs.altium.com/display/ADOH/Pin,+Pair+and+Part+Swapping#Pin,PairandPartSwapping-Swap ...
- Codeforces 1166B - All the Vowels Please
题目链接:http://codeforces.com/problemset/problem/1166/B 个元音. 思路:先判断能否弄出至少5*5的行列,然后按顺序填字符串就好了. AC代码: #in ...