开发前所做准备:

创建虚拟环境:

Ubuntu用户使用如下命令进行安装:

$ sudo apt-get install python-virtualenv

Mac OS X系统

$ sudo easy_install virtualenv

如果你使用微软的Windows系统或其他没有官方virtualenv包的操作系统,那么安装过程要稍微复杂一点,在浏览器中输入网址https://bitbucket.org/pypa/setuptools,回车后会进入setuptools安装程序的主页。在这个页面中找到下载安装脚本链接,脚本名为ez_setup.py。把这个文件保存到电脑的一个临时文件夹中,然后在这个文件夹中执行以下命令:

$ python ez_setup.py

$ easy_install virtualenv

(上述命令必须以具有管理员权限的用户身份执行,在微软Windows系统中,请使用“以管理员身份运行”选项打开命令行窗口,在基于Unix的系统中,要在上面两个命令前面加上sudo,或者以根用户身份执行)

在当前项目所在文件夹中创建虚拟环境,一般虚拟环境会被命名为venv

$ virtualenv venv

现在,在项目文件夹中就有了一个venv的子文件夹,它保存一个全新的虚拟环境,其中有一个私有的Python解释器,在使用这个虚拟环境之前,你必须将它激活

Linux和Mac OS X用户,激活命令如下:

$ source venv/bin/activate

微软Windows激活命令如下:

$ venv\Scripts\active

退出虚拟环境:

deactivate

程序的基本结构:

初始化:

说明:所有Flask程序必须创建一个程序实例,把收到的客户端的请求转交给这个程序实例处理。

Flask类的构造函数只有一个必须指定的参数,即__name__,那么这个__name__是什么意思呢?Flask的这个参数__name__决定程序的根目录,以便稍后能够找到相对于程序根目录的资源文件位置。

关于动态请求地址:

我们经常会遇到这种请求地址:http://www.baidu.com/<name>

路由函数如下:

那么下面这URL函数是什么意思呢?

上面这个URL的意思为:路由中的动态部分默认使用字符串,把id转换成整数类型。

启动服务器:

__name__ =='__main__' 是python的惯用方法,在这里确保直接执行这个脚本时才启动开发Web服务器。如果这个脚本由其他脚本引入,程序假定父级脚本会启动不同的服务器,因此不会执行app.run(). 加debug=True简便理解:每当程序代码修改后,它会自动启动。

程序和请求上下文:

Flask从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对象就是一个很好的例子,它封装了客户端发送的HTTP请求。

Flask中使用请求上下文让视图函数可以访问请求中的对象,Flask使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程。

在Flask中有两种上下文,程序上下文请求上下文:

变量名                          上下文                               说明

current_app                程序上下文                        当前激活程序的程序实例

g                                 程序上下文                        处理请求时用作临时存储的对象,每次请求都会重设这个变量

request                       请求上下文                        请求对象,封装了客户端发出的HTTP请求中的内容

session                       请求上下文                        用户会话,用于存储请求之间需要“记住”的值的词典

Flask在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。

在这个例子中,没激活程序上下文之前就调用current_app.name会导致报错,但推送完上下文之后就可以调用了。注意,在程序实例上调用app.app_context()可获得一个程序上下文。

请求钩子:

请求钩子使用装饰器实现:

before_first_request:注册一个函数,在处理第一个请求之前运行。

before_request:注册一个函数,在每次请求之前运行。

after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行

teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。

在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。例如,before_request处理程序可以从数据库中加载已登录用户,并将其保存到g.user中,随后调用视图函数时,视图函数再使用g.user获取用户。

Flask web开发第八章总结:

Flask-Login:管理已经登录用户的用户会话

Werkzeug:计算密码散列值并进行核对

itsdangerous:生成并核对加密安全令牌

若想保证数据库中用户密码的安全,关键在于不能存储密码本身,而要存储密码的散列值。计算密码散列值的函数接收密码密码作为输入,使用一种或多种加密算法进行转换密码,最终得到一个和原始密码没有关系的字符序列,核对密码时,密码散列值可代替原密码,因为计算散列值的函数是可复现的:只要输入一样,结果就一样。

Flask-Login认证用户:

Flask-Login是个非常有用的小型扩展,专门用来管理用户认证系统中的认证状态,且不依赖特定的认证机制。

使用Flask-Login扩展,必须实现几个方法:

is_authenticated()                  如果用户已经登录,必须返回True,否则返回False

is_active()                              如果允许用户登录,必须返回true,否则返回False

is_anonymous()                     对普通用户必须返回False

get_id()                                  必须返回用户的唯一标识符,使用Unicode编码字符串

 

posted on 2018-09-18 16:44  菜鸟growing  阅读(170)  评论(0编辑  收藏  举报