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

Werkzeug工具包学习-官方例子Shortly分析

为了学习werkzeug的wsgi框架工具,今天真对官网的例子进行调试运行。涉及到了werkzeug工具包,jinja2前端模版,以及redis内存库,之后可以灵活定制自己主页。再次,作以记录。

首先,参考官网流程完成部署,当然,Python2和Python3有一定区别,需要大家注意,官网代码都是一句Python2.7的。这里主要涉及到在2.7中可以import urlparse,但3.5中需要用urllib.parse.urlparse。

官网:http://werkzeug.pocoo.org/docs/0.11/tutorial/#introducing-shortly

中文翻译后的网站:http://werkzeug-docs-cn.readthedocs.io/zh_CN/latest/tutorial.html#step-1

代码文件: https://github.com/pallets/werkzeug/tree/master/examples/shortly

按着代码部署,解决一些琐碎问题,就可以运行了(自己加了一个背景而已):

 

代码网上都是有的,所以这里不多说了,主要记录一下我对werkzeug运行流程的理解:

1. run_simple('127.0.0.1', 5000, app, use_debugger=True, use_reloader=True)函数中传入app实例,即为Shortly类的对象,Shortly是处理逻辑业务的类。在调用Shortly的__init__()方法初始化实例的时候,初始化了redis的配置template所在路径jinja2环境配置url的映射关系

2. 通过__call__()方法调用wsgi_app(self, environ, start_response)方法,传入environ(上传请求的相关信息)和start_response实例。之后,在wsgi_app中调用

  dispatch_request(request)方法去分发请求,即根据url映射关系通过请求的url找到对应的方法。

3. 在dispatch_request中,重新组装了方法名称,使其可以调用相关方法,并加入错误页码404处理。其中adapter = self.url_map.bind_to_environ(request.environ)和endpoint, values = adapter.match()将请求信息的url和map中的endpoint匹配返回对应的endpoint,通过return getattr(self, 'on_' + endpoint)(request, **values)组装成对应方法名称,并调用。

4. 执行对应方法,处理逻辑,用数据填充模版,并渲染,之后返回。或者重定向到别的节面。

 

大体流程如上,了解后发现该项目可以有很多很多扩展,比如我的个人主页的首页:

http://119.29.207.141:5000

转载于:https://www.cnblogs.com/yuanzhaoyi/p/6082036.html

相关文章:

  • 《java与模式》学习系列——责任链模式
  • iOS中的交换空间(swap space)
  • 《java与模式》学习系列——命令模式
  • Windows10中无法打开这个应用的解决方案
  • sqlbulkcopy 使用DataTable作为数据源的数据类型问题--来自数据源的String类型的给定值不能转换为指定目标列的类型 uniqueidentifier...
  • 《java与模式》学习系列——状态模式
  • debian终端菱形乱码修复
  • 《java与模式》学习系列——访问者模式
  • 《java与模式》学习系列——解释器模式
  • C#调用windwos系统数据源配置
  • 《java与模式》学习系列——调停者模式
  • [hibernate]基本值类型映射之日期类型
  • 《java与模式》学习系列——建造者模式
  • 【PL/SQL练习】基本的PL/SQL语句
  • 《java与模式》学习系列——原始模型模式
  • 自己简单写的 事件订阅机制
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 2019年如何成为全栈工程师?
  • Debian下无root权限使用Python访问Oracle
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Java-详解HashMap
  • Meteor的表单提交:Form
  • python 学习笔记 - Queue Pipes,进程间通讯
  • React-Native - 收藏集 - 掘金
  • vue-router 实现分析
  • 大型网站性能监测、分析与优化常见问题QA
  • 对超线程几个不同角度的解释
  • 面试总结JavaScript篇
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 删除表内多余的重复数据
  • 使用agvtool更改app version/build
  • 一个JAVA程序员成长之路分享
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • (Python第六天)文件处理
  • (pytorch进阶之路)扩散概率模型
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (企业 / 公司项目)前端使用pingyin-pro将汉字转成拼音
  • .FileZilla的使用和主动模式被动模式介绍
  • .form文件_一篇文章学会文件上传
  • .NET Core 和 .NET Framework 中的 MEF2
  • .NET Framework Client Profile - a Subset of the .NET Framework Redistribution
  • .NET MVC 验证码
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .net操作Excel出错解决
  • .NET连接数据库方式
  • .NET微信公众号开发-2.0创建自定义菜单
  • @软考考生,这份软考高分攻略你须知道
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [ vulhub漏洞复现篇 ] Jetty WEB-INF 文件读取复现CVE-2021-34429
  • [ 云计算 | AWS 实践 ] Java 如何重命名 Amazon S3 中的文件和文件夹
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [ASP.NET 控件实作 Day7] 设定工具箱的控件图标
  • [C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强