Flask 源码剖析——服务启动篇

2016-06-23
阅读 4 分钟
8.6k
【Flask官方文档经典示例】 hello.py {代码...} 输入以下命令启动应用程序: {代码...} 打开你的浏览器并在地址栏输入[链接] 。【图1-1】显示连接到应用程序后的浏览器。 图1-1 hello.py Flask应用程序 服务是怎么启动的 从app.run()开始,这行代码表示启动一个服务。我们看到app是Flask一个对象,而run()是该对象的一个...

[译] 属性访问、特性和描述符 2

2015-11-25
阅读 8 分钟
3.6k
__getattribute__()方法是一个更底层的属性处理。它的默认实现试图把一个属性作为一个已经存在于内部__dict__(或__slots__)的属性来定位值。如果没有找到该属性,它会调用__getattr__()。如果值被定位为描述符(参见下面《创建描述符》部分),则处理描述符;否则只是简单的返回值。

[译] 属性访问、特性和描述符 1

2015-11-21
阅读 12 分钟
3.9k
注:原书作者 Steven F. Lott,原书名为 Mastering Object-oriented Python 对象就是一些特性的集合,包括方法和属性。object类的默认行为包括设置、获取和删除属性。我们经常需要修改这些行为来改变一个对象的属性。 本章将重点关注以下五个层次的字段访问: 内置字段的处理,这是最简单的,但最不精明的选择。 回顾一...

[译] 与 Python 无缝集成——基本特殊方法 4

2015-11-17
阅读 11 分钟
4.2k
其目的是在对象从内存中被移除之前给对象一个机会做一些清理或终结工作。这个用例通过上下文管理对象和with语句会处理得更清晰。这是第五章《可调用和上下文的使用》的主要内容。创建上下文比用__del__()和Python垃圾收集算法处理起来更可预知。

[译] 与 Python 无缝集成——基本特殊方法 3

2015-11-14
阅读 11 分钟
5.3k
Python对假有个很好的定义。参考手册列出了大量的值来被检测为False。这包括诸如:False、0、''、[]、()、{}。大多数其他对象将被检测为True。

[译] 与 Python 无缝集成——基本特殊方法 2

2015-11-09
阅读 8 分钟
6.7k
内置hash()函数会调用给定对象的__hash__()方法。这里hash就是将(可能是复杂的)值缩减为小整数值的计算。理想情况下,一个hash值反映了源值的所有信息。还有一些hash计算经常用于加密,生成非常大的值。

[译] 与 Python 无缝集成——基本特殊方法 1

2015-06-23
阅读 6 分钟
7.4k
有许多特殊方法允许类与Python紧密结合,标准库参考将其称之为基本,基础或本质可能是更好的术语。这些特殊方法构成了创建与其他Python特性无缝集成的类的基础。

[译] Python 学习 —— __init__() 方法 4

2015-06-15
阅读 10 分钟
6.3k
下面这个示例,是一个简化去掉了__init__()的类。这是一个常见的Strategy设计模式对象。策略对象插入到主对象来实现一种算法或者决策。它可能依赖主对象的数据,策略对象自身可能没有任何数据。我们经常设计策略类来遵循Flyweight设计模式:我们避免在Strategy对象内部进行存储。所有提供给Strategy的值都是作为方法的参...

[译] Python 学习 —— __init__() 方法 3

2015-06-06
阅读 6 分钟
6.6k
当我们看到创建Card对象的工厂函数,再看看Card类设计。我想我们可能要重构牌值转换功能,因为这是Card类自身应该负责的内容。这会将初始化向下延伸到每个子类。

[译] Python 学习 —— __init__() 方法 2

2015-05-04
阅读 5 分钟
5.1k
定义一个类,该类有创建对象的方法。这是一个完整的工厂设计模式,正如设计模式书所描述的那样。在诸如Java这样的语言中,工厂类层次结构是必须的,因为该语言不支持独立的函数。

[译] Python 学习 —— __init__() 方法 1

2015-04-24
阅读 4 分钟
23.6k
__init__()方法意义重大的原因有两个。第一是在对象生命周期中初始化是最重要的一步;每个对象必须正确初始化后才能正常工作。第二是__init__()参数值可以有多种形式。

Flask Web Development —— 大型应用程序结构(下)

2014-12-09
阅读 4 分钟
11.8k
这个脚本开始于创建应用程序。使用环境变量FLASK_CONFIG,若它已经定义了则从中获取配置;如果没有,则是用默认配置。然后用于Python shell的Flask-Script、Flask-Migrate以及自定义上下文会被初始化。

Flask Web Development —— 大型应用程序结构(上)

2014-12-07
阅读 6 分钟
29.4k
与大多数其他web框架不同,Flask对大型项目没有特定的组织方式;应用程序的结构完全交给开发人员自己决定。在这一章,提出一个可能的方式来组织管理一个大型应用程序的包和模块。这种结构将用于书中其余的示例中。

Flask Web Development —— Email

