Python flask库

15 阅读1分钟

Flask 框架介绍

Flask 是一个使用 Python 编写的轻量级(Lightweight)Web 应用框架。它通常被称为“微框架”(Micro-framework),它的核心简单且依赖很少,给了开发者极大的灵活性和可扩展性

pip install flask

路径传参

from flask import Flask

app = Flask(__name__)


@app.route('/user/<int:id>')
def get_user(id):
    return f'ID: {id}'


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

get请求

from flask import Flask, request

app = Flask(__name__)


@app.route('/get')
def get():
    p = request.args.get('p')
    return f'参数p: {p}'


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

post请求

from flask import Flask, request, render_template

app = Flask(__name__)


@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    else:
        u = request.values.get('username')
        p = request.values.get('password')
        return f'your name is {u} and password is {p}'


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

templates目录下新建login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
<form action="login" method="post">
    <table>
        <tr>
            <td>
                用户名:
            </td>
            <td>
                <input type="text" name="username"/>
            </td>
        </tr>
        <tr>
            <td>
                密码:
            </td>
            <td>
                <input type="password" name="password"/>
            </td>
        </tr>
        <tr>
            <td>
                <button type="submit">登录</button>
            </td>
        </tr>
    </table>
</form>
</body>
</html>

Hook功能

Hooks 的主要目的是实现应用范围内的横切关注点(Cross-Cutting Concerns) ,将这些通用逻辑与具体的业务逻辑(即视图函数)分离,通过这种方式可以避免了在每个视图函数内部重复编写认证检查的代码,实现了代码的复用和解耦

from flask import Flask, request, render_template

app = Flask(__name__)


@app.route('/test_hook')
def test_hook():
    print('hook')
    return 'ok'


@app.before_request
def do_something_before():
    print('something_before', request.url)


@app.after_request
def do_something_after(response):
    print('something_after', request.url)
    return response


@app.teardown_request
def do_something_teardown(exception):
    print('do_something_teardown', exception, request.url)


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

重定向

from flask import Flask, redirect, url_for

app = Flask(__name__)


# 重定向到掘金
@app.route('/r')
def r():
    return redirect('https://juejin.cn/')


# 内部重定向,参数为函数名而非路径
@app.route('/to')
def to():
    return redirect(url_for('hello_world'))


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


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

响应格式

from flask import Flask, make_response
import json

app = Flask(__name__)


# text格式输出
@app.route('/text')
def text():
    r = make_response('<p>Hello World!</p>')
    r.mimetype = 'text/plain'
    return r


# html格式输出
@app.route('/html')
def html():
    r = make_response('<p>Hello World!</p>')
    r.mimetype = 'text/html'
    return r


# json格式输出
@app.route('/json')
def jn():
    data = {
        'hello': 'world',
        'world': 'hello'
    }
    r = make_response(json.dumps(data))
    r.mimetype = 'application/json'
    return r


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