django如何用邮箱代替用户名登录

有两种方法

方法一,修改username字段,让他跟email字段一模一样,然后把email放到username,email字段里面,username放到firstname或者lastname里面,这样username其实就是email了。简单方便,而且代码改动也比较少,我使用的是这种。

方法二,自己写一个方法来验证,然后加进setting里面。

下面方法转自http://www.cnblogs.com/aguncn/p/5653850.html

就是另一个不同的登陆backend。

而DJANGO会尝不同的方式,哪个成功就用哪个

authentication.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from django.contrib.auth.models import User
 
 
class EmailAuthBackend(object):
    def authenticate(self, username=None, password=None):
        try:
            user = User.objects.get(email=username)
            if user.check_password(password):
                return user
            return None
        except User.DoesNotExist:
            return None
 
    def get_user(self, user_id):
        try:
            return User.objects.get(pk=user_id)
        except User.DoesNotExist:
            return None

  setting.py中加一个认证方式:

1
2
3
4
AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'account.authentication.EmailAuthBackend',
)
原文地址:https://www.cnblogs.com/lgh344902118/p/6594276.html