PythonWeb开发基础(二)WSGI概述和APP端开发

简介: 🌼WSGI概述和APP端开发

🌼WSGI概述和APP端开发

8b71db8a2d5049d39cb0db224842575d.png

上图是python中的一种协议,图中的操作顺序是从上往下(我第一次仔细看这种图,之前真不知道)。


WSGI解决了Server和app之间的协议问题。在WSGI中,Server主要是理解HTTP,而请求中的数据应该如何处理不是Server能够决定的,应该由app的编程者来决定如何处理。


任何Web框架,都是客户端有一个请求,就应该得到一个响应。至于响应是被套了多少层最后传过来的,并不重要。响应应该包含响应头和正文两部分,


响应头:应该由app自己发送。Server在调用app的时候,会提供一个方法,比如叫做start_response,然后app调用这个由Server提供的方法来发送响应头。

正文:还是由Server发送

至于为什么要设计成响应头由app发送,我现在还不知道耶。

WSGI服务——wsgiref

wsgiref是python中实现的一个参考库,并不用于商业开发,而是供你自己玩玩(学习使用),你可以在python的相关文档中找到关于它的介绍。

接下来是实操尝试,我们将以本机为服务器,建立一个WSGI服务,并在浏览器中访问它,对它发送http请求。

程序代码

from wsgiref.simple_server import make_server
def simple_app(environ:dict, start_response):
    # setup_testing_defaults(environ)
    print('len:', len(environ))
    for k, v in environ.items():
        print(k, v)
    print('-'*30)
    status = '200 OK'
    headers = [('Content-type', 'text/plain; charset=utf-8')]
    start_response(status, headers)
    ret = [("%s: %s\n" % (key, value)).encode("utf-8")
           for key, value in environ.items()]
    ret = ['Good good study, day day up!\n\n'.encode('utf-8')] + ret
    return ret  # 报文的正文部分,即网页内容
with make_server('0.0.0.0', 9000, simple_app) as httpd:
    print("Serving on port 9000...")
    try:
        httpd.serve_forever()
    except Exception as e:
        print(e)
    except KeyboardInterrupt:
        print('stop')
        httpd.server_close()

我们首先在python编辑器中写下这段代码,然后运行它。此时,我们的电脑本机就是一个持续运行的WSGI服务,随时准备接收来自客户端(浏览器)的http请求,并产生响应。

运行后,在python终端将显示:

Serving on port 9000...

然后我们在浏览器上输入地址:

http://127.0.0.1:9000/

在浏览器上显示为:

image.png

同时在python后台也会将environ打印出来:

image.png

environ

  • 是包含 Http 请求信息的 dict 对象
  • 常见的名称及含义
名称 含义
REQUEST_METHOD 请求方法,GET、POST 等
PATH_INFO URL 中的路径部分
QUERY_STRING 查询字符串
SERVER_NAME, SERVER_PORT 服务器名、端口
HTTP_HOST 地址和端口
SERVER_PROTOCOL 协议
HTTP_USER_AGENT UserAgent 信息

WSGI APP应用程序端

make_server('0.0.0.0', 9000, simple_app)

中的simple_app就是所谓的应用程序,需要满足三个条件:

  • 应用程序应该是一个可调用的对象
  • 这个可调用的对象应该接收两个参数
  • environstart_response
  • 必须返回一个可迭代对象

应用程序可以是函数实现,也可以是类。如果使用类实现有两种方式:

# 类实现 - 1
class Application:
    def _init_(self, environ, start_response):
        ...
    def _iter_(self):
        yield res_str
# 类实现 - 2
class Application:
    def _call_(self, environ, start_response):
        ...
        return [res_str]

Bug记录

我一开始以为是时代变迁,版本不一样所以我出bug了。后面继续看教程发现老师也出了这个bug,还是我心急了一点,没继续往下看就开始自己捣鼓了。

bug: not enough values to unpack

报错:ValueError: not enough values to unpack (expected 2, got 1)

复现代码:

d = {'a':1, 'b':2, 'c':3}
for k, v in d:
    print(k, v)  

修改:

d = {'a':1, 'b':2, 'c':3}
for k, v in d.items():
    print(k, v) 

相关文章
|
2月前
|
小程序 JavaScript 前端开发
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
uni-app开发微信小程序:四大解决方案,轻松应对主包与vendor.js过大打包难题
740 1
|
1天前
|
供应链 搜索推荐 API
1688APP原数据API接口的开发、应用与收益(一篇文章全明白)
1688作为全球知名的B2B电商平台,通过开放的原数据API接口,为开发者提供了丰富的数据资源,涵盖商品信息、交易数据、店铺信息、物流信息和用户信息等。本文将深入探讨1688 APP原数据API接口的开发、应用及其带来的商业收益,包括提升流量、优化库存管理、增强用户体验等方面。
19 6
|
2天前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
22 3
|
8天前
|
移动开发 小程序 PHP
校园圈子论坛系统采取的PHP语音和uni账号开发的小程序APP公众号H5是否只需要4800元?是的,就是只需要4800元
关于校园圈子论坛系统采用PHP语言和uni-app开发的小程序、APP、公众号和H5是否仅需4800元这个问题,实际上很难给出一个确定的答案。这个价格可能受到多种因素的影响
39 8
|
4天前
|
人工智能 小程序 数据处理
uni-app开发AI康复锻炼小程序,帮助肢体受伤患者康复!
近期,多家康复机构咨询AI运动识别插件是否适用于肢力运动受限患者的康复锻炼。本文介绍该插件在康复锻炼中的应用场景,包括康复运动指导、运动记录、恢复程度记录及过程监测。插件集成了人体检测、姿态识别等功能,支持微信小程序平台,使用便捷,安全可靠,帮助康复治疗更加高效精准。
|
25天前
|
人工智能 小程序 搜索推荐
uni app下开发AI运动小程序解决方案
本文介绍了在小程序中实现AI运动识别的解决方案。该方案依托于UNI平台,通过高效便捷的插件形式,实现包括相机抽帧控制、人体识别、姿态识别等在内的多项功能,无需依赖后台服务器,大幅提高识别效率和用户体验。方案内置多种运动模式,支持自定义扩展,适用于AI健身、云上赛事、AI体测等多场景,适合新开发和存量改造项目。
|
1月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
1月前
|
小程序 数据挖掘 UED
开发1个上门家政小程序APP系统,都有哪些功能?
在快节奏的现代生活中,家政服务已成为许多家庭的必需品。针对传统家政服务存在的问题,如服务质量不稳定、价格不透明等,我们历时两年开发了一套全新的上门家政系统。该系统通过完善信用体系、提供奖励机制、优化复购体验、多渠道推广和多样化盈利模式,解决了私单、复购、推广和盈利四大痛点,全面提升了服务质量和用户体验,旨在成为家政行业的领导者。
|
1月前
|
机器人
布谷直播App系统源码开发之后台管理功能详解
直播系统开发搭建管理后台功能详解!
|
2月前
|
NoSQL PHP Redis
布谷语音app源码服务器环境配置及技术开发语言
布谷语音app源码服务器环境配置及技术语言研发。。

热门文章

最新文章

下一篇
DataWorks