当前位置: 首页 > news >正文

做网站制作的公司/冯站长之家官网

做网站制作的公司,冯站长之家官网,怎样建立自己的视频号,wordpress装饰设计主题前言Bottle是一个Python Web框架。整个框架只有一个文件,不到4k行的代码,没有Python标准库以外的依赖,却包含了路由、模板和插件等Web框架常用功能。通过阅读Bottle源码来了解什么是Web框架和Web框架是怎么工作是再合适不过了。由于Bottle是一…

前言

Bottle是一个Python Web框架。整个框架只有一个文件,不到4k行的代码,没有Python标准库以外的依赖,却包含了路由、模板和插件等Web框架常用功能。通过阅读Bottle源码来了解什么是Web框架和Web框架是怎么工作是再合适不过了。由于Bottle是一个支持WSGI的框架,在阅读源码之前,我们先来了解什么是WSGI。

注意:文中使用的Bottle版本为0.12.13。

WSGI

4dae4ec78651ddc51ad412032cc11aab.png

一般的Web服务器只能处理静态页面。如果涉及到动态内容,服务器就需要与Java/Python/Ruby等服务器语言进行交互,将内容交给它们处理。由于大多数的Web服务器都是用C写,它们不能直接执行服务器语言,所以两者之间需要一座桥(在实际应用中,通常会在Web服务器和WSGI应用中间添加一个应用服务器来支持WSGI)。而在Python中,WSGI就是这么一座桥。WSGI的实现分两个部分,一是服务器,二是应用程序。下面来看一看它们各自是什么样子的,以及两者之间是如何协作的。

1 class Server: 2 3 def __init__(self, server_address): 4 self.server_address = server_address 5 6 def set_app(self, application): 7 self.app = application 8 9 def serve_forever(self):10 while True:11 # socket.accept()12 if request_comein():13 self.handle_request()14 15 def handle_request(self):16 request_data = self.get_request()17 self.parse_request(request_data)18 environ = self.get_environ()19 result = self.application(environ, self.start_response)20 self.send_response(result)21 22 def start_response(self, status, headers, exc_info):23 pass24 25 def get_environ(self):26 pass27 28 def get_request(self):29 pass30 31 def parse_request(self, text):32 pass33 34 def send_response(self, message):35 pass36 37 38 def make_server(host, port, app, server=Server):39 server = server((host, port))40 server.set_app(app)41 return server42 43 def simple_app(environ, start_response):44 status = '200 OK'45 response_headers = [('Content-type', 'text/plain')]46 start_response(status, response_headers)47 return 'Hello World!'48 49 if __name__ == '__main__':50 server = make_server('localhost', 8080, simple_app)51 server.serve_forever()

限于篇幅,这个服务器模型省略了很多细节,如果你想要一个简单又能运行的WSGI服务器,可以参考这里Let's Build A Web Server.Part 2.。

83d917695db31df139de583f0245fd3b.png

服务器在接收到请求后,对请求报文的信息进行解析,结果保存在一个名为environ的字典中。随后以environ与处理头信息的start_response函数作为参数,调用应用程序 application(environ, start_response) 。最后将应用的结果组成新的响应,发送回客户端。

在应用程序方面,WSGI应用是一个可调用的对象。它可以是一个函数,方法,类,或者是一个带有__call__方法的实例。上面的应用就是一个函数。

当各种服务器和应用程序/框架都按照WSGI的标准进行开发时,我们可以根据需求自由地组合不同的服务器和框架。

Bottle最简应用

在简单了解完WSGI后,我们回到Bottle,来观察一个Bottle应用是什么样子的,如何运行,跟我们的模型有什么区别。

1 from bottle import Bottle, run2 3 app = Bottle()4 5 @app.route('/hello')6 def hello():7 return 'Hello World!'8 9 run(app, host='localhost', port=8080, server='wsgiref')

现在运行这个程序,用浏览器访问地址'localhost:8080/hello'就会看到'Hello World!'。

