2016-06-07 46 views
1

我使用rest_framework.authtoken.models令牌。我可以看到3個關鍵字,created_at和user_id。如何在令牌模型中添加字段在Django Rest框架Authtoken

應用背景:

我使用Chrome應用客戶端應用程序,我想使用令牌認證與我在Django休息框架API連接。並且我想將user_id和company_id存儲在authtoken_token表中。所以我可以存儲剛剛在Chrome應用中的localStorage的令牌密鑰,

enter image description here

  1. 我的問題是我如何能增加一個額外的領域像COMPANY_ID該模型?我無法找到關於此的任何文檔或文章。

  2. 我也在傑米的回答this article子類的模型,但我不知道如何。

謝謝!

+0

檢查[多表繼承(https://docs.djangoproject.com/en/1.9/topics/db/models /#多表繼承) –

回答

0

定義你自己的身份驗證方法: settings.py

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

authentication.py

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

class MyOwnTokenAuthentication(TokenAuthentication): 
    model = MyOwnToken 

model.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: 

settings.py

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

authentication.py

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

class MyOwnTokenAuthentication(TokenAuthentication): 
    model = MyOwnToken 

model.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.key 
相關問題