Как добавить поле в модель токена в Authtoken Django Rest Framework

я использую токен rest_framework.authtoken.models. я вижу 3 поля, которые являются ключевыми, created_at и user_id.

История приложения:

Я использую приложение Chrome в качестве клиента для приложения, я хочу использовать аутентификацию с помощью токена для подключения к моим API-интерфейсам в рамках django rest. и я хочу сохранить user_id и company_id в таблице authtoken_token. чтобы я мог хранить только токен-ключ в локальном хранилище приложения Chrome,

введите здесь описание изображения

  1. Мой вопрос: как добавить в эту модель дополнительное поле, например company_id? Я не мог найти никаких документов или статей об этом.

  2. У меня также есть ответ Джейми в эта статья для создания подкласса модели, но я не знаю, как это сделать.

Спасибо!


person Binsoi    schedule 07.06.2016    source источник
comment
Проверьте наследование нескольких таблиц.   -  person Rahul Gupta    schedule 08.06.2016


Ответы (1)


Определите собственный метод аутентификации: settings.py

    'DEFAULT_AUTHENTICATION_CLASSES': (
    'my_project.my_app.authentication.myOwnTokenAuthentication',
     ),

аутентификация.py

from rest_framework.authentication import TokenAuthentication
from my_project.my_app.models.token import MyOwnToken

class MyOwnTokenAuthentication(TokenAuthentication):
    model = MyOwnToken

модель.py

import binascii
import os

from django.db import models
from django.utils.translation import ugettext_lazy as _
from my_project.companies.models import Company


class MyOwnToken(models.Model):
    """
    The default authorization token model.
    """
    key = models.CharField(_("Key"), max_length=40, primary_key=True)

    company = models.OneToOneField(
        Company, related_name='auth_token',
        on_delete=models.CASCADE, verbose_name="Company"
    )
    created = models.DateTimeField(_("Created"), auto_now_add=True)

    class Meta:
        verbose_name = _("Token")
        verbose_name_plural = _("Tokens")

    def save(self, *args, **kwargs):
        if not self.key:
            self.key = self.generate_key()
        return super(MyOwnToken, self).save(*args, **kwargs)

    def generate_key(self):
        return binascii.hexlify(os.urandom(20)).decode()

    def __str__(self):
        return self.keyDefine you own authentication method:
person mullerivan    schedule 20.12.2016