美文网首页
flask快速入门

flask快速入门

作者: 莫辜负自己的一世韶光 | 来源:发表于2018-09-26 11:55 被阅读0次
  • 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()来渲染模板.

相关文章

网友评论

      本文标题:flask快速入门

      本文链接:https://www.haomeiwen.com/subject/eownnftx.html