参考原文

  Python廖雪峰

WSGI接口

  WSGI(Web Server Gateway Interface)是一个接口,用来屏蔽底部的细节(如TCP的建立连接,HTTP原始请求和响应格式等)。WSGI接口定义非常简单,只需要Web开发者实现一个函数,就可以响应客户端的HTTP请求

  这个函数有两个参数:environ:包含所有的HTTTP请求的dict对象;start_response:一个发送HTTP响应的函数。

这两个参数,我们是没有办法提供的,是需要符合WSGI规范的服务器来提供的。

  Python内置了一个WSGI服务器,这个模块就wsgiref,是用纯Python编写的,不考虑任何的运行效率,仅供开发和测试使用。接下来,我们就来实现一个基本的响应请求的处理。

  首先,编写hello.py,用于实现Web应用程序的WSGI处理函数:

#hello.py

def application(environ, start_response):
#返回响应的首部
start_response('200 OK',[('Content-Type', 'text/html')])
#返回响应的主体
return [b'<h1>Hello,world<h1>']

  再编写一个server.py,用于启动WSGI服务器,加载application()函数:

#server.py
#导入响应的模块函数:
from wsgiref.simple_server import make_server
#导入先前编写的application函数:
from hello import application #创建一个服务器,IP地址为空,渡口是8000,处理函数是application
httpd = make_server('', 8000, application)
print('Serving HTTP on port 8000...')
#开始监听HTTP请求:
httpd.serve_forever()

  在终端运行server.py,并在浏览器输入地址:localhost:8000,效果如下图:

  在命令行可以看到wsgiref打印的log:

  我们也可以根据environ里的参数信息,来生成动态的HTML。

  总结:无论多么复杂的Web应用程序,入口都是一个WSGI处理函数。HTTP请求的所有输入信息都可以通过environ获得,HTTP响应的输出都可以通过start_response()加上函数返回值作为Body。

使用Web框架

  了解了WSGI框架,我们发现:其实一个WebAPP,就是一个WSGI的处理函数,针对每个HTTP请求进行响应。但是WSGI抽象程度还是比较低,我们可以使用Web框架来实现WebAPP。

  Python中的Web框架非常多,我们先直接选择一个比较流行的Web框架——Flask来使用。

  首先使用pip(Python包管理工具)来安装Flask:

sudo apt install python-pip #安装pip

pip install flask  #安装flask

  然后编写一个app.py,处理3个URL请求,分别是

  • GET / : 首页,返回Home页
  • GET /signin : 登陆页,显示登陆表单,用于用户登陆
  • POST /signin : 处理用户输入的登陆表单,返回登陆结果

  Flask通过Python的装饰器在内部自动地把URL和函数给关联起来,所以我们写出的代码应该这样:

from flask import Flask
from flask import request app = Flask(__name__) @app.route('/', methods=['GET', 'POST'])
def home():
return '<h1>Home</h1>' @app.route('/signin', methods=['GET'])
def signin_form():
return '''<form action="/signin" method="post">
<p><input name="username" type="text"></p>
<p><input name="password" type="password"></p>
<p><input type="submit" value="Sign In"></p>
</form>
''' @app.route('/signin', methods=['POST'])
def signin():
if request.form['username'] =='admin' and request.form['password'] =='password':
return '<h3>Hello,admmin!</h3>'
return '<h3>Bad username or password!</h3>' if __name__ == '__main__':
app.run()

  运行python  app.py,Flask自带的server在端口5000上监听:

  打开浏览器,输入首页地址:http://localhost:5000/

  继续输入http://localhost:5000/signin:

  输入预设的用户名admin和密码password,登录成功:

  输入错误的信息:

  

  

