flask快速入门

  • Flask简介

Flask框架是一个基于python微型的web框架.,并不是说Flask功能比较弱,微框架的意思是Flask代码简洁,且易于扩展.它不会并不包含数据库抽象层,表单验证或者任何其它现有的库Django 能够处理的。相反,Flask 支持扩展,这些扩展能够添加功能到你的应用,像是 Flask 本身实现的一样。众多的扩展提供了数据库集成,表单验证,上传处理,多种开放的认证技术等功能. Flask的核心代码基于两个库WerkzeugJinja2,一个负责对请求进行处理,一个负责模板渲染.Flask本身只是WerkzeugJinja2之间的桥梁,前者实现一个适合WSGI的应用,后者处理模板


  • 一个最小的应用

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

if __name__ == '__main__':
    app.run()

将这段代码保存了hello.py,然后运行,就可以在 http://127.0.0.1:5000/ 里访问就可以看到 Hello World的字样


  • 解释代码
  1. 首先我们导入了类 Flask。这个类的实例化将会是我们的 WSGI 应用。第一个参数是应用模块的名称。 如果你使用的是单一的模块(就如本例),第一个参数应该使用 __name__。因为取决于如果它以单独应用启动或作为模块导入, 名称将会不同 ( '__main__' 对应于实际导入的名称)。
  2. 接着,我们创建一个该类的实例,我们传递给它模块或包名,这样 Flask 才会知道去哪里寻找模板、静态文件等等。
  3. 我们使用装饰器 route() 告诉 Flask 哪个 URL 才能触发我们的函数。
  4. 定义一个函数,该函数名也是用来给特定函数生成 URLs,并且返回我们想要显示在用户浏览器上的信息。
  5. 最后我们用函数 run() 启动本地服务器来运行我们的应用。if __name__ =='__main__': 确保服务器只会在该脚本被 Python 解释器直接执行的时候才会运行,而不是作为模块导入的时候。

  • 调试模式
    run() 方法是十分适用于启动一个本地开发服务器,但是你需要在修改代码后手动重启服务器. 这样做并不好,Flask 能做得更好。如果启用了调试支持,在代码修改的时候服务器能够自动加载, 并且如果发生错误,它会提供一个有用的调试器。

有两种方式开启调式模式。一种是在应用对象上设置标志位:

app.debug = True
app.run()

或者作为run的一个参数传入
app.run(debug=True)

  • 路由
@app.route('/')
def index():
    return 'Index Page'

@app.route('/hello')
def hello():
    return 'Hello World'

route()装饰器是用于把一个函数绑定到URL上,也可以在同一个函数上配置多个装饰器,制定多个规则.

变量规则

为了给 URL 增加变量的部分,你需要把一些特定的字段标记成 <variable_name>。这些特定的字段将作为参数传入到你的函数中。当然也可以指定一个可选的转换器通过规则 <converter:variable_name>。 这里有一些不错的例子:

@app.route('/user/<username>')
def show_user_profile(username):
    # show the user profile for that user
    return 'User %s' % username

@app.route('/post/<int:post_id>')
def show_post(post_id):
    # show the post with the given id, the id is an integer
    return 'Post %d' % post_id

注意: 默认没有指定类型的时候都是string类型的,可以指定特定的类型,使用如下的转化器

int 接收整数
float 同int一样,但是接收浮点数
path 和默认的string相似,但是接收斜线

唯一的URLs/重定向行为

Flask 的 URL 规则是基于 Werkzeug 的 routing 模块。 该模块背后的想法是基于 Apache 和早期的 HTTP 服务器定下先例确保优雅和唯一的 URL。
后面带斜杠的路由

@app.route('/projects/')
def projects():
    return 'The project page'

规范的 URL 指向 projects 尾端有一个斜线。 这种感觉很像在文件系统中的文件夹。访问一个结尾不带斜线的 URL 会被 Flask 重定向到带斜线的规范URL去。当我们在页面上访问时如果忘记了后面的斜线,它会重定向到带有斜线的路由上面去.这样可以做到当用户访问页面时忘记结尾斜线时,这个行为允许关联的 URL 继续工作, 并且与 Apache 和其它的服务器的行为一致。另外,URL 会保持唯一,有助于避免搜索引擎索引同一个页面两次.但是这样做也有一个弊端,网站路由url加斜杠,用户访问的url无论加不加斜杠均可访问正常,但是不加斜杠的访问链接会做重定向,影响访问速度。

后面不带斜杠的路由

@app.route('/about')
def about():
    return 'The about page'

这种URL后面不带斜杠,类似于linux下文件的路径,这个时候如果在网址上访问带斜杠的URL的时候,就不会发生重定向的行为,会产生一个404 notfound的错误.


构建URL

如果它可以匹配 URL,那么 Flask 能够生成它们吗?当然 Flask 能够做到。你可以使用函数 url_for() 来针对一个特定的函数构建一个 URL。它能够接受函数名作为第一参数,以及一些关键字参数, 每一个关键字参数对应于 URL 规则的变量部分。未知变量部分被插入到 URL 中作为查询参数。这里有些例子:


运行结果:


  • HTTP方法

HTTP协议有不同的方法来访问URLs.默认情况下,路由只会响应GET请求,当时通过给route()装饰器设置参数methods来改变,常用的是设置访问方法为methods=['GET','POST']

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        do_the_login()
    else:
        show_the_login_form()
  • 静态文件

Flask用来存放静态文件(javascript,css,image)默认是在static文件夹下,你只要在你的包中或者模块旁边新建一个static文件夹,就可以在你的应用中通过/static来访问.

注意:你可以通过构建Flask实例对象的时候指定静态文件的默认存放目录

  • 渲染模板

你可以通过render_template()来渲染模板.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容