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版本的 ...
随机推荐
- 重新使用Java的七个理由
译者注:此文系作者于2011年7月11发表于OnJava O'Reily正在庆祝Java7的发布,以及7月25日到27日即将在波兰开展的 OSCON Java 大会. Java宣告回归了,同胞们.当然 ...
- equals与”==”的区别
本文由 ImportNew - 刘志军 翻译自 Javarevisited.如需转载本文,请先参见文章末尾处的转载要求. equals()和"=="操作用于对象的比较,检查俩对象的 ...
- S2P销讯通-SFE人才对企业管理层至关重要
SFE这一概念,最初由外资企业引入,如今已逐渐被内资企业所采纳并融入其组织结构中,不少企业正积极构建这一部门. 1 我们观察到,近两年企业内对于SFE部门所需的人才需求急剧上升.这一部门,在外资企业中 ...
- 介绍 MSTest Runner - CLI, Visual Studio 等更多
介绍 MSTest Runner - CLI, Visual Studio 等更多 https://devblogs.microsoft.com/dotnet/introducing-ms-test- ...
- LeetCode题集-9 - 回文数
题目:给你一个整数 x ,如果 x 是一个回文整数,返回 true :否则,返回 false . 回文数 是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 例如,121 是回文,而 123 不 ...
- 中电金信:ChatGPT一夜爆火,知识图谱何以应战?
随着ChatGPT的爆火出圈 人工智能再次迎来发展小高潮 那么作为此前搜索领域的主流技术 知识图谱前路又将如何呢? 事实上,ChatGPT也 ...
- k8s.HPA.使用自定义指标Pod自动扩容
k8s.HPA.使用自定义指标Pod自动扩容 环境 env : kubernetes v1.22 metrics-server 0.6.1 prometheus v2.36.1 prometheus- ...
- Elm 和 Jetpack Compose 殊途同归及 MVVM 缺点分析
Html.lazy · An Introduction to Elm 可能搞 vdom 的都会到 lazy renderer 这一步,react 可能也可以这么搞或者已经这么搞了我不知道,Elm 提到 ...
- 【数据库】MongoDB服务启动失败的问题。
1.确保MongoDB所在文件夹拥有所有权限 2.确保打开CMD窗口是以管理员身份运行的 3.配置文件中的路径应该为完整路径,且不包含空格和特殊字符(不建议包含) systemLog: destina ...
- 第36次ccf-csp题解(思维)
比赛链接 https://sim.csp.thusaac.com/contest/36/home 比赛感受 这会刚打完上海icpc,比起区域赛的题,这个简单太多了. 感受还不错,写的很顺手.除了第 ...