2014-12-06
阅读 5 分钟
10.4k
许多类型的应用程序都会在某些事件发生的时候通知用户,常用的沟通方法就是电子邮件。尽管在Flask应用程序中,可以使用Python标准库中的smtplib包来发送电子邮件,不过Flask-Mail扩展封装了smtplib且与Flask整合的非常好。

Flask Web Development —— 数据库(下)

2014-12-01
阅读 5 分钟
10.7k
在这个已修改的应用程序版本中,每次提交一个名字应用程序都要使用filter_by()查询过滤器到数据库中检查一遍。known变量被写入到用户会话中,这样在重定向后信息就可以发送到模板来定制问候语。注意为了应用程序可以工作,必须创建好之前在Python shell中展示的那些数据库表。

Flask Web Development —— 数据库(中)

2014-11-28
阅读 5 分钟
10.1k
关系数据库通过使用关系在不同的表中建立连接。图像5-1的关系图表达了用户和用户角色之间的简单关系。这个角色和用户是一对多关系,因为一个角色可以从属于多个用户,而一个用户只能拥有一个角色。

Flask Web Development —— 数据库(上)

2014-11-22
阅读 5 分钟
16.6k
数据库就是有组织的存储应用程序数据,然后查询检索指定需要的那部分。大部分web应用程序都采用基于关系模型的数据库,也称作结构化查询语言(SQL)数据库。但是最近几年面向文档数据库和键值数据库(通常称作NoSQL数据库),成为非常流行的替代者。个人推荐《七周七数据库》这本书,它对各种类型的数据库、应用场景和多...

Flask Web Development —— Web表单(下)

2014-11-19
阅读 5 分钟
15.3k
methods参数被添加到app.route装饰器中,目的是让Flask注册视图函数为GET和POST请求处理程序到URL映射中。若methods参数未给出,视图函数将只注册为GET请求。

Flask Web Development —— Web表单(上)

2014-11-13
阅读 3 分钟
17.9k
尽管Flask的request对象提供的支持足以处理web表单,但依然有许多任务会变得单调且重复。表单的HTML代码生成和验证提交的表单数据就是两个很好的例子。

Flask Web Development —— 模板(下)

2014-11-05
阅读 3 分钟
10.9k
在模板中,对于简单的路由直接写URLs做链接是非常琐碎麻烦的,而给带有变量部分的动态路由建立正确的URLs会变得更加复杂。此外,在代码中显式的写URLs会在路由上造成不必要的依赖。如果路由重组,模板中的链接将被打断而变得无法访问。

Flask Web Development —— 模板(中)

2014-11-03
阅读 5 分钟
17.7k
Bootstrap是一个客户端框架,服务端不直接参与。服务端需要做的就是提供HTML响应,引用层叠样式表(CSS)和JavaScript文件并通过HTML、CSS、和JavaScript代码来实例化需要的组件。模板是做这些的理想地方。

Flask Web Development —— 模板(上)

2014-10-30
阅读 4 分钟
14.9k
写代码最关键的是要易于维护且结构清晰整洁。目前为止,你看到的例子都过于简单从而没有做这方面的要求。Flask视图函数希望将两个应该完全独立的任务一并处理,两个任务有两种代码,一并处理势必会引发问题。

Flask Web Development —— 基本应用程序结构(下)

2014-10-23
阅读 6 分钟
13k
当Flask从客户端收到一个请求,它需要提供几个可用对象给视图函数处理。request对象是个不错的例子,它封装了客户端发送的HTTP请求。

Flask Web Development —— 基本应用程序结构(上)

2014-10-19
阅读 3 分钟
11k
所有的Flask应用程序都必须创建一个 应用程序实例 。使用web服务器网关接口协议将所有从客户端接收的请求传递给这个对象处理。这个应用程序实例就是Flask类的一个对象,通常使用下面的方式创建:

Flask Web Development——安装

2014-10-15
阅读 3 分钟
8.7k
安装 Flask 最方便的方法就是使用虚拟环境。虚拟环境是在Python解释器上的一个私有复制,你可以在一个隔绝的环境下安装packages,不会影响到你系统中全局的Python解释器。

gevent 学习笔记 —— greenlet源码剖析1

2014-10-15
阅读 3 分钟
5.9k
在greenlet篇中只是简单讲述了一下greenlet原理,不知道有没有人对源码感兴趣的,不过我还是比较感兴趣的。对于技术我一直都觉得『知其然,知其所以然』才是最好的,不希望自己只停留在知道用,而不知道为什么这样用。

gevent 学习笔记 —— greenlet

2014-08-20
阅读 3 分钟
5.9k
那greenlet又是怎样一种机制呢?这个后面会稍微简单的讲一下原理,不过在后续的几篇会着重分析它的源码。在开始之前先看看提到的几个关键字『高级』、『同步』,高级不高级暂时还不知道,毕竟在实际生产环境中才看得到效果。而同步这个概念,不知道大家理解深不深刻,总之我当初理解不是很深刻,所以遇到了就聊聊呗!

gevent 学习笔记 —— 协程

2014-06-28
阅读 4 分钟
12.5k
gevent is a coroutine-based Python networking library that uses greenlet to provide a high-level synchronous API on top of the libev event loop.