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

时间: 2024-08-07 08:35:04

werkzeug模版学习-官方例子Shortly分析的相关文章

pyqt ColumnView, QFileSystemModel, QSplitter, QTreeView例子学习(由官方例子提供学习)

from PyQt4.QtGui import (QApplication, QColumnView, QFileSystemModel, QSplitter, QTreeView) #注意 """ QColumnView类提供了一个模型/视图列视图的实现,继承QAbstractItemView 提供了一个本地文件系统的数据模型,继承QAbstractItemModel 实现了一个分流器小部件,继承qframe 提供了一个默认的模型/视图树视图的实现,继承QAbstractI

SDL2.0例子代码分析-----CheckKeys Project

SDL简介 SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的代码就可以开发出跨多个平台(Linux.Windows.Mac OS X等)的应用软件.目前SDL多用于开发游戏.模拟器.媒体播放器等多媒体应用领域. SDL1.2和SDL2的差别 SDK1.2和SDL2.1系列的API接口变动的不小,当然功能也大大增强,支持多线程窗口. 具体的change 请看 h

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

本文主要介绍了Java Restful框架Jersey入门例子(来源于官方网站https://jersey.java.net/),废话不多说进入正题. 在Jersey官方示例中(https://jersey.java.net/documentation/latest/getting-started.html),入门例子主要采用maven构建,在这里使用eclipse来创建我们的项目 1.使用maven 骨架方式创建项目,如下图, 2.,如果在eclipser中没有上面的选项,我们需要手动添加Je

cocos2dx游戏开发学习笔记3-lua面向对象分析

在lua中,可以通过元表来实现类.对象.继承等.与元表相关的方法有setmetatable().__index.getmetatable().__newindex. 具体什么是元表在这里就不细说了,网上很多介绍,这里主要讲与cocos2dx相关联的部分. 在lua-binding库中extern.lua里,有如下方法: --Create an class. function class(classname, super) local superType = type(super) local c

初探C++函数模版学习笔记

泛型程序设计 特点:算法实现时不指定具体要操作的数据的类型.算法实现一遍但可适用于多种数据结构. 优势:减少重复代码的编写. 实现:大量编写模板, 使用模板的程序设计. 函数模版 为了交换两个int变量的值, 需要编写如下Swap函数: void Swap(int & x, int & y) { int tmp = x; x = y; y = tmp; } 为了交换两个double型变量的值, 还需要编写如下Swap函数: void Swap(double & x, double

android导入官方例子

android导入samplefile-->project-->Android-->Android Sample Project android导入官方例子,布布扣,bubuko.com

Time, Delays, and Deferred Work <LDD3> 学习笔记 + jiffies.h 分析

Time, Delays, and Deferred Work Dealing with time involves the following tasks, in order of increasing complexity: ? Measuring time lapses and comparing times ? Knowing the current time ? Delaying operation for a specified amount of time ? Scheduling

初探C++类模版学习笔记

类模板 实现:在定义类的时候给它一个或多个参数,这个些参数表示不同的数据类型.                              -->抽象的类. 在调用类模板时, 指定参数, 由编译系统根据参数提供的数据类型自动产生相应的模板类                   -->具体的类. 类模板的定义 C++的类模板的写法如下: template <类型参数表> //类型参数表的写法就是:class 类型参数1, class 类型参数2, - class 类模板名 { 成员函数

EasyUI学习总结(二)——easyloader分析与使用

EasyUI学习总结(二)--easyloader分析与使用 使用脚本库总要加载一大堆的样式表和脚本文件,在easyui 中,除了可以使用通常的方式加载之外,还提供了使用 easyloader 加载的方式.这个组件主要是为了按需加载组件而诞生.什么情况下使用它呢? 你觉得一次性导入 easyui 的核心 min js 和 css 太大 你只用到 easyui 的其中几个组件 你想使用其中的一个组件,但是你又不知道这个组件依赖了那些组件. 如果你有以上三中情况,那么推荐你使用easyLoader.