参考原文

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

defapplication(environ, start_response):#返回响应的首部

start_response('200 OK',[('Content-Type', 'text/html')])#返回响应的主体

return [b'

Hello,world

']

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

#server.py#导入响应的模块函数:

from wsgiref.simple_server importmake_server#导入先前编写的application函数:

from hello importapplication#创建一个服务器,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 importFlaskfrom flask importrequest

app= Flask(__name__)

@app.route('/', methods=['GET', 'POST'])defhome():return '

Home

'@app.route('/signin', methods=['GET'])defsignin_form():return ''' '''@app.route('/signin', methods=['POST'])defsignin():if request.form['username'] =='admin' and request.form['password'] =='password':return '

Hello,admmin!

'

return '

Bad username or password!

'

if __name__ == '__main__':

app.run()

View Code

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

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

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

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

输入错误的信息:

pythonweb开发-Python Web开发相关推荐

  1. pythonweb开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  2. python web开发-Python Web开发从入门到精通

    Python Web开发从入门到精通循序渐进地讲解了Python Web开发的核心知识,并通过具体实例的实现过程演示了Web开发程序的流程.Python Web开发从入门到精通共15章,内容包括Pyt ...

  3. pythonweb开发-手把手教你写网站:Python WEB开发技术实战

    摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...

  4. Python web 开发:部署一个3行代码的wsgi app

    通过前面的两篇: Python Web开发:从 wsgi 开始 Python Web开发:开发wsgi中间件 我们已经知道我们平时开发的 django.flask 等 python web 项目本质上 ...

  5. python web-手把手教你写网站:Python WEB开发技术实战

    摘要:本文详细介绍了Python WEB开发的基础入门.以一个博客站点的开发为例讲解了基于Django框架开发WEB站点的全过程.通过本文的学习可以快速掌握基于Django的Python WEB的开发 ...

  6. php和python web开发-php与python谁更适合web开发?为什么?

    就单纯PHP和python比较的话,甚至说是强大的Java(Java的优势是复杂业务逻辑,企业级应用,当然电商领域例如阿里也喜欢)来说,PHP就是为Web而生的!开课通知:php中文网<第10期 ...

  7. java和python的web自动化有什么区别-Java Web开发和Python Web开发之间的区别

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

  8. python web开发第三方库_Python Web开发中常用的第三方库

    Python Web开发中常用的第三方库 TL;DR 经常有朋友问,如果用Python来做Web开发,该选用什么框架?用 Pyramid 开发Web该选用怎样的组合等问题?在这里我将介绍一些Pytho ...

  9. python论坛app_理解python web开发,轻松搭建web app!

    大家好,今天分享给大家的是理解python web开发,轻松搭建web app,希望大家学有所获! 因为 python代码的优雅美观且易于维护这一特点,越来越多的人选择使用 Python做web开发. ...

最新文章

  1. python2转python3文件
  2. Java 8 一行代码解决了空指针问题,太厉害了!
  3. 关于计算机读研的小建议
  4. 软键盘挡住WebView中输入框解决方法
  5. Learning to Learn:图神经网络上的元学习
  6. 三连冠!百度PARL 拿下NeurIPS 2020电网调度竞赛双赛道冠军
  7. VC++多线程编程[转]
  8. vue打包代码反编译_Android逆向反编译代码注入APK过程思路分析
  9. ubuntu下使用python将ppt转成图片_Ubuntu下使用Python实现游戏制作中的切分图片功能...
  10. mysql for update场景_一个mysql死锁场景实例分析
  11. chararray遍历_数组常用的遍历方法 ——总结
  12. GlobalSight在翻译社区中与开源大放异彩
  13. MongoDB驱动程序快速入门
  14. 【程序员的吃鸡大法】利用OCR文字识别+百度算法搜索,玩转冲顶大会、百万英雄、芝士超人等答题赢奖金游戏...
  15. 用python开发的云监控平台_edwin报警和监控平台开源了(python源码)
  16. css clip-path 画五角星
  17. [开发浏览器实战]关于Firefox火狐浏览器的说明一二(国内版 国际版区别 账号切换 插件-恢复关闭的标签页 插件-tempermonkey油猴)
  18. Canvas—2D 绘图
  19. MySQL按天统计一周没有数据补0
  20. “天地不仁,以万物为刍狗”的真正意思

热门文章

  1. html5在线api,HTML5 历史记录API
  2. 趣谈网络协议笔记-二(第七,八,九讲)
  3. (整理类)文件描述符,文件描述符标志,文件状态标志
  4. 开发日记-20190712 关键词 读书笔记 《Perl语言入门》Day 8
  5. 开发日记-20190405
  6. MLPclassifier,MLP 多层感知器的的缩写(Multi-layer Perceptron)
  7. 威胁报告:mDNS 反射式 DDoS 攻击
  8. Cassandra 单机入门例子——有索引
  9. Elasticsearch压缩索引——lucene倒排索引本质是列存储+使用嵌套文档可以大幅度提高压缩率...
  10. pom.xml常用元素解析