2013-04-26 118 views
0

我是django新手,我创建了如下模型。我想从管理面板创建新的Apiuser时,自动填充这些api_key和secret_key。填充Django模型字段

逻辑用于产生API_KEY和SECRET_KEY

".join([random.choice(string.letters + string.digits + string.punctuation) for _ in xrange(64)]) 

这里是模型:

class ApiUser(models.Model): 
    name = models.CharField(max_length = 50) 
    email = models.EmailField() 
    api_key = RandomAlphaNum(editable=False) 
    secret_key = RandomAlphaNum(editable=False) 
    quota = models.IntegerField() 
    used = models.IntegerField() 
    datejoined = models.DateTimeField(auto_now_add = True) 
    status = models.CharField(max_length=1, choices=STATUS_CHOICES) 
+1

我建议使用SHA1去。它对于大多数目的而言足够快速和随机。否则,尝试使用密码随机的os.urandom,而不是psudeo-random。我可以理解你的意图使用原始代码 - mod 64,但我没有看到使用它的安全性。 – CppLearner 2013-04-26 07:59:26

回答

3

可以使用post_save信号,例如

from django.db.models.signals import post_save 
from django.dispatch import receiver 
from myapp.models import MyModel 

@receiver(post_save, sender=MyModel) 
def my_handler(sender, **kwargs): 
    # do stuff 

更多信号:https://docs.djangoproject.com/en/dev/topics/signals/

+1

你甚至读过文档吗?一些例子。 – 2013-04-26 08:11:55