Day 5 基本 flask 函式 (2)

前言

今天会继续探讨其他的 flask 的函式。如果说昨天的函式是用来给予使用者回应,那今天提到的函式就是比较偏向接收使用者的请求。

范例一

首先来看个小小的例子。
app.py

from flask import Flask
from utils import get_url_map

app = Flask(__name__)

@app.route("/")
def url_map():
    get_url_map()
    return ""


app.run(host="127.0.0.1", port=8080, debug=True)

utils.py

from flask import current_app

def get_url_map():
    print(current_app.url_map)

app.py 中,我们 import 了另外一个 module 里面的 get_url_map 函式,而该函式则呼叫了从 flask 引入的 current_app,并 print 他的 url_map

这边的重点就在该 current_app,他会被设定成一开始在 app.py 宣告的 app。要这麽做的原因在於我们无法直接从 app.py 引入我们设的 app,因为这样会导致 circular import,所以 flask 提供了这个方法让我们可以在其他 module 中存取到 app

范例二

昨天有提到怎麽新增及删除 cookie,但却没有提到如何读取现在的 cookie,因为他需要用到的不是 resposne,而是 request,也就是在这个范例要讲的概念。不例外地,先从一个范例看起。

from flask import Flask, request, make_response

app = Flask(__name__)

@app.route("/", methods=["GET", "POST"])
def index_page():
    cookies = request.cookies
    if request.method == "GET":
        print(cookies["user"])
        return "GET /"
    if request.method == "POST":
        return "POST /"

@app.route("/set")
def set_cookie():
    response = make_response("")
    response.set_cookie("user", "cat")
    return response

app.run(host="127.0.0.1", port=8080, debug=True)

这里面有两个路径,第二个跟昨天设定 cookie 是一样的,比较有趣的是第一个。先看到 request 这个物件,他一样需要先 import。它代表了现在 flask 收到的 request,也就是说,在第一个路径里使用 request 和在第二个路径里使用会有不同的结果。
这个 request 内包含了很多资讯,这边只挑两个未来会用到的来说,分别是 request.cookiesrequest.method,其余的可以参考 flask.Request 或其原始码。

  • request.cookies 就是昨天没有说的「读取 cookie」的部分,他基本上是一个不可修改的 dict,所以在下面我们使用 dict 的方式 (cookies["user"]) 来存取这个 cookie 的值。
  • request.method 是一个字串,就是存取的 HTTP method,以此路径为例,只有 GET、POST 两种可能 (在 app.route() 定义过了),所以在下方的判断就只做这两个。这个方式非常常用,基本上每一个路径都会用到。

除了上述这几个之外,request.form 也很常用,顾名思义,他就是处理使用者提交的表单,但因为我们之後会使用 Flask-WTF,不会直接操作到他,所以暂时不提。

References

Get the data received in a Flask request


<<:  DAY05 - [CSS] 三角型,来个推荐标签吧!

>>:  帮服务建置布署流程至 EC2

【C++】String and Number Reverse

Reverse ,看似一个简单的功能,但它却出现在许多公司的面试题库。 那我们直接来看它是如何实现的...

Day 15 - LocalStorage and Event Delegation

题外话 不知不觉铁人赛也到一半了呢! 开学後,能写文章的时间就渐渐变少(期初各种专题、报告就纷纷露头...

Chapter2 - Canvas动画(II)用国中数学拆解Ease-out和Ease-in

如何计算每一侦的位移 首先我们改写一下昨天的格式,还记得昨天我们用到的是这样的写法: cursorX...

Alpine Linux Porting (一点十?)

为了更理解Alpine initramfs的眉角,今天持续来看一下Alpine的mkinitfs套件...

day3_精简指令集带给 arm 的优势与短板

指令集与执行的程序 看完後上一篇我们知道,指令集代表在 cpu 内预先准备好的动作代号,比如说 代号...