해당 앱의 models.py
파일에 넣을 수 있습니다 (예 : main/
). post_save.connect(create_api_key, sender=User)
이 수행하는 작업은 User
인스턴스가 저장 될 때마다 create_api_key()
이 호출된다는 것입니다.
이제 tastypie의 소스에 create_api_key()
다이빙으로 무엇을 조금 살펴 보자
class ApiKey(models.Model):
user = models.OneToOneField(User, related_name='api_key')
key = models.CharField(max_length=256, blank=True, default='')
created = models.DateTimeField(default=datetime.datetime.now)
def __unicode__(self):
return u"%s for %s" % (self.key, self.user)
def save(self, *args, **kwargs):
if not self.key:
self.key = self.generate_key()
return super(ApiKey, self).save(*args, **kwargs)
def generate_key(self):
# Get a random UUID.
new_uuid = uuid.uuid4()
# Hmac that beast.
return hmac.new(str(new_uuid), digestmod=sha1).hexdigest()
def create_api_key(sender, **kwargs):
"""
A signal for hooking up automatic ``ApiKey`` creation.
"""
if kwargs.get('created') is True:
ApiKey.objects.create(user=kwargs.get('instance'))
당신이 볼 수 있듯이, create_api_key()
이 (가) User
를 호출과 관련이있는 새로운 ApiKey
기록을 작성합니다. 이 레코드는 ApiKey
테이블에 저장되었을 때 HMAC 키를 갖습니다. 키는 generate_key()
함수에 의해 생성됩니다.
멋진 ... 감사합니다. 따라서 사용자의 계정 정보를 변경하면 api 키가 변경됩니다 (암호가 변경된 경우). –
아니요, API 키는 새 사용자 레코드가'created' 인 경우에만 생성됩니다 : https://docs.djangoproject.com/en/dev/ref/signals/#post-save. 기본적으로 새로운'User' 레코드가 생성되면'created = True' 매개 변수가'create_api_key()'로 보내집니다.'User'는'created = True'를 설정하지 않으므로 ApiKey 생성을 트리거하지 않습니다. –
감사합니다. 알아두면 좋은 점 –