为了学习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

Werkzeug工具包学习-官方例子Shortly分析的更多相关文章

  1. UE4的AI学习(2)——官方案例实例分析

    官方给出的AI实例是实现一个跟随着玩家跑的AI,当玩家没有在AI视野里时,它会继续跑到最后看到玩家的地点,等待几秒后如果仍然看不到玩家,则跑回初始地点.官方的案例已经讲得比较详细,对于一些具体的函数调 ...

  2. StreamDM:基于Spark Streaming、支持在线学习的流式分析算法引擎

    StreamDM:基于Spark Streaming.支持在线学习的流式分析算法引擎 streamDM:Data Mining for Spark Streaming,华为诺亚方舟实验室开源了业界第一 ...

  3. 【转】3篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:官方原生方法分析

    作者: 牛A与牛C之间 时间: 2013-11-17 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第3篇:Xilium CefGlue 关于 CLR Object 与 JS ...

  4. 一个使用C#的TPL Dataflow Library的例子:分析文本文件中词频

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:一个使用C#的TPL Dataflow Library的例子:分析文本文件中词频.

  5. UML和模式应用学习笔记-1(面向对象分析和设计)

    UML和模式应用学习笔记-1(面向对象分析和设计) 而只是对情节的记录:此处的用例场景为:游戏者请求掷骰子.系统展示结果:如果骰子的总点数是7,则游戏者赢得游戏,否则为输 (2)定义领域模型:在领域模 ...

  6. 原 iOS深入学习(Block全面分析)http://my.oschina.net/leejan97/blog/268536

    原 iOS深入学习(Block全面分析) 发表于1年前(2014-05-24 16:45)   阅读(26949) | 评论(14) 39人收藏此文章, 我要收藏 赞21 12月12日北京OSC源创会 ...

  7. Java Restful框架:Jersey入门示例(官方例子)

    本文主要介绍了Java Restful框架Jersey入门例子(来源于官方网站https://jersey.java.net/),废话不多说进入正题. 在Jersey官方示例中(https://jer ...

  8. 作业2——英语学习APP的案例分析

    英语学习APP的案例分析 很多同学有误解,软件工程课是否就是理论课?或者是几个牛人拼命写代码,其他人打酱油的课?要不然就是学习一个程序语言,搞一个职业培训的课?都不对,软件工程有理论,有实践,更重要的 ...

  9. FFmpeg 结构体学习(二): AVStream 分析

    在上文FFmpeg 结构体学习(一): AVFormatContext 分析我们学习了AVFormatContext结构体的相关内容.本文,我们将讲述一下AVStream. AVStream是存储每一 ...

随机推荐

  1. flask-- 基础篇

    flask简介: flask是一轻量级的web应用框架,它的实现是一个 wsgi 的微("Micro")框架,当然微("Micro")也不意味这它的功能存在不足 ...

  2. word中表格加粗某一行

    选中表格后选择线条粗细. 然后重新绘制一遍就行了.

  3. 架构师养成记--8.Queue

    一.ConcurrentLinkedQueue 是一个适合在高并发场景下,无锁,无界的,先进先出原则.不允许为null值,add().offer()加入元素,这两个方法没区别:pull().peek( ...

  4. windows使用git时出现:warning: LF will be replaced by CRLF

    windows中的换行符为 CRLF, 而在linux下的换行符为LF,所以在执行add . 时出现提示: 执行以下代码 $ rm -rf .git // 删除.git $ git config -- ...

  5. JavaScript备忘录

    提取字符串substring(start,end)substr(start [, length ])JavaScript substr() 方法 --

  6. iOS - 滑屏方案

    参考自:iOS开发- 通过ChildViewCotroller ViewController容器 产品增加新的版面,类似于网易新闻,百度新闻,腾讯新闻等新闻客户端首页多屏幕滑屏切换,找了一些开源代码研 ...

  7. Nexus安装配置

    一.下载最新版本的nexus 1.下载地址:http://www.sonatype.org/nexus/go 2.官网如果下载不了,就找个zip下载,我下载的是:nexus-2.10.0-02-bun ...

  8. 【原创】PageAdminCMS 前台SQL注入漏洞(2)

    之前根据公司的要求找了几个web程序的漏洞提交CNVVD,发现漏洞提交上去两个月了,CNVVD却没有任何回应,我提交的这几个漏洞却悄悄的修补掉了. 文章作者:rebeyond 受影响版本:V3.0 漏 ...

  9. IRequiresSessionState接口控制

    刚刚接触.net web端的朋友都会被Session坑过,莫名其妙的不能读取Session数据,后来知道原来有IRequiresSessionState这个接口,不继承的就不能读取Session里面的 ...

  10. Oracle数据库找回密码

    Oracle数据库忘记用户的密码.经验证,可行的解决方案如下: 1.Ctrl + R 打开cmd窗口,输入 sqlplus / as sysdba  (注意/左右两侧有空格) 2.运行cmd ,输入 ...