gpt4 book ai didi

python - 为用户模型定义两个不同的扩展

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:04 25 4
gpt4 key购买 nike

class CustomerProfile(models.Model):
user = models.ForeignKey(User, unique=True)
gender = models.CharField(max_length=1,blank=True)
zip_code = models.IntegerField()

class StoreProfile(models.Model):
user = models.ForeignKey(User, unique=True)
phone_number = models.IntegerField()

我希望能够以“商店”或“客户”身份登录/验证用户。

  1. 有没有办法让上面的模型工作?

  2. 我还将查看 @login_required 装饰器以区分已登录的商店和客户。关于如何进行的任何建议?

最佳答案

I would like to be able to login/authenticate a User either as a "store" or a "customer".

Is there a way to make this work with the above model?

是的,但是。

http://docs.djangoproject.com/en/1.2/topics/auth/#storing-additional-information-about-users

如果您想使用自动功能,您会得到一个(单个)与用户关联的配置文件类对象。

如果您不想使用自动配置文件功能,它也可以正常工作。您将无法使用 AUTH_PROFILE_MODULE 设置或 get_profile() 方法用户。你会被迫写很多

try:
CustomerProfile.objects.get( user=request.user )
except CustomerProfile.DoesNotExist:
# hmmm. Must be a Store, not a Customer.

还不错,因为它主要是一个通用函数来获取相关的简介“艰难的道路”。

I will also be looking at the @login_required decorator to differentiate between store that is logged in and a customer. Any advice on how to proceed?

  1. 为每个检查对象对象是否存在的类添加一个save() 方法。如果您尝试为用户创建 CustomerProfile,CustomerProfile.save() 将检查 StoreProfile 并在存在时引发异常。

    这两种关系是互斥的。您需要在各种模型中确保这一点。

  2. 写两个装饰器,你会更开心。它们有相当多的重叠,但编写许多简单的无参数装饰器比编写 super 装饰器要好。

    @customer_required@store_required。每个都将执行 @login_required 的操作,并确定与用户的哪个关系有记录。 customer_required 必须检查与用户的 CustomerProfile 关系。 store_required 检查与用户的 StoreProfile 关系。


http://docs.djangoproject.com/en/1.2/topics/auth/#groups

另一方面,您在 Django 中定义了组。我建议您使用群组和群组名称,而不是尝试拥有像这样的 super 花哨的配置文件。

拥有一个具有所有属性的“主”配置文件。

使用 Django 组表来定义您的各种角色(“用户”、“商店”)并将用户正确分配到组。

然后在您的@store_required 和@customer_required 授权装饰器中检查组名。

关于python - 为用户模型定义两个不同的扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5356533/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com