欢迎访问宙启技术站
智能推送

Python中Token的持久化存储和管理方法

发布时间:2024-01-02 16:28:52

在Python中,Token的持久化存储和管理方法有很多种,以下给出两种常用的方法和相应的使用例子。

方法一:使用数据库存储Token

一种常见的方法是将Token存储在数据库中,可以使用关系型数据库如MySQL或非关系型数据库如MongoDB。

使用MySQL存储Token的例子:

1. 首先,创建一个用于存储Token的MySQL表,可以包含字段token和expiration。

CREATE TABLE token (
    token varchar(255),
    expiration datetime
);

2. 在Python代码中,使用数据库连接库如pymysql连接到MySQL数据库,并编写函数来存储和获取Token。

import pymysql
import datetime

def store_token(token, expiration):
    conn = pymysql.connect(host='localhost', user='root', password='password', db='test')
    cur = conn.cursor()
    sql = "INSERT INTO token (token, expiration) VALUES (%s, %s)"
    try:
        cur.execute(sql, (token, expiration))
        conn.commit()
    except Exception as e:
        print("Error during token insertion:", e)
        conn.rollback()
    finally:
        cur.close()
        conn.close()

def get_token():
    conn = pymysql.connect(host='localhost', user='root', password='password', db='test')
    cur = conn.cursor()
    sql = "SELECT token, expiration FROM token WHERE expiration > %s ORDER BY expiration DESC LIMIT 1"
    current_time = datetime.datetime.now()
    try:
        cur.execute(sql, (current_time,))
        row = cur.fetchone()
        if row:
            return row[0]  # 返回Token
        else:
            return None
    except Exception as e:
        print("Error during token retrieval:", e)
    finally:
        cur.close()
        conn.close()

使用MongoDB存储Token的例子:

1. 首先,创建一个用于存储Token的MongoDB集合。

from pymongo import MongoClient

client = MongoClient('mongodb://localhost:27017/')
db = client['test']
collection = db['token']

2. 在Python代码中,定义函数来存储和获取Token。

import datetime

def store_token(token, expiration):
    token_data = {
        'token': token,
        'expiration': expiration
    }
    collection.insert_one(token_data)

def get_token():
    current_time = datetime.datetime.now()
    token_data = collection.find_one({'expiration': {'$gt': current_time}})
    if token_data:
        return token_data['token']
    else:
        return None

方法二:使用文件存储Token

另一种简单的方法是将Token存储在文件中,可以使用普通的文本文件或JSON文件来存储。这种方法适用于小型项目或只需要存储少量Token的场景。

使用普通文本文件存储Token的例子:

1. 定义一个函数来存储和获取Token。

def store_token(token, expiration):
    with open('token.txt', 'w') as file:
        file.write(f"{token}
{expiration}")

def get_token():
    try:
        with open('token.txt', 'r') as file:
            token = file.readline().strip()
            expiration = file.readline().strip()
            # 检查Token是否已过期
            if datetime.datetime.strptime(expiration, '%Y-%m-%d %H:%M:%S') > datetime.datetime.now():
                return token
            else:
                return None
    except FileNotFoundError:
        return None

使用JSON文件存储Token的例子:

1. 定义一个函数来存储和获取Token。

import json

def store_token(token, expiration):
    token_data = {
        'token': token,
        'expiration': expiration
    }
    with open('token.json', 'w') as file:
        json.dump(token_data, file)

def get_token():
    try:
        with open('token.json', 'r') as file:
            token_data = json.load(file)
            # 检查Token是否已过期
            if datetime.datetime.strptime(token_data['expiration'], '%Y-%m-%d %H:%M:%S') > datetime.datetime.now():
                return token_data['token']
            else:
                return None
    except FileNotFoundError:
        return None

以上是Python中Token的持久化存储和管理的两种常用方法和相应的使用例子。根据实际需求选取合适的存储方式来管理Token,可以提高应用的灵活性和安全性。