Django用户登录验证和自定义验证类

这篇具有很好参考价值的文章主要介绍了Django用户登录验证和自定义验证类。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、FBV 用户登录验证

1.1 登录验证并加入 session

用户登录时,使用 authenticate 验证用户名和密码是否正确,正确则返回一个用户对象。
用户名默认的字段名是 username
密码默认的字段名是 password

将已验证的用户添加到当前会话(session)中,可使用 login() 函数完成。

from django.contrib.auth import authenticate, login

def my_view(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(request, username=username, password=password)
    if user is not None:
        login(request, user)
        # Redirect to a success page.
        ...
    else:
        # Return an 'invalid login' error message.
        ...

1.2 登出

from django.contrib.auth import logout

def logout_view(request):
    logout(request)
    # Redirect to a success page.

注意,如果用户未登录,logout() 不会报错。

调用 logout() 后,当前请求的会话数据会被全部清除

1.3 限制对未登录用户的访问

限制访问页面最简单的办法就是检查 request.user.is_authenticated 并重定向到登录页面。
这个校验的属性同样使用模板语言中
{% if request.user.is_authenticated %}

登录成功
{% endif %}

login_required 装饰器实现

from django.contrib.auth.decorators import login_required

@login_required
def my_view(request):
    ...

二、 CBV 用户登录验证

这里假设用户的 model 是 UsersProfile 是继承于 AbstractUser

2.1 登录验证

2.1.1 默认的验证类

Django 的 LoginView 用于对用户登录时提供的用户名和密码进行校验.

注意:
LoginView 也是只验证用户名和密码,并且要求存入数据库的密码字段的值必须是密文的。

django.contrib.auth.hashers 中的 make_password 可以对明文加密。

from django.contrib.auth.hashers import make_password
make_password('明文密码')

① 设置 settings
首先,需要在 settings.py 中设置如下内容

from django.urls import reverse_lazy
# 用户登录成功后跳转的 URL
LOGIN_REDIRECT_URL = reverse_lazy("users:users")

# 用户登录 GET 请求的 URL和登录验证失败后跳转到的 URL
LOGIN_URL = reverse_lazy('users:login')

② 视图
在 views.py 中编写如下 CBV

from django.contrib.auth.views import LoginView


class UserLoginView(LoginView):
    # 指定一个用于接收到 GET 请求时,需要返回的模板文件
    template_name = 'login.html'

三、 自定义验证类

假如,希望在用户登录的时候,可以支持多种方式,比如: 邮箱,手机号等。
那就需要对这些字段进行校验,默认的验证类 LoginView 是无法实现的,此时就需要自定义一个验证类。

3.1 登录验证

① 编写自定义验证类

可以在项目 app 的任意一个文件中编写这个类,之后设置一下就可以了。

比如在 users 应用下新建一个文件 users_auth.py, 添加如下内容

from django.contrib.auth.backends import ModelBackend
from django.contrib.auth import get_user_model
from django.db.models import Q


User = get_user_model()

class CustomBackend(ModelBackend):
    def authenticate(self, request, username=None, password=None, **kwargs):
        try:
            # 通过用户名或邮箱来获取用户对象
            user = User.objects.get(
                Q(username=username) |
                Q(email=username ) |
                Q(mobile = username)
            )
            # 验证用户的密码
            if user.check_password(password):
                return user
        except Exception:
            return None

② 在 settings.py 中设置

# 自定义登录验证类
AUTHENTICATION_BACKENDS = (
    'users.users_auth.CustomBackend',  # 注意后面的逗号
)

3.2 限制对未登录用户的访问

用基于类的视图时,可以使用 LoginRequiredMixin 实现和 login_required 相同的行为。这个 Mixin 应该在继承列表中最左侧的位置。

from django.contrib.auth.mixins import LoginRequiredMixin

class MyView(LoginRequiredMixin, View):
    login_url = '/login/'

示例:

from django.urls import reverse_lazy
from django.contrib.auth.mixins import LoginRequiredMixin

class AssetListView(LoginRequiredMixin, ListView):
    # 假如没有登录,页面将会跳转到下面设置的路由
    login_url = reverse_lazy("users:login")
    ...

3.3 退出登录

退出时候,用户的所以未保存的信息将会丢失,比如正则编写的一个页面中的内容。
同时用户信息和登录状态将会删除。文章来源地址https://www.toymoban.com/news/detail-620000.html

from django.contrib.auth.views import LogoutView

class UserLogoutView(LogoutView):
    # 用户退出登录后,将要跳转的 URL
    next_page = reverse_lazy('users:login')

到了这里,关于Django用户登录验证和自定义验证类的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用Django Rest Framework设计与实现用户注册API

    在现代Web应用开发中,RESTful API已成为前后端分离架构中的关键组件。Django Rest Framework (DRF) 是一款基于Django的优秀库,提供了丰富的工具和接口,极大地简化了RESTful API的设计与实现。本文将以用户注册功能为例,展示如何运用DRF构建一个完整的API端点,包括数据验证、模型

    2024年04月25日
    浏览(34)
  • Django用户认证: 利用Django Auth模块实现用户注册、登录与登出

    用户登录注册属于用户认证的一部分,Django内置了一套用户认证体系,使用起来比较方便,而且支持用户定制和拓展,足以满足任何复杂的业务需求。 Django框架中,用户权限管理被划分为三个层次: 用户 :系统使用者,拥有自己的权限。可被一个或多个用户组包含。 用户组

    2023年04月20日
    浏览(55)
  • Django笔记三十二之session登录验证操作

    本文首发于公众号:Hunter后端 原文链接:Django笔记三十二之session登录验证操作 这一篇笔记将介绍 session 相关的内容,包括如何在系统中使用 session,以及利用 session 实现登录认证的功能。 这篇笔记将分为以下几个内容: session 的使用流程 session 的配置和相关方法 users 模块的

    2024年02月01日
    浏览(61)
  • Django自定义用户错误记录

    执行: 1 setttings.py: 先注释掉 django.contrib.admin 2 注释掉urls.py path(“admin/”, admin.site.urls), 执行3: $ python3 manage.py migrate 再取消注释:1,2 再次执行4 $ python3 manage.py migrate1

    2024年02月16日
    浏览(38)
  • Django实现用户注册登录,表单提交后跳转网页(学习笔记)

    效果图如下:   使用命令提示符,进入想存放项目的目录: 在项目coco目录下新建static文件夹,用于存放网页文件的css,js,imgs 在coco_app目录下新建文件夹templates,用于存放需要用到的HTML网页 打开coco文件夹中的settings.py注册coco_app 引用templates 连接数据库,这里我用的MySQL数据

    2023年04月11日
    浏览(80)
  • django REST框架- Django-ninja

    Django 是我学习的最早的web框架,大概在2014年,当时选他原因也很简单就是网上资料比较丰富,自然是遇到问题更容易找答案,直到 2018年真正开始拿django做项目,才对他有了更全面的了解。他是一个入门有门槛,学会了做项目非常方便的Web框架。 《2020 Python 开发者调查结果

    2024年02月05日
    浏览(32)
  • Django进阶:DRF(Django REST framework)

    DRF 即 Django REST framework 的缩写,官网上说: Django REST framework 是一个强大而灵活的工具包,用于 构建Web API 。 简单来说:通过DRF创建API后,就可以通过HTTP请求来获取、创建、更新或删除数据(CRUD)。 那么为什么要构建API呢? 在Django中,我们通过 model-view-template 实现了 后端和前

    2024年02月11日
    浏览(38)
  • Python Django的学生选课管理系统,实现多用户登录注册,可选课可评课

    学生选课管理系统是一个基于Python Django开发的教务管理系统,旨在提供方便快捷的选课服务和学籍管理功能。该系统分为教师端和学生端两个角色,为教师和学生提供了不同的功能和权限。 教师端功能: 教师可以登录系统后,进行课程管理、成绩录入和学生管理等操作。具

    2024年01月24日
    浏览(48)
  • 【后端】Django与Django REST Framework的结合使用

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 随着开发语言及人工智能工具的普及,使得越来越多的人会主动学习使用一些开发语言,本文主要介绍Django与Django REST Framework的结合使用。 创建Django项目通常包括以下步骤: 安装Django : 首先,确保你的

    2024年04月26日
    浏览(35)
  • 深入探索 Django Rest Framework

    这篇文章会详细介绍Django REST Framework的核心组成部分,包括Serializers、ViewSets、Routers、权限和认证系统以及测试和调试工具。文章从基础开始,逐步深入,旨在帮助读者掌握使用Django REST Framework构建复杂API的技能。 Django REST框架,通常简称为DRF,是一个强大而灵活的Web API工具

    2024年02月15日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包