Django 用户登陆功能

Django 使用 django.contrib.auth 实现用户的登录

继承View类,实现 其中的get 和 post 方法,将需要的登录逻辑写入其中。

前端使用用户名(name = username) 和密码(name = password)实现登录。

为了减少对于数据库的操作,在输入用户名和密码的时候使用 forms 进行简单的校验。

在apps目录中创建 forms.py 定义登录的简单校验。

from django import forms


class LoginForm(forms.Form):
    username = forms.CharField(required=True)
    password = forms.CharField(required=True, min_length=5)

在views引入LoginForm类。对于输入的用户名和密码使用  authenticate  进行验证。

user_name = request.POST.get('username', '')
pass_word = request.POST.get('password', '')
user = authenticate(username = user_name, password = pass_word)

为了实现使用用户名或者邮箱进行登录,需要重写authenticate方法。这里定义一个类继承 ModelBackend (2),这里还需要在setting中进行配置(1)。

(1)

AUTHENTICATION_BACKENDS = [
    'users.views.CustomBackend',
]
(2)
class CustomBackend(ModelBackend):
    def authenticate(self, 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
该 authenticate 方法返回的是user。
            if user is not None:
                login(request, user)
                return render(request, 'index.html', {})
            else:
                return render(request, 'login.html', {'msg':'用户名或者密码错误!'})

即完成登录逻辑

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页