2016-06-07 51 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 
相关问题