hanabiapp.views.home

 1from flask import Flask, Blueprint, render_template, redirect, url_for
 2from flask_login import login_required, current_user
 3from .. import db
 4from ..models.user import User
 5
 6bp = Blueprint('home', __name__)
 7
 8@bp.route('/home', methods=['GET'])
 9@login_required
10def home():
11    """
12    ホームページを表示する関数.
13
14    - ユーザーの総プレイ時間を取得し,テンプレートに渡す.
15    - ユーザーのデータが存在しない場合は,プレイ時間を 0 に設定する.
16
17    Returns:
18        Response: `home.html` テンプレートをレンダリングしたレスポンス
19    """
20    total_play_time = db.session.execute(db.select(User.total_play_time).where(User.id==current_user.id)).scalar_one_or_none()
21    if total_play_time:
22        return render_template('home.html', total_play_time=total_play_time)
23    else:
24        return render_template('home.html', total_play_time=0)
25
26def format_play_time(seconds):
27    """
28    総プレイ時間を時・分・秒の形式にフォーマットする関数.
29
30    Args:
31        seconds (int): 総プレイ時間(秒)
32
33    Returns:
34        str: フォーマットされた時間文字列(例: "1時間20分30秒")
35    """
36    hours = seconds // 3600
37    minutes = (seconds % 3600) // 60
38    secs = seconds % 60
39
40    if hours > 0:
41        return f"{hours}時間{minutes}{secs}秒"
42    elif minutes > 0:
43        return f"{minutes}{secs}秒"
44    else:
45        return f"{secs}秒"
46
47def register_filters(app: Flask):
48    """
49    Jinja2 テンプレートエンジンにカスタムフィルタを登録する関数.
50
51    Args:
52        app (Flask): Flask アプリケーションインスタンス
53    """
54    app.jinja_env.filters['format_play_time'] = format_play_time
bp = <Blueprint 'home'>
@bp.route('/home', methods=['GET'])
def home():
 9@bp.route('/home', methods=['GET'])
10@login_required
11def home():
12    """
13    ホームページを表示する関数.
14
15    - ユーザーの総プレイ時間を取得し,テンプレートに渡す.
16    - ユーザーのデータが存在しない場合は,プレイ時間を 0 に設定する.
17
18    Returns:
19        Response: `home.html` テンプレートをレンダリングしたレスポンス
20    """
21    total_play_time = db.session.execute(db.select(User.total_play_time).where(User.id==current_user.id)).scalar_one_or_none()
22    if total_play_time:
23        return render_template('home.html', total_play_time=total_play_time)
24    else:
25        return render_template('home.html', total_play_time=0)

ホームページを表示する関数.

  • ユーザーの総プレイ時間を取得し,テンプレートに渡す.
  • ユーザーのデータが存在しない場合は,プレイ時間を 0 に設定する.
Returns:

Response: home.html テンプレートをレンダリングしたレスポンス

def format_play_time(seconds):
27def format_play_time(seconds):
28    """
29    総プレイ時間を時・分・秒の形式にフォーマットする関数.
30
31    Args:
32        seconds (int): 総プレイ時間(秒)
33
34    Returns:
35        str: フォーマットされた時間文字列(例: "1時間20分30秒")
36    """
37    hours = seconds // 3600
38    minutes = (seconds % 3600) // 60
39    secs = seconds % 60
40
41    if hours > 0:
42        return f"{hours}時間{minutes}{secs}秒"
43    elif minutes > 0:
44        return f"{minutes}{secs}秒"
45    else:
46        return f"{secs}秒"

総プレイ時間を時・分・秒の形式にフォーマットする関数.

Arguments:
  • seconds (int): 総プレイ時間(秒)
Returns:

str: フォーマットされた時間文字列(例: "1時間20分30秒")

def register_filters(app: flask.app.Flask):
48def register_filters(app: Flask):
49    """
50    Jinja2 テンプレートエンジンにカスタムフィルタを登録する関数.
51
52    Args:
53        app (Flask): Flask アプリケーションインスタンス
54    """
55    app.jinja_env.filters['format_play_time'] = format_play_time

Jinja2 テンプレートエンジンにカスタムフィルタを登録する関数.

Arguments:
  • app (Flask): Flask アプリケーションインスタンス