簡體   English   中英

如何同時使用 Django Auth 和 DRF Token auth?

[英]How to use both Django Auth and DRF Token auth?

我正在構建一個 Django 網絡應用程序,我想要兩件事:

  • 將 Django 的內置用戶模型用於 Django 的管理應用程序使用(商店所有者)
  • 在我將命名為“客戶”(商店客戶)的自定義用戶模型上使用 DRF 的令牌身份驗證

我如何為上述目的保留兩個身份驗證系統。 從我讀過的內容來看,每個人都要求覆蓋 User 模型,但我不想這樣做。 相反,我想同時保留兩者。 我應該采取什么策略?

PS:可能是我,但我在 DRF 的文檔中找不到任何解決方案。 如果有,請指出我正確的方向。

Django 確實提供了使用自定義用戶模型的選項。 但是您可以擁有一個且只有一個用戶模型。

該過程相當簡單,創建您自己的模型繼承 django.contrib.auth.models.AbstractUser 並指定 AUTH_USER_MODEL 設置變量。 Django 管理員與“自定義用戶模型”概念配合得很好。 DRF 令牌模型還使用 settings.AUTH_USER_MODEL var 作為其 OneToOne 關系。 因此,這可能是一個可行的解決方案。

要分離用戶類型,您可以使用帶有代表用戶類型的選項的 char 字段或使用現有的 Django 組機制。 但是,在這兩種情況下,您仍然只能擁有一個用戶模型。

對於任何特定細節,您可以與存儲額外信息的不同模型建立一對一關系。

這樣的事情會做,

from django.contrib.auth.models import AbstractUser
from model_utils.choices import Choices   # Useful package
from django.utils.functional import cached_property


class User(AbstractUser):
    USER_TYPES = Choices(
        ("store_owner", "Store Owner"),
        ("customer", "Customer"),
    )
    ...hack...
    user_type = models.CharField(choices=USER_TYPES)
    ...hack...

    @cached_property
    def is_store_owner(self):
        return (
            self.user_type == self.USER_TYPES.store_owner 
            and self.store_owner is not None
        )

    @cached_property
    def is_customer(self):
        return (
            self.user_type == self.USER_TYPES.customer 
            and self.customer is not None
        )


class StoreOwner(models.Model):
    user = models.OneToOneField(
        "yourapp.User", 
        related_name="store_owner",
    )
    # ...extra store owner details...


class Customer(models.Model):
    user = models.OneToOneField(
        "userapp.User",
        related_name="customer",
    )
    # ...extra customer details...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM