Home » digwtx
  • 15
  • 01月

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...

  • 24
  • 12月

本文介绍如何在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...

  • 23
  • 12月

本文介绍如何在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...

  • 23
  • 12月

本文介绍如何在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...

  • 10
  • 12月

Flask子域名及通配符子域

之前的文章中,我们讲到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...

  • 05
  • 12月

Flask的SERVER_NAME解析

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

Flask中的SERVER_NAME主要做两件事:

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

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

[TOC]

第一件事:绝对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.route …

Read More...

  • 01
  • 12月

SECRET_KEY是Flask中比较重要的一个配置值。本文介绍一种比较简单的生成SECRET_KEY的方法。

Session, Cookies以及一些第三方扩展都会用到SECRET_KEY值,这是一个比较重要的配置值,应该尽可能设置为一个很难猜到的值,随机值更佳。

随机的问题在于很难判断什么是真随机。一个密钥应该足够随机。你的操作系统可以基于一个密码随机生成器来生成漂亮的随机值,这个值可以用来做密钥:

>>> import os
>>> os.urandom(24)
'\xca\x0c\x86\x04\x98@\x02b\x1b7\x8c\x88]\x1b\xd7"+\xe6px@\xc3#\\'

把这个值复制粘贴到你的代码,你就搞定了密钥。

设置方法:

app = Flask(__name__)
app.config['SECRET_KEY'] = '\xca\x0c\x86\x04 …

Read More...

  • 28
  • 11月

本文介绍Flask密码生成和密码验证的一种通用方法。所使用的函数为Flask框架内 置的函数:generate_password_hash, check_password_hash

本文目录:

[TOC]

密码加密简介

密码存储的主要形式:

  • 明文存储:肉眼就可以识别,没有任何安全性。
  • 加密存储:通过一定的变换形式,使得密码原文不易被识别。

密码加密的几类方式:

  • 明文转码加密:BASE64, 7BIT等,这种方式只是个障眼法,不是真正的加密。

  • 对称算法加密:DES, RSA等。

  • 签名算法加密:也可以理解为单向哈希加密,比如MD5, SHA1等。加密算法固定,容 易被暴力破解。如果密码相同,得到的哈希值是一样的。

  • 加盐哈希加密:加密时混入一段“随机”字符串(盐值)再进行哈希加密。即使 密码相同,如果盐值不同,那么哈希值也是不一样的。现在网站开发中主要是运 用这种加密方法。

密码生成函数:generate_password_hash

函数定义:

werkzeug.security …

Read More...

  • 05
  • 10月

最近在研究 PPTP VPN ,所幸自己了在香港机房架设了一个,在 WINDOWS 7 下可 以连接并正常使用,到了 Slackware 下面,不知道怎么连接了,起初想用命令行 连接,试了好久都没成功,最后在 SBo 找到了两个相关的软件包,安装并设置之后, VPN 可以正常使用了,也懒得折腾了。

下面讲一下用 NetworkManager 连接 VPN 的方法。

连接之前需要另外安装两个程序:

Read More...

  • 01
  • 09月

Python WTForms 2.0 发布

本文目录:

[TOC]

WTForms 是一个 Python 表单验证、渲染开发包。WTForms 2.0 于2014年5月发布,这是继 WTForms 1.0.5 之后第一个重要的版本。

新特性

  • Class Meta 可以从多方面定制 WTForms
  • CSRF 和 i18n 由扩展变成核心特性
  • Widget 渲染变更

不推荐使用的API

这些API仍然有效,但在很多情况下,会引发弃用警告。这些API在3.0的时候将完全移除,尽量写符合新API的代码,除非需要在 WTForms 1.X 和 2.X 交叉使用。

核心API

  • Form._get_translations 改为 Meta.get_translations
  • TextField …

Read More...