flask,mysql如何設定資料庫中的VIP會員時長為一個月

$("#WinsonWang")發表於2024-07-17

在Flask和MySQL中設定資料庫中的VIP會員時長為一個月,可以透過以下步驟實現:

  1. 建立資料庫表:首先,確保你的資料庫中有一個表來儲存使用者資訊,包括VIP會員的開始時間和時長。

  2. 插入或更新VIP會員資訊:在使用者成為VIP會員時,插入或更新使用者的VIP開始時間和時長。

  3. 計算VIP到期時間:在需要檢查使用者是否為VIP會員時,計算當前時間是否在VIP開始時間和到期時間之間。

以下是一個簡單的示例,展示瞭如何在Flask和MySQL中實現這些步驟。

1. 建立資料庫表

假設你已經有一個名為users的表,其中包含使用者資訊。你可以新增兩個欄位來儲存VIP會員的開始時間和時長。

CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(80),
    email VARCHAR(120),
    vip_start_time DATETIME,
    vip_duration INT
);

2. 插入或更新VIP會員資訊

在使用者成為VIP會員時,插入或更新使用者的VIP開始時間和時長。假設你使用Flask-SQLAlchemy來管理資料庫。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from datetime import datetime, timedelta

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@localhost/dbname'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True, nullable=False)
    email = db.Column(db.String(120), unique=True, nullable=False)
    vip_start_time = db.Column(db.DateTime)
    vip_duration = db.Column(db.Integer)

    def make_vip(self):
        self.vip_start_time = datetime.now()
        self.vip_duration = 30  # 一個月的時長,單位為天
        db.session.commit()

@app.route('/make_vip/<int:user_id>')
def make_vip(user_id):
    user = User.query.get_or_404(user_id)
    user.make_vip()
    return f'User {user.username} is now a VIP member!'

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

3. 計算VIP到期時間

在需要檢查使用者是否為VIP會員時,計算當前時間是否在VIP開始時間和到期時間之間。

@app.route('/check_vip/<int:user_id>')
def check_vip(user_id):
    user = User.query.get_or_404(user_id)
    if user.vip_start_time and user.vip_duration:
        vip_end_time = user.vip_start_time + timedelta(days=user.vip_duration)
        if datetime.now() <= vip_end_time:
            return f'User {user.username} is a VIP member until {vip_end_time}.'
        else:
            return f'User {user.username} is not a VIP member anymore.'
    else:
        return f'User {user.username} is not a VIP member.'

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

相關文章