<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开发之中使 ...
随机推荐
- canvas画布导出图片并下载
近期在学习关于画布知识,关于 画布导出图片, 在导出jpeg格式的图片时,会发现图片背景色变成了黑色,原因是画布透明的地方 默认转成了黑色,可以在绘制画布前设置透明处背景色为白色. // 背景色转换成 ...
- Openssl命令的使用
用途: pkcs8格式的私钥转换工具.它处理在PKCS#8格式中的私钥文件.它可以用多样的PKCS#5 (v1.5 and v2.0)和 PKCS#12算法来处理没有解密的PKCS#8 Private ...
- 基本算数定理快速求约数个数——lightoj1208
#include<bits/stdc++.h> using namespace std; #define ll long long #define maxn 1000005 bool vi ...
- Go 程序开发的注意事项
Go 程序开发的注意事项 1) Go 源文件以 "go" 为扩展名. 2) Go 应用程序的执行入口是 main()函数. 这个是和其它编程语言(比如 java/c) ...
- element ui 查询过滤
1.搜索框v-model="searchText" 2.data 声明searchText:"" 3.el-table:data="tables&qu ...
- hexo next主题深度优化(四),自定义一个share功能,share.js。
文章目录 背景: 开始: 引入资源: 代码 关键的一步 附:方便学习的小demo 一次成功后还出现上面的bug 结束 2018.12.23发现bug(读者可忽略) 个人博客:https://mmmmm ...
- 漏洞验证系列--MongoDB未授权访问
本系列文章旨在对于有一定网络安全基础的人员,在日常工作中扫描出来的各种漏洞,如何进行验证,以区分该漏洞是否存在或是扫描器误报.请勿应用非法途径. 本漏洞是由于MongoDB未设置访问权限,用户可以直接 ...
- spring data jpa使用 (转:http://www.manongjc.com/article/25284.html#four_1_7)
Jap相关的使用 时间:2018-12-18 本文章向大家介绍Jap相关的使用,主要包括Jap相关的使用使用实例.应用技巧.基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下. ...
- 【转】tomcat系统架构分析
https://blog.csdn.net/wsl211511/article/details/51622991
- ECMAScript中所有参数传递的都是值,不可能通过引用传递参数
今天在看JavaScript高级程序设计(第三版)时,看到了这个问题:ECMAScript中所有参数传递的都是值,不可能通过引用传递参数. 在我的印象中,其他语言比如Java,C++等,传递参数有两种 ...