IDE使用pyCharm。
首先从flask初始化的一个例子说起。 打开pyCharm新建一个Flask的项目之后,会初始化一个Flask的程序目录(假设创建一个名为flaskblog的项目)。首先来看flaskblog.py这个文件里的代码: (包含注释)
#flaskblpg.py#1、初始化:创建一个程序实例from flask import Flaskapp = Flask(__name__)#flask用name这个参数决定程序的根目录,以便稍后能够找到相对于程序根目录的资源文件位置。#2、路由和视图函数:客户端把请求发送给web服务器,web服务器再把请求发送给flask程序实例。程序实例需要知道对每个URL请求运行哪些代码#所以保存了一个URL到Python函数的映射关系。处理URL和函数之间的关系称为路由。# @app.route('/')flask是使用程序实例提供的app.route修饰器,把修饰的函数注册为路由。@app.route('/user/<name>')#尖括号中得内容就是动态部分,任何能匹配静态部分的URL都会映射到这个路由上。# flask支持在路由中使用int(如:@app.route('/user/<int:id>'))/float/path类型.path类型也是字符串,但不把斜线视作分隔符,而将其当做动态片段的一部分。def hello_world(name):# 视图函数,返回的响应可以是包含HTML的简单字符串,也可以是复杂的表单 return '<h1>Hello,%s!</h1>' %name#3、启动服务器:程序实例用run方法启动flask集成的开发web服务器。服务器启动后会进入轮询,等待并处理请求。轮询会一直运行,直到程序#停止,比如按Ctrl-C键。if __name__ == '__main__': app.run(debug=True)#启用调式模式,ps:flask提供的web服务器不适合在生产环境中使用。请详细阅读注释,然后在pyCharm中选中flaskblog.py运行(Run),在浏览器中测试。在浏览器地址栏中输入http://127.0.0.1:5000/user/imagineXie进行测试。
请求对象封装了客户端发送的HTTP请求。在多线程服务器中,多个线程同时处理不同客户端发送的不同请求时,每个线程看到的request对象必然不同。Falsk使用上下文让特定的变量在一个线程中全局可访问,与此同时却不会干扰其他线程。
Flask两种上下文: (1)程序上下文
current_app:当前激活程序的程序实例g:处理请求时用作临时存储的对象。每次请求都会重设这个变量(2)请求上下文
request:请求对象,封装了客户端发出的HTTP请求中得内容session:用户会话,用于存储请求之间需要“记住”的值的词典在使用这些变量时,我们需要先激活(push())程序(app_context())或请求上下文,否则会报错。
URL映射是URL和视图函数之间的对应关系。Falsk使用app.route修饰器或者非修饰器形式的app.add_url_rule()生成映射。
Falsk为每个路由都指定了请求方法,这样不同的请求方法发送到相同的URL上时,会使用不同的视图函数进行处理。
请求钩子使用修饰器实现。Falsk支持4种钩子。
before_first_request:注册一个函数,在处理第一个请求之前运行。before_request:注册一个函数,在每次请求之前运行。after_request:注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。teardown_request:注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。HTTP响应中一个很重要的部分是“状态码”,默认为200,表示请求已被成功处理。
Flask视图函数还能返回Response对象。make_response()函数可接受1、2或3个参数,并返回一个Response对象。 eg:
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有一种名为“重定向”的特殊响应类型。这种响应没有页面文档,只告诉浏览器一个新地址用以加载新页面。 重定向常使用302状态码表示,指向的地址由Location首部提供。Flask提供redirect()辅助函数用于生成这种响应:
from flask import redirect@app.route('/')def index(): return redirect('http://www/example.com')还有一种响应用于处理错误,由abort函数生成:
from flask import abort@app.route('/user/<id>')def get_user(id): user=load_user(id) if nor user: abort(404)return '<h1>Hello,%s</h1>'%user.name以上例子中,如果URL中动态参数id对应的用户不存在,就返回状态码404。
新闻热点
疑难解答