flask学习笔记(一hello world)
Posted SUN_DRAGON
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了flask学习笔记(一hello world)相关的知识,希望对你有一定的参考价值。
初始化
from flask import Flask
app = Flask(__name__)
当从此文件进入时__name__为__main__。Flask用这个参数确定程序的根目录,以便查找资源文件的位置。
路由和视图
@app.route('/')
def index():
return '<h1>Hello World!</h1>'
路由客户端(例如 Web 浏览器)把请求发送给 Web 服务器,Web 服务器再把请求发送给 Flask程序实例.程序实例需要知道每个URL对应的那些代码。处理 URL 和函数之间关系的程序称为路由。使用路由修饰器@app.route("/")
将函数注册为事件处理程序。访问www.xxxxx.com时即会出发,并返回客户端需要访问的内容(html文件)。
视图对应的index()
即为视图函数。
**动态路由**route修饰器的参数特殊的句法。 < some param >
@app.route('/user/<name>')#尖括号内部是动态部分,任何匹配静态部分的URL均会映射到这个路由。
return '<h1>Hello, %s!</h1>' % name
启动服务
if __name__=='__main__':
app.run(debug = True)#启动调试模式
请求-相应循环
程序和请求上下文
上下文在一个线程中全局可访问的特定变量,flask保证不同线程之间互不干扰。作用区域线程(对应处理接收的请求)。目的从客户端接收请求时,总需要访问一些通用的对象(如,请求对象)。如果作为参数进行传输,势必增大视图函数工作。避免把视图函数弄复杂,夫拉斯凯使用上下文临时把某些对象变为全局可访问的对象。
from flask import request
@app.route('/')
def index():
user_agent = request.headers.get('User-Agent')
return '<p>Your browser is % s</p>' % user_agent
上下文分为:程序上下文和请求上下文。
变量名 | 上下文 | 说明 |
---|---|---|
current_app | 程序上下文 | 当前激活程序的程序实例 |
g | 程序上下文 | 处理请求时用作临时存储的对象。每次请求都会重设这个变量 |
request | 请求上下文 | 请求对象,封装了客户端发出的 HTTP 请求中的内容 |
session | 请求上下文 | 用户会话,用于存储请求之间需要“记住”的值的词典 |
Flask 在分发请求之前激活(或推送)程序和请求上下文,请求处理完成后再将其删除。如果使用这些变量时我们没有激活程序上下文或请求上下文,就会导致错误。
请求调度
程序收到客户端发来的请求时,Flask通过URL映射(URL和视图之间的对应关系)找到处理该请求的视图函数。
$ python#查看URL映射
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from hello import app
>>> app.url_map
Map([<Rule '/' (HEAD, OPTIONS, GET) -> index>,
<Rule '/static/<filename>' (HEAD, OPTIONS, GET) -> static>,
<Rule '/user/<name>' (HEAD, OPTIONS, GET) -> user>])
URL 映射中的 HEAD 、 Options 、 GET 是请求方法,由路由进行处理。每个路由都指定了请求方法。HEAD 和 OPTIONS 方法由 Flask 自动处理。在这个程序中,URL
映射中的 3 个路由都使用 GET 方法。
生成映射的方法:app.route
修饰器或者非修饰器形式的app.add_url_rule()
生成映射。
请求钩子
用途:处理请求之前或之后的人物。如:在请求开始时,我们可能需要创建数据库连接或者认证发起请求的用户。为了避免在每个视图函数中都使用重复的代码,Flask 提供了注册通用函数的功能,注册的函数可在请求被分发到视图函数之前或之后调用。
方法:同样钩子也是使用修饰器来实现的。Flask支持4中钩子
• before_first_request :注册一个函数,在处理第一个请求之前运行。
• before_request :注册一个函数,在每次请求之前运行。
• after_request :注册一个函数,如果没有未处理的异常抛出,在每次请求之后运行。
• teardown_request :注册一个函数,即使有未处理的异常抛出,也在每次请求之后运行。
在请求钩子函数和视图函数之间共享数据一般使用上下文全局变量g。例如, before_request处理程序可以从数据库中加载已登录用户,并将其保存到g.user中。随后调用视图函数时,视图函数再使用g.user获取用户。
响应
说的是视图函数返回的内容。
1、视图函数返回的内容包括:相应字符串和状态码。
@app.route('/')
def index():
return '<h1>Bad Request</h1>', 400#200成功处理,400请求无效,
2、返回Response对象。使用make_response()
,返回Response对象。
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
3、重定向。这种响应没有页面文档,只告诉浏览器一个新地址用以加载新页面。
return redirect('http://www.example.com')
4、特殊相应。abort 函数生成,用于处理错误。
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
abort 不会把控制权交还给调用它的函数,而是抛出异常把控制权交给 Web 服务器。返回的状态码是404.
以上是关于flask学习笔记(一hello world)的主要内容,如果未能解决你的问题,请参考以下文章