1. 与上面的应用不同,Bottle应用是一个实例。按照WSGI规定,Bottle对象要实现__call__方法:

1 def __call__(self, environ, start_response):2 ''' Each instance of :class:'Bottle' is a WSGI application. '''3 return self.wsgi(environ, start_response)

所以这个Bottle.wsgi方法就是服务器调用Bottle应用的入口,同时也是我们阅读源码的入口。

2. @app.route()这个装饰器将一个函数绑定到一个URL上。当我们访问'localhost:8080/hello'时,hello函数就会被调用。

3. Bottle默认的服务器是wsgiref(Python标准库里的一个WSGI简单实现)。当然Bottle还为许多服务器编写了适配器(Adapter),只需要改变server的值,run()函数会根据服务器的名字寻找相应的适配器。无需编写额外的代码。

run函数和适配器部分代码:

1 def run(app=None, server='wsgiref', host='127.0.0.1', port=8080, 2 interval=1, reloader=False, quiet=False, plugins=None, 3 debug=None, **kargs): 4 if server in server_names: 5 server = server_names.get(server) 6 if isinstance(server, basestring): 7 server = load(server) 8 if isinstance(server, type): 9 server = server(host=host, port=port, **kargs)10 if not isinstance(server, ServerAdapter):11 raise ValueError("Unknown or unsupported server: %r" % server)12 ...13 server.run(app)14 15 class MeinheldServer(ServerAdapter):16 def run(self, handler):17 from meinheld import server18 server.listen((self.host, self.port))19 server.run(handler)

最后

在本文中,我们简单介绍了在WSGI标准下服务器和应用如何进行交互。下一篇,我们继续围绕这个最简应用,讲讲与@app.route()有关的路由功能。

http://www.lbrq.cn/news/1114525.html

相关文章:

  • 香港的网站不需要备案吗/核心关键词和长尾关键词举例
  • 网站浏览记录怎么做/专门搜索知乎内容的搜索引擎
  • 宝安小学网站建设/交换链接的作用
  • php做的网站facebook/灯塔网站seo
  • 网站怎么做子分类/windows优化大师怎么彻底删除
  • 在常州 做兼职上什么网站/微信上怎么做广告推广
  • 做app网站需要什么/百度关键词指数排行
  • 用什么做网站开发/网络推广是什么专业
  • 个人网站怎么做扫码支付/如何在各种网站投放广告
  • wordpress清理过期文件夹/北京seoqq群
  • 网站首页图片效果/深圳网站制作推广
  • 封面上的网站怎么做/百度应用商店下载
  • 网站域名需要申请/域名查询入口
  • 公司内网站建设/引流推广方法
  • 网页制作平台哪个好用/百度关键词优化系统
  • 在东莞找工作上哪个网站/搜索引擎优化的各种方法
  • 信息化建设官方网站/seo刷排名软件
  • 石家庄网站优化排名推广/百度热搜seo
  • 免费浏览的网站入口/seo公司网站
  • 小鼠标网站建设/b站2020推广网站
  • 网站开发需要什么基础/百度首页排名优化公司
  • 柳州公积金网站/网络营销的现状及问题
  • 新网站改关键词/宣传推广图片
  • 网站广告弹窗代码/2023免费网站推广大全
  • 绿色企业网站源码/注册网站需要多少钱
  • 3g微网站/app推广赚佣金
  • 运维为什么没人干/2020做seo还有出路吗
  • 内网做网站外网访问/百度手机助手下载正版
  • 网站制作可以/台州专业关键词优化
  • 怎么做跨境电商流程及步骤/seo外链发布平台
  • centos中新增硬盘挂载文件夹
  • 闲庭信步使用图像验证平台加速FPGA的开发:第二十课——图像还原的FPGA实现
  • 【代码】基于CUDA优化的RANSAC实时激光雷达点云地面分割
  • flutter下的webview适配rem问题
  • 22.计算指定范围内数字的幂次和
  • redisson tryLock