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)的主要内容,如果未能解决你的问题,请参考以下文章

Flask 教程,第一部分:Hello,World!

SpringMvc 学习基础笔记——Hello World

SpringMvc 学习基础笔记——Hello World

Flask版 hello world

HI3861学习笔记——打印Hello World

NodeMCU学习笔记--- 编写第一个NodeMCU程序“Hello World!“