iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
Modern Web

Flask系列 第 22

Day 22 實作 main_bp

  • 分享至 

  • xImage
  •  

前言

今天基本上進入了最重要也是最後的一個階段,但相對來說今天的內容會比較輕鬆,量也比較少。

main_bp

事不宜遲,就直接來看程式碼,views.py 是昨天在 app/main/ 建立的那個,HTML 都要放在 templates/ 裡面。

error.html

{% extends "base.html" %}

{% block title %}{{ code }}{% endblock %}

{% block content %}
<div>
    <h1>{{ code }}</h1>
    <p>{{ name }}</p>
</div>
{% endblock %}

index.html

{% extends "base.html" %}

{% block title %}Index Page{% endblock %}

{% block content %}
<p>Index Page</p>
{% endblock %}

views.py


from flask import render_template, redirect, url_for
from werkzeug.exceptions import HTTPException
from . import main_bp


@main_bp.route("/", methods=["GET"])
def index_page():
    return render_template("index.html")


@main_bp.app_errorhandler(401)
def handler_401(e):
    return redirect(url_for("user.login_page"))


@main_bp.app_errorhandler(HTTPException)
def handler(e):
    return render_template("error.html", code=e.code, name=e.name), e.code

先看到前面兩個 HTML,他們都是繼承之前寫好的 base.html,所以都非常簡單。第二個沒什麼好說的,基本上就自由發揮。第一個比較麻煩,他有 codename 兩個從 render_template 傳過來的變數,等等在下面就會看到,在這一頁基本上就是簡單地把它們顯示出來而已。

接下來看到 views.py,一樣第一個路徑就跳過,沒什麼好說的。第二個是處理 401 錯誤的 handler,我們在這邊讓他重新導向到登入頁面。最後一個 handler 處理所有錯誤,並且使用了 e.codee.name 來把一些內容傳入,他們分別是 HTTP status code 和該錯誤的說明,像是 Not Found 之類的。在最後,我們把 e.code 當成回傳的 HTTP status code。

References

How to handle ordering of flask error handlers


上一篇
Day 21 實作路徑結構
下一篇
Day 23 實作 user_bp (1)
系列文
Flask30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言