首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Django Rest框架中覆盖令牌类

在Django Rest框架中覆盖令牌类
EN

Stack Overflow用户
提问于 2017-12-29 10:45:12
回答 1查看 620关注 0票数 0

Django是新的,但在我们的用例中,我们需要基于令牌的身份验证,但需要将令牌链接到默认的“用户”模型(django.contrib.auth.models.User)以外的模型。为此,我们可以重写令牌模型/类,也可以继承Token模型并添加新字段并将user字段设置为None,但Django Docs表示

在Django中,模型字段通常不允许这样做。如果非抽象模型基类有一个名为author的字段,则不能在继承自该基类的任何类中创建另一个模型字段或定义一个名为author的属性。

但不久之后,它说,

此限制不适用于从抽象模型继承的模型字段。这些字段可以用另一个字段或值重写,也可以通过设置field_name = None来删除。

现在,如果我们不将rest_framework.authtoken添加到settings.py中,则Token类在技术上是抽象的。因为在Token的源代码中,

代码语言:javascript
复制
abstract = 'rest_framework.authtoken' not in settings.INSTALLED_APPS

那么,是否允许以这种方式覆盖令牌类,还是完全重写模型更好呢?

EN

回答 1

Stack Overflow用户

发布于 2022-11-04 23:57:52

不确定这个问题是否仍然与您相关,但是对于仍感兴趣的人,您应该在应用程序中的rest_framework.authentication.TokenAuthentication文件中创建一个authentication.py类的子类(在我的例子中是user)包,例如:

代码语言:javascript
复制
from rest_framework.authentication import TokenAuthentication as BaseTokenAuthentication
from user.models import Token


class TokenAuthentication(BaseTokenAuthentication):
    model = Token

在这里,您将来自models.py的以下自定义models.py类设置为模型:

代码语言:javascript
复制
from rest_framework.authtoken.models import Token as BaseToken

class Token(BaseToken):
    key = models.CharField(_('Key'), max_length=40, unique=True)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL, related_name='auth_token',
        on_delete=models.CASCADE, verbose_name=_('User')
    )

在您的项目的settings.py设置(user是我的应用程序名称):

代码语言:javascript
复制
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'user.authentication.TokenAuthentication',
    ]
}

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48021343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档