一、简介

Flask是一个基于Python的web框架,它的设计目的是提供Web开发所需的最小功能子集。Flask没有绑定诸如数据库查询或者表单处理等功能库,以及它们所组成的整个生态系统。它倾向于对这些功能的实现方式不做任何限定

 

安装 Flask 最便捷的方式是使用虚拟环境。虚拟环境是 Python 解释器的一个私有副本,在

这个环境中你可以安装私有包,而且不会影响系统中安装的全局 Python 解释器

 

下面是在pycharm中创建Flask项目

所有 Flask 程序都必须创建一个程序实例。Web 服务器使用一种名为 Web 服务器网关接口(Web Server Gateway Interface,WSGI)的协议,把接收自客户端的所有请求都转交给这

个对象处理。程序实例是 Flask 类的对象

二、URL

Web 浏览器把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask程序实例。程序实例需要知道对每个 URL 请求运行哪些代码,所以保存了一个 URL 到Python 函数的映射关系。处理 URL 和函数之间关系的程序称为路由,在Flask程序中,使用程序实例提供的 app.route 修饰器,把修饰的函数注册为路由

#尖括号中的内容就是动态部分,任何能匹配静态部分的 URL 都会映射到这个路由上

@app.route('/user/<name>')

def user(name):

return '<h1>Hello, %s!</h1>' % name

 

三、视图函数

Hello_word() 这样的函数称为视图函数(view function)。视图函数返回的响应可以是包含HTML 的简单字符串,也可以是复杂的表单

#coding=utf-8

from flask import Flask

 

#将构造函数的 name 参数传给 Flask 程序,Flask 用这个参数决定程序的根目录

app = Flask(__name__)

#使用程序实例提供的 app.route 修饰器,把修饰的函数注册为路由

@app.route('/')

def hello_world():

    return 'Hello World!'

if __name__ == '__main__':

app.run()

 

 

执行效果

 

 

四、请求-响应

Flask 从客户端收到请求时,要让视图函数能访问一些对象,这样才能处理请求。请求对象就是一个很好的例子,它封装了客户端发送的 HTTP 请求。要想让视图函数能够访问请求对象,一个显而易见的方式是将其作为参数传入视图函数,不过这会导致程序中的每个视图函数都增加一个参数。除了访问请求对象,如果视图函数在处理请求时还要访问其他对象,情况会变得更糟。为了避免大量可有可无的参数把视图函数弄得一团糟, Falsk 使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程

 

变量名

上下文

说明

current_app

程序上下文

当前激活程序的程序实例

g

程序上下文

处理请求时用作临时存储的对象。每次请求都会重设这个变量

request

请求上下文

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

session

请求上下文

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

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

序上下文被推送后,就可以在线程中使用 current_app 和 g 变量。类似地,请求上下文被

推送后,就可以使用 request 和 session 变量

 

Flask 提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数之前或之后

调用。

请求钩子使用修饰器实现。Flask 支持以下 4 种钩子

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

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

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

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

钩子函数和视图函数之间共享数据一般使用上下文全局变量 g 。例如, before_

request 处理程序可以从数据库中加载已登录用户,并将其保存到 g.user

 

Flask 调用视图函数后,会将其返回值作为响应的内容, Flask 视图函数还可以返回 Response 对象, 下例创建了一个响应对象,然后设置了 cookie:

from flask import make_response

@app.route('/')

def index():

response = make_response('<h1>This document carries a cookie!</h1>')

response.set_cookie('answer', '42')

return response

 

 

重定向的特殊响应类型, 没有页面文档,只告诉浏览器一个新地址用以加载新页面。重定向经常在 Web 表单中使用, 重定向响应可以使用返回值生成,也可在 Response 对象中设定。由于使用频繁,Flask 提供了 redirect() 辅助函数

from flask import redirect

@app.route('/')

def index():

return redirect('http://www.example.com')

 

 

abort 函数生成,用于处理错误

如果 URL 中动态参数 id 对应的用户不存在,就返回状态码 404:

from flask import abort

@app.route('/user/<id>')

def get_user(id):

user = load_user(id)

if not user:

abort(404)

return '<h1>Hello, %s</h1>' % user.name

学习过程依据《Flask+Web开发:基于Python的Web应用开发实战》

电子版pdf(含目录)地址

链接:https://pan.baidu.com/s/1f43AUHydzp5EOEv6zjYv2A 密码:xi71

 

posted on 2018-08-20 08:40  沙沙沙啊啊皮  阅读(223)  评论(0编辑  收藏  举报