我刚刚完成了Django教程,想要创建一个网站,要求用户使用电子邮件地址和密码登录。这与Django强大的内置管理站点完全分开(只有一两个特殊人员可以访问管理员)。
我的问题是:
我应该创建一个单独的数据库表来存储用户凭据,信息等吗?或者我应该使用现有的Django表吗?
如上所述,用户应使用电子邮件地址登录。这会是Django的问题吗?
非常感谢其他最佳做法。谢谢。
答案 0 :(得分:3)
用户登录不需要单独的表。只需利用Auth framework允许用户使用他们的电子邮件地址登录非常简单,但有几种不同的方法可以解决这个问题。您需要先从:https://docs.djangoproject.com/en/1.7/topics/auth/customizing/
开始答案 1 :(得分:1)
首先是什么是中间件 它是一个轻量级的低级“插件”系统,用于全局改变Django的输入或输出。
你可以在这里阅读如何activating-middleware
创建电子邮件后端middleware
将帮助您根据电子邮件地址作为用户名对用户进行身份验证
def authenticate(self, username=None, password=None):
try:
user = User.objects.get(email=username)
if user.check_password(password):
return user
except User.DoesNotExist:
return None
答案 2 :(得分:0)
AUTHENTICATION_BACKENDS = ('accounts.backend.EmailOrUsernameModelBackend')
然后在accounts / backend.py中:
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend as _ModelBackend
User = get_user_model()
class EmailOrUsernameModelBackend(_ModelBackend):
""" Authenticate user by username or email """
def authenticate(self, username=None, password=None):
if '@' in username:
kwargs = {'email': username}
else:
kwargs = {'username': username}
try:
user = User.objects.get(**kwargs)
if user.check_password(password):
return user
else:
return None
except User.DoesNotExist:
return None
def get_user(self, user_id=None):
try:
return User.objects.get(pk=user_id)
except User.DoesNotExist:
return None
现在您可以使用您的用户名或电子邮件登录 玩得开心