Plain is headed towards 1.0! Subscribe for development updates →

plain.api

 1import binascii
 2import os
 3import uuid
 4
 5from plain import models
 6
 7
 8def generate_token():
 9    return binascii.hexlify(os.urandom(20)).decode()
10
11
12@models.register_model
13class APIKey(models.Model):
14    uuid = models.UUIDField(default=uuid.uuid4)
15    created_at = models.DateTimeField(auto_now_add=True)
16    updated_at = models.DateTimeField(auto_now=True)
17    expires_at = models.DateTimeField(required=False, allow_null=True)
18    last_used_at = models.DateTimeField(required=False, allow_null=True)
19
20    name = models.CharField(max_length=255, required=False)
21
22    token = models.CharField(max_length=40, default=generate_token)
23
24    # Connect to a user, for example, from your own model:
25    # api_key = models.OneToOneField(
26    #     APIKey,
27    #     on_delete=models.CASCADE,
28    #     related_name="user",
29    #     allow_null=True,
30    #     required=False,
31    # )
32
33    class Meta:
34        constraints = [
35            models.UniqueConstraint(
36                fields=["uuid"], name="plainapi_apikey_unique_uuid"
37            ),
38            models.UniqueConstraint(
39                fields=["token"], name="plainapi_apikey_unique_token"
40            ),
41        ]
42
43    def __str__(self):
44        return self.name or str(self.uuid)