为了学习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. LAMP(1) 在VirtualBox里安装Ubuntu Server

    问题0.虚拟机中安装lamp环境 问题解决: 来自百度经验 问题1. 用putty远程登陆linux系统,显示network error connection refused 问题解决 问题2. my ...

  2. django 补充篇

    from验证 django中的Form一般有两种功能: 输入html-----------不能你自己写一些标签,而帮你自动生成 验证用户输入-------将用户验证信息保存起来,可以传到前端 # !/ ...

  3. js获取当前系统时间

    Js获取当前日期时间及其它操作var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getFullYear(); //获取完整的年份 ...

  4. PHP进程通信基础——信号

    PHP进程通信基础--信号 使用信号通信.可以使用kill -l 来查看当前系统的信号类型. 每个信号所代表的的详细含义,请查看我的这篇博客:http://www.cnblogs.com/roverl ...

  5. SQL分页语句三方案

    方法一: SELECT TOP 页大小 * FROM table1 WHERE id NOT IN ( SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id ...

  6. 【原创】PageAdminCMS 前台SQL注入漏洞(3)

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

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

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

  8. web网页中使用vlc插件播放相机rtsp流视频

    可参考: 使用vlc播放器做rtsp服务器 使用vlc播放器播放rtsp视频 使用vlc进行二次开发做自己的播放器 vlc功能还是很强大的,有很多的现成的二次开发接口,不需配置太多即可轻松做客户端播放 ...

  9. getElementsByClassName简单实现

    function getElementsByClassName(node, className) { var aClassReg = className.split(' ').map(function ...

  10. GCD总结

    //用block只有两种:同步执行/异步执行(参数1:队列;参数二:任务) dispatch_async(dispatch_get_global_queue(0, 0),^{ });//异步在新的线程 ...