Python Web开发的更多相关文章

  1. Redis的Python实践,以及四中常用应用场景详解——学习董伟明老师的《Python Web开发实践》

    首先,简单介绍:Redis是一个基于内存的键值对存储系统,常用作数据库.缓存和消息代理. 支持:字符串,字典,列表,集合,有序集合,位图(bitmaps),地理位置,HyperLogLog等多种数据结 ...

  2. windows下python web开发环境的搭建

    windows下python web开发环境: python2.7,django1.5.1,eclipse4.3.2,pydev3.4.1 一. python环境安装 https://www.pyth ...

  3. Java Web开发和Python Web开发之间的区别

    今天的文章讨论了Java Web开发和Python Web开发之间的区别.我不鼓励我们在这里从Java Web迁移到Python Web开发.我只是想谈谈我的感受.它不一定适合所有情况,仅供我们参考. ...

  4. Python Web开发中的WSGI协议简介

    在Python Web开发中,我们一般使用Flask.Django等web框架来开发应用程序,生产环境中将应用部署到Apache.Nginx等web服务器时,还需要uWSGI或者Gunicorn.一个 ...

  5. 关于测试驱动的开发模式以及实战部分,建议看《Python Web开发测试驱动方法》这本书

    关于测试驱动的开发模式以及实战部分,建议看<Python Web开发测试驱动方法>这本书

  6. python web 开发学习路线

    转载,备着 自己目前学习python web 开发, 经过两个月的摸索,目前对web开发有了浅显的认识,把自己的学习过程贴出来.1.python入门推荐老齐<从零开始学python>,&l ...

  7. 转载:Python Web开发最难懂的WSGI协议,到底包含哪些内容?

    原文:PSC推出的第二篇文章-<Python Web开发最难懂的WSGI协议,到底包含哪些内容?>-2017.9.27 我想大部分Python开发者最先接触到的方向是WEB方向(因为总是有 ...

  8. python web开发——django学习(一)第一个连接mysql数据库django网站运行成功

    1.新建一个项目 2.新建一些文件夹方便管理 3.新建一个项目叫message  4.连接数据库 python web开发Django连接mysql 5.在数据库里自动生成django的表  6.运行 ...

  9. Python Web开发:Django+BootStrap实现简单的博客项目

    创建blog的项目结构 关于如何创建一个Django项目,请查看[Python Web开发:使用Django框架创建HolleWorld项目] 创建blog的数据模型 创建一个文章类 所有开发都是数据 ...

  10. 2020 python web开发就业要求锦集

    郑州 Python程序员 河南三融云合信息技术有限公司 6-8k·12薪 7个工作日内反馈 郑州 1个月前 本科及以上2年以上语言不限年龄不限 微信扫码分享 收藏 Python程序员 河南三融云合信息 ...

随机推荐

  1. android开发真机调试 相关东东

    android开发真机调试 相关东东 我们做android开发的时候,可以用模拟器,也可以真机调试,但是电脑配置不高的话,模拟器,真的是慢的有的一说,所以我一直倾向于用真机调试,但是问题也就来了,模拟 ...

  2. YTU 2677: 韩信点兵

    2677: 韩信点兵 时间限制: 1 Sec  内存限制: 128 MB 提交: 61  解决: 38 题目描述 刘邦问韩信:"你觉得我可以带兵多少?"韩信:"最多十万. ...

  3. 关于flask的错误:ImportError: cannot import name 'Flask'

    刚开始接触flask,新创建后不能运行,报错如下图: 导致该错误有两种可能,没安装flask:文件名为flask. 可尝试如下两种方法解决: 方法一:若没安装过flask,则进入cmd,输入pip i ...

  4. codeforces round 416 div2 补题 CF 811 A B C D E

    A. Vladik and Courtesy 水题略过 #include<cstdio> #include<cstdlib> #include<cmath> usi ...

  5. 移动前端第二弹:善用meta

    前言 在移动前端第一弹:viewport详解中,我们讲了viewport,那是一个关于meta的故事.这次我们会就将meta这个故事讲得更广阔.更有意思一些. 写过HTML的童鞋,应该都对这个不陌生, ...

  6. 数据仓库 VS 数据库

    数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non-Volatile).反映历史变化(Time Varian ...

  7. linux中touch命令参数修改文件的时间戳(转载)

    转自:http://os.51cto.com/art/200908/144237.htm linux中touch命令参数不常用,一般在使用make的时候可能会用到,用来修改文件时间戳,或者新建一个不存 ...

  8. 策略设计测试用例实践(2)--Pairwise(转)

    一.关于”好的“测试用例 在设计测试用例的时候有多种设计方法和策略可以使用,使得测试用例设计得更丰富,尽可能覆盖到更多的程序路径和功能场景.常见的测试用例设计方法被提到最多的就是等价类划分.边界值分析 ...

  9. 疫情控制 2012年NOIP全国联赛提高组(二分答案+贪心)

    P1084 疫情控制 题目描述 H 国有 n 个城市,这 n 个城市用 n-1 条双向道路相互连通构成一棵树,1 号城市是首都,也是树中的根节点. H 国的首都爆发了一种危害性极高的传染病.当局为了控 ...

  10. [Swift通天遁地]一、超级工具-(10)使用地图视图MKMapView的相机功能实现创建三维地图

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...