我有两个型号
from django.contrib.auth.models import User
class Vendor(models.MOdel):
user = models.ForeignKey(User,related_name = 'vendor')
......................................................
......................................................
class Customer(models.MOdel):
user = models.ForeignKey(User,related_name = 'customer')
........................................................
.......................................................
我想要做的是为供应商和客户启用登录。供应商的登录网址是“vendor / login”,客户是“customer / login”。虽然供应商提交了他的凭据,我想检查是否用户是否是供应商并提出验证错误。我找不到使用django完成此操作的方法。我基本上需要的是像用户的模型形式,它检查用户是使用queryset的供应商。但是django auth没有这样的东西。
答案 0 :(得分:2)
您可以使用Django custom user model,添加类型字段并将其用作工厂源来加载供应商/客户对象。这样的解决方案对我很有用。从...开始:
<强> models.py 强>
from django.contrib.auth.models import AbstractUser
TYPES = (
('Vendor', 'Vendor'),
('Customer', 'Customer'),
)
class MyUser(AbstractUser):
type = models.CharField(max_length=10, choices=TYPES, default='Customer')
如果您将来需要添加其他类型,这种方法非常灵活,可以很好地扩展。重定向方法的一个小例子:
class Base():
def __init__(self, auth_user):
self.user = auth_user
def redirect_to(self):
return ""
class Vendor(Base):
def redirect_to(self):
return "/login/vendor"
class Customer(Base):
def redirect_to(self):
return "/login/customer"
然后在login
视图中,您只需动态创建用户对象:
auth_user = form.get_user()
cls = globals()[auth_user.type]
user = cls(auth_user) # This will return either Vendor or Customer object
return HttpResponseRedirect(user.redirect_to())
您只需添加新类并实现所需的方法即可轻松创建其他用户类型,而无需触及其余代码。
答案 1 :(得分:2)
对我来说,最好的策略是编写两个身份验证后端,一个支持供应商身份验证,另一个支持客户身份验证。
AUTHENTICATION_BACKENDS是给定授权后端元组的设置常量。 here可以查看有关身份验证后端的文档。
使用settings参数声明您的实现。订单计数django将尝试所有后端,直到一个成功。