Home » Flask 教程
  • 28
  • 08月

本文介绍如何在Flask蓝图中使用动态URL前缀这个特性。

[TOC]

让我们先来看一个简单的例子,假设有下面这样一个蓝图(是关于用户主页的):

from flask import Blueprint, render_template

profile = Blueprint('profile', __name__)

@profile.route('/<user_url_slug>')
def timeline(user_url_slug):
    # Do some stuff
    return render_template('profile/timeline.html')

@profile.route('/<user_url_slug>/photos')
def photos(user_url_slug):
    # Do some stuff
    return render_template('profile/photos.html')

@profile.route('/<user_url_slug>/about')
def about(user_url_slug …

Read More...

  • 28
  • 08月

Please note: This is a collaboration piece between Michael Herman, from Real Python, and Sean Vieira, a Python developer from De Deo Designs.

Articles in this series:

Read More...

  • 28
  • 08月

Flask信号机制(signals)

本文介绍Flask的信号机制,讲述信号的用途,并给出创建信号、订阅信号、发送信 号的方法。

[TOC]

信号(signals)

Flask信号(signals, or event hooking)允许特定的发送端通知订阅者发生了什么( 既然知道发生了什么,那我们可以知道接下来该做什么了)。

Flask提供了一些信号(核心信号)且其它的扩展提供更多的信号。信号是用于通知 订阅者,而不应该鼓励订阅者修改数据。相关信号请查阅文档。

信号依赖于Blinker库。

钩子(hooks)

Flask钩子(通常出现在蓝图或应用程序现存的方法中,比如一些内置装饰器,例如 before_request)不需要Blinker库并且允许你改变请求对象(request)或者响应对 象(response)。这些改变了应用程序(或者蓝图)的行为。比如before_request() 装饰器。

信号看起来和钩子做同样的事情。然而在工作方式上它们存在不同。譬如核心的 before_request()处理程序以特定的顺序执行,并且可以在返回响应之前放弃请求 。相比之下 …

Read More...

  • 28
  • 08月

Windows搭建FLASK开发环境

本文介绍Windows下如何从零开始搭建Python + Flask开发环境。

[TOC]

安装Python 2.7

访问https://www.python.org/,进入下载页面,下载Python 2.7系列的WINDOWS版本。

安装之后需要把Python相关的路径加入到PATH环境变量中(假如安装在 D:\Python27):

  • D:\Python27
  • D:\Python27\Scripts

安装setuptools(easy_install)

wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
python ez_setup.py

安装virtualenv

使用easy_install命令安装virtualenv:

easy_install virtualenv

相关阅读:Virtualenv入门基础教程

创建虚拟环境

纯净的虚拟环境:

virtualenv …

Read More...

  • 28
  • 08月

本文介绍如何在Flask项目中集成富文本编辑器xhEditor,并实现图片上传、文件 上传、视频上传、远程抓图等(包括拖拽上传)功能。

[TOC]

xhEditor简介

xhEditor是一个基于jQuery开发的简单迷你并且高效的可视化HTML编辑器,基于网 络访问并且兼容IE 6.0+, Firefox 3.0+, Opera 9.6+, Chrome 1.0+, Safari 3.22+。

xhEditor曾经是我比较喜欢的编辑器,也是率先支持拖拽上传的编辑器之一。 xhEditor在当年是优秀的编辑器,功能足够强大,使用体验也相当好,拖拽上传是 我最喜欢的功能,只可惜已经停止开发了。xhEditor最后的稳定版本是1.1.14,至 今已超过2年未更新(2013年发布了开发版本1.2.1),作者已经停止开发和维护了 ,社区论坛完全不能打开。

由于xhEditor基于jQuery开发,而对于新版本的jQuery,它并不能很好的支持,只 …

Read More...

  • 28
  • 08月

本文介绍如何在Flask项目中集成富文本编辑器CKeditor,并实现图片上传、文件上传、视频上传等功能。

CKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多WEB项目和大型网站均采用了CKeditor。

[TOC]

下载CKeditor

访问CKeditor官方网站,进入下载页面,选择Standard Package(一般情况下 功能足够用了),然后点击Download CKEditor按钮下载ZIP格式的安装文件。如果 你想尝试更多的功能,可以选择下载Full Package

下载好CKeditor之后,解压到Flask项目static/ckeditor目录即可。

在Flask项目中使用CKeditor

在Flask项目中使用CKeditor只需要执行两步就可以了:

  1. <script>标签引入CKeditor主脚本文件。可以引入本地的文件,也可以引用CDN上的文件。
  2. 使用CKEDITOR.replace()把现存的<textarea …

Read More...

  • 28
  • 08月

本文介绍如何在Flask项目中集成富文本编辑器UEditor,并实现文件上传、图片上传、视频上传及涂鸦功能。

[TOC]

UEditor简介

UEditor是由百度「FEX前端研发团队」开发的所见即所得富文本web编辑器,具有轻量,可定制,注重用户体验等特点,开源基于MIT协议,允许自由使用和修改代码。

由于1.4.2版本之后的版本与之前版本存在较大的差异,本文以1.4.3版本为蓝本。

具体文档参见:http://fex-team.github.io/ueditor/

在Flask项目中加入UEditor

下载UEditor:

访问UEditor首页,下载1.4.3 PHP UTF-8版本的UEditor,并解压到Flask应用程序的static目录。解压之后的目录结构是这样的:

| static/
| | ueditor/
| | |+dialogs/
| | |+lang/
| | |+php/
| | |+themes/
| | |+third-party/
| | |-config.json
| | |-index.html …

Read More...

  • 28
  • 08月

之前的文章中,我们讲到Flask中的SERVER_NAME主要做两件事:

  1. 协助Flask生成请求上下文之外的URL(比如邮件)
  2. 用于子域名支持

今天我们就来讲讲子域名这部分。

[TOC]

Flask子域名

一般用于数量比较少的子域名,一个模块对应一个子域名。先看下面一个例子:

modules.py:

from flask import Blueprint

public = Blueprint('public', __name__)

@public.route('/')
def home():
    return 'hello flask'

app.py:

app = Flask(__name__)
app.config['SERVER_NAME'] = 'example.com'
from modules import public
app.register_blueprint(public, subdomain …

Read More...

  • 28
  • 08月

Flask的SERVER_NAME解析

SERVER_NAME是Flask中比较容易用错的一个设置值,本文将介绍如何正确使用SERVER_NAME

本文目录:

[TOC]

Flask中的SERVER_NAME主要做两件事:

  1. 协助Flask在活动的请求(request)之外生成绝对URL(比如邮件中嵌入网站URL)
  2. 用于子域名支持

很多人误以为它可以做这两件事之外的其它事情。

第一件事:绝对URL

我们知道,url_for默认情况下是生成相对URL,它有个参数_external,如果设置为真,则会生成一个绝对URL(就是HTTP开头带域名等信息的)。若不指定SERVER_NAME,默认使用当前活动的请求(request)来生成URL。

下面举个例子演示一下:

# filename myapp.py
from flask import Flask, url_for

app = Flask(__name__)

@app.route('/')
def index():
    return 'hello flask'

@app …

Read More...

  • 28
  • 08月

Virtualenv入门基础教程

本文目录:

[TOC]

虚拟环境简介

VirtualEnv用于在一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够:

  1. 在没有权限的情况下安装新套件
  2. 不同应用可以使用不同的套件版本
  3. 套件升级不影响其他应用

虚拟环境是在Python解释器上的一个私有复制,你可以在一个隔绝的环境下安装packages,不会影响到你系统中全局的Python解释器。

虚拟环境非常有用,因为它可以防止系统出现包管理混乱和版本冲突的问题。为每个应用程序创建一个虚拟环境可以确保应用程序只能访问它们自己使用的包,从而全局解释器只作为一个源且依然整洁干净去更多的虚拟环境。另一个好处是,虚拟环境不需要管理员权限。

安装Virtualenv

大多数Linux发行版都提供一个virtualenv包。例如,Ubuntu用户就可以使用以下命令进行安装:

$ sudo apt-get install python-virtualenv

如果你使用的是Mac OSX,你可以使用 easy_install 安装virtualenv:

$ sudo easy_install virtualenv

如果你使用的是Microsoft Windows或者是任何没有提供官方virtualenv包的操作系统,接下来你会有一个稍微复杂的安装过程。

使用你的web浏览器,导航到 https://bitbucket.org/pypa/setuptools/ ,setuptools安装程序的主页,在"Downloads"栏目找到链接下载一个叫 …

Read More...