Flask 框架学习记录

3 min read

Flask是一个使用Python编写的轻量级Web应用框架。基于Werkzeug WSGI工具箱和Jinja2模板引擎。

主要是为了写 edusrc用户信息统计脚本 写的很浅显,堪堪入门吧…

安装

pip install flask

初始化

先导入一个 Flask 类的对象,并创建一个该类的实例

from flask import Flask
app = Flask(__name__)

路由

路由就不用多说了,用来把为用户请求的 URL 找出其对应的 视图函数

@app.route('/')
def index():
    return 'Hello,flask!'

当我们访问主页 / 的时候,页面就会自动调用 index() 函数,显示 Hello,flask!

路径传参

格式:url/参数,然后再 视图函数 中接收参数

@app.route('/')
def index():
    return 'Hello,flask!'

@app.route('/<username>')
def name(username):
    return 'Hello,' + str(username)

这样访问 url/iami233 的时候页面就会显示 Hello,iami233,当然我们也可以限制 <username> 的传入类型(<int:userid>)。

  • string(缺省值): 接受任何 不包含斜杠的文本
  • int : 接受 正整数
  • float : 接受 正浮点数
  • path : 类似 string,但可以包含斜杠
  • uuid : 接受 UUID 字符串

HTTP方法

默认情况下路由只响应 GET 请求。 不过可以使用 route() 装饰器的 methods 参数来处理不同的 HTTP 方法。

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

渲染模板

使用 render_template() 方法可以渲染模板,我们只要提供 模板名称 和需要作为 参数 传递给模板的 变量 即可。

from flask import render_template
# 注意我们要导入render_template

@app.route('/hello/<username>')
def hello(username):
    return render_template('hello.html',
        username = username
    )

html 模板需要放在 templates 目录中

/main.py
/templates
    /hello.html

模板示例

<!doctype html>
<title>Hello Flask</title>
<h1>Hello, {{username}}</h1>

jinja2

Flask 使用 Jinja 2 作为 模板引擎,在 Jinja 2 中,存在三种语法

{% %} 控制结构
{{ }} 变量取值
{# #}

一些博主常用操作

# 循环输出变量data
{% for i in data %}
    ...
{% endfor %}

# 判断变量data的长度是否小于五
# 如果小于则根据实际长度与5的差值进行循环
{% if data | length < 5 %}
    {% for i in range(5 - data | length) %}
        ...
    {% endfor %}
{% endif %}

# 条件控制

{% if 条件1 %}
    ...
{% elif 条件2 %}
    ...
{% else %}
    ...
{% endif %}

# 循环控制

{% for i in data %}
    ...
{% else %}
    ...
{% endfor %}

完整示例

from flask import Flask, render_template

@app.route('/')
def index():
    return 'Hello,flask!'

@app.route('/<username>')
def name(username):
    return 'Hello,' + str(username)

@app.route('/hello/<username>')
def hello(username):
    return render_template('hello.html',
        username = username
    )

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