gpt4 book ai didi

django - 如何使用迁移框架添加 Django REST Framework 身份验证 token

转载 作者:行者123 更新时间:2023-12-02 21:12:25 27 4
gpt4 key购买 nike

我正在使用 Django REST Framework 设置新的 API,并且需要向所有现有用户添加身份验证 token 。文档说要做:

from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token

for user in User.objects.all():
Token.objects.get_or_create(user=user)

但理想情况下,这应该使用 Django 的新迁移框架来实现。

有没有简单的方法可以做到这一点?

最佳答案

这里的技巧是知道Token使用自定义save()方法来生成唯一的token.key,但是该自定义 >save() 方法不在迁移内运行。因此,第一个 token 将具有空白 key ,第二个 token 将失败并出现 IntegrityError,因为它们的 key 也是空白且不唯一。

相反,请将 generate_key() 代码复制到您的迁移中,如下所示:

# Generated with `manage.py makemigrations --empty YOUR-APP`.

import binascii
import os

from django.db import migrations

# Copied from rest_framework/authtoken/models.py.
def generate_key():
return binascii.hexlify(os.urandom(20)).decode()

def create_tokens(apps, schema_editor):
User = apps.get_model('auth', 'User')
Token = apps.get_model('authtoken', 'Token')
for user in User.objects.filter(auth_token__isnull=True):
token, _ = Token.objects.get_or_create(user=user, key=generate_key())

class Migration(migrations.Migration):

dependencies = [
('YOUR-APP', 'YOUR-PREVIOUS-MIGRATION'),
]

operations = [
migrations.RunPython(create_tokens),
]

您应该避免将 rest_framework 代码直接导入到迁移中,否则有一天您的迁移将无法运行,因为您决定删除 rest_framework 或库的界面发生了更改。迁移需要及时卡住。

关于django - 如何使用迁移框架添加 Django REST Framework 身份验证 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32723601/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com