wsgi服务器
wsgi服务器
DRP原则:Don't repeat yourself
1、wsgi接口:全称 Web Server Gateway Interface (web服务器网关接口)
请求:request
响应:response
#author: wylkjj
#date:2019/6/6
from wsgiref.simple_server import make_server
def application(environ,start_response):
#通过environ封装成一个所有请求信息的对象
start_response('200 OK',[('Content-Type','text/html')])
return [b'<h1>Hellow,Web!</h1>']
#封装socket对象以及准备过程(socket,bind,listen)
httpd = make_server('',8080,application)
print('Serving HTTP on port 8000...')
#开始监听请求:
httpd.serve_forever()
页面跳转的流程
#author: wylkjj
#date:2019/6/8
from wsgiref.simple_server import make_server
def application(environ,start_response):
#ptint('environ',environ["PATH_INFO"])
start_response('200 OK', [('Content-Type', 'text/html')])
path=environ["PATH_INFO"]
if path=='/book':
return [b'<h1>hello book!</h1>']
elif path=='/web':
return [b'<h1>hello wed!</h1>']
else:
return ["<h1>404</h1>".encode("utf8")]
return [b'<h1>hello world!</h1>']
httpd=make_server('',8080,application)
print('Serving HTTP on port 8000...')
httpd.serve_forever()
最简版:
#author: wylkjj
#date:2019/6/8
from wsgiref.simple_server import make_server
def f1(request):
return [b'<h1>hello book!</h1>']
def f2(request):
return [b'<h1>hello wed!</h1>']
def routers():
urlpatterns=(
('/book',f1),
('/web',f2),
)
return urlpatterns
def application(environ,start_response):
#ptint('environ',environ["PATH_INFO"])
start_response('200 OK', [('Content-Type', 'text/html')])
path=environ["PATH_INFO"]
urlpatterns = routers()
func=None
for item in urlpatterns:
if item[0] == path:
func=item[1]
break
if func:
return func(environ)
else:
return ["<h1>404</h1>".encode("utf8")]
# if path=='/book':
# return f1(environ)
# elif path=='/web':
# return f2(environ)
# else:
# return ["<h1>404</h1>".encode("utf8")]
return [b'<h1>hello world!</h1>']
httpd=make_server('',8080,application)
print('Serving HTTP on port 8000...')
httpd.serve_forever()
2、动态显示时间:
.py:
#author: wylkjj
#date:2019/6/8
from wsgiref.simple_server import make_server
import time
def current_time(request):
# 模板
cur_time = time.ctime(time.time())
f = open("current_time.html", "rb")
data = f.read()
data = str(data, "utf8").replace("!cur_time!", str(cur_time))
return [data.encode("utf8")]
def routers():
urlpatterns=(
("/current_time",current_time),
)
return urlpatterns
def application(environ,start_response):
start_response('200 OK', [('Content-Type', 'text/html')])
path=environ["PATH_INFO"]
urlpatterns = routers()
func=None
for item in urlpatterns:
if item[0] == path:
func=item[1]
break
if func:
return func(environ)
else:
return ["<h1>404</h1>".encode("utf8")]
return [b'<h1>hello world!</h1>']
httpd=make_server('',8080,application)
print('Serving HTTP on port 8000...')
httpd.serve_forever()
html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>current_time: !cur_time! </h1>
</body>
</html>
wsgi服务器的更多相关文章
- werkeug的WSGI服务器解析
werkeug的WSGI服务器解析 1. WSGI 1.1. wsgi与flask flask默认的wsgi引用自wekurg 声明app:FLASK对象 app.run() run_ ...
- WSGI服务器实践二--实践一个基本功能的WSGI服务器
由于各种PYTHON框架都实现了WSGI接口,所以,通用性很广的. 在调试过程过,有一个字母拼错,搞了一个小时. 看来PYTHON自带的编辑器没有高亮,不爽. 在有提示的编辑器里一看就看了来啦..:) ...
- 标准库源码--wsgi服务器
功能模块化带来可自由组装的便利: 使用python的mixin特性装配 class ThreadHTTPServer(ThreadingMixin, HTTPServer): pass 上面表示1个请 ...
- 自己写一个 wsgi 服务器运行 Django 、Tornado 等框架应用
https://blog.csdn.net/heybob/article/details/52288006
- WSGI协议以及对服务器的影响
下面的内容纯属个人学习心得,如果对于我的观点有疑问,敬请留言,我将虚心向大牛学习. WSGI的全称是WEB SERVICE GATEWAY INTERFACE.WSGI 不是服务器,不是API,也不是 ...
- 使用Python开发轻量级的Web框架以及基于WSGI的服务器来实现一个网站页面
说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目说明 二丶数据准备 三丶使用网络TCP开发一个基于WSGI协议的Web服务器 四丶使用python3开发一个轻量级的 ...
- WSGI——python web 服务器网关接口
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826084.html 一:服务器.服务器软件.应用程序(后台) 我们常说“服务器”,实际上服务器是一个很宽 ...
- Django基础之wsgi
Django 一 什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演 ...
- Web服务精讲–搭个 Web 服务器(二)
导读 曾几何时,你所选择的 Python Web 框架会限制你所可选择的 Web 服务器,反之亦然.如果某个框架及服务器设计用来协同工作的,那么一切正常. 在第一部分中,我提出了一个问题:“如何在你刚 ...
- WSGI
[WSGI] WSGI:Web Server Gateway Interface. WSGI接口定义非常简单,它只要求Web开发者实现一个函数,就可以响应HTTP请求.我们来看一个最简单的Web版本的 ...
随机推荐
- .NET9 - 新功能体验(三)
书接上回,我们继续来聊聊.NET9和C#13带来的新变化. 01.Linq新方法 CountBy 和 AggregateBy 引入了新的方法 CountBy 和 AggregateBy后,可以在不经过 ...
- apisix启动报错undefined symbol: EVP_KDF_ctrl, version OPENSSL_1_1_1b
报错内容 2024/08/06 16:56:13 [error] 154236#154236: *7039 [lua] plugin.lua:110: load_plugin(): failed to ...
- ETCD存储满了如何处理?
一.前言 当运行 ETCD 日志报 Erro: mvcc database space exceeded 时,或者查看健康状态显示 failed to commit proposal: Active ...
- golang之json.RawMessage
RawMessage 具体来讲是 json 库中定义的一个类型.它实现了 Marshaler 接口以及 Unmarshaler 接口,以此来支持序列化的能力.注意上面我们引用 官方 doc 的说明. ...
- golang之常用方法/函数
1. io.Reader转化为字符串, byte切片 import "bytes" func StreamToByte(stream io.Reader) []byte { buf ...
- 基于Github gist的代码片段管理工具Lepton
Lepton主要功能 无限制的公共/私人片段 无限制的标签 语言组 Markdown支持 Jupyter Notebook查看器支持 macOS / Win / Linux客户端 GitHub Ent ...
- 《前端运维》五、k8s--4机密信息存储与统一管理服务环境变量
一.储存机密信息 Secret 是 Kubernetes 内的一种资源类型,可以用它来存放一些机密信息(密码,token,密钥等).信息被存入后,我们可以使用挂载卷的方式挂载进我们的 Pod 内.当然 ...
- uni-app下webview支付宝支付调起问题
前情 uni-app是我很喜欢的跨平台框架,它能开发小程序,H5,APP(安卓/iOS),对前端开发很友好,自带的IDE让开发体验也很棒,公司项目就是主推uni-app. 因疫情影响,公司不能组织聚餐 ...
- C/C++源码扫描系列- codeql 篇
首发于 https://xz.aliyun.com/t/9275 概述 codeql 是一个静态源码扫描工具,支持 c, python, java 等语言,用户可以使用 ql 语言编写自定义规则识别软 ...
- bluetooth_stack开源蓝牙协议栈源码分析与漏洞挖掘
文章首发地址 https://xz.aliyun.com/t/9205 前言 网上闲逛的时候,发现github有个开源的蓝牙协议栈项目 https://github.com/sj15712795029 ...