6.3 You can log in with your username or email

First add backend in the settings configuration:

AUTHENTICATION_BACKENDS = (
    'users.views.CustomBackend',
)

Add the backend function in users > views.py:

#Achieve both username and email can log in 
class CustomBackend(ModelBackend):
     def authenticate(self, request, username=None, password=None, ** kwargs):
         try :
            user = UserProfile.objects.get(Q(username=username) | Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

The modified views.py content is:

from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login
from django.contrib.auth.backends import ModelBackend
from .models import UserProfile
from django.db.models import Q


# Create your views here.


def user_login(request):
    if request.method == 'GET':
        return render(request, 'login.html', {})
    if request.method == 'POST':
        user_name = request.POST.get('username', '')
        pass_word = request.POST.get( ' password ' , '' )
         #successfully returns user, failure returns None 
        user = authenticate(username=user_name, password= pass_word)
         if user is  not None:
            login(request, user)   #Direct login 
            return redirect( ' home ' )
         else :
             return render(request, ' login.html ' , { ' msg ' : ' The username or password is incorrect. ' })


#Achieve both username and email can log in 
class CustomBackend(ModelBackend):
     def authenticate(self, request, username=None, password=None, ** kwargs):
         try :
            user = UserProfile.objects.get(Q(username=username) | Q(email=username))
            if user.check_password(password):
                return user
        except Exception as e:
            return None

 

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325212048&siteId=291194637