详解Django之auth模块(用户认证)

下面我将详细讲解“详解Django之auth模块(用户认证)”的完整攻略,并且会包含两条示例说明,其内容如下:

详解Django之auth模块(用户认证)

什么是Django auth模块?

Django auth是Django的一个内置模块,用于提供用户认证、用户组、权限等功能。它提供了一组可重用的视图和模板,可以快速构建用户注册、登录、注销等功能。在Django开发中,使用auth模块可以大大简化用户认证的流程。

auth模块的使用

创建用户

Django auth模块默认提供了User模型,可以用来存储和管理用户相关的信息。要创建用户,可以按照如下步骤操作:

  1. models.py中导入django.contrib.auth.models模块;
  2. 创建用户:
from django.contrib.auth.models import User
user = User.objects.create_user(username='用户名', password='密码')

创建用户的代码会自动对密码进行加密存储,不需要手动处理。

用户认证

用户认证是auth模块的核心功能,主要包括登录和注销。下面是一个实现基本登录认证的示例:

  1. settings.py中添加django.contrib.auth.middleware.AuthenticationMiddleware中间件;
  2. views.py中导入django.contrib.auth模块;
  3. 编写登录视图:
from django.contrib.auth import authenticate, login
from django.http import HttpResponse

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return HttpResponse('登录成功')
        else:
            return HttpResponse('用户名或密码错误')
    else:
        return render(request, 'login.html')

其中,authenticate函数用于验证用户名和密码,如果验证成功,返回对应的用户对象;login函数则用于登录指定的用户。

用户权限

Django auth模块还提供了对用户权限的支持,可以通过User对象进行设置和管理。下面是一个例子:

user = User.objects.get(username='test_user')
# 获取或创建权限
permission = Permission.objects.get_or_create(codename='can_publish',
                                               name='Can publish articles',
                                               content_type=content_type)[0]
# 将权限赋予用户
user.user_permissions.add(permission)

该代码实现了获取用户对象并给该用户添加一个名为“Can publish articles”的权限的功能。

auth模块的配置

要在Django项目中使用auth模块,还需要进行相关的配置。下面是一些常用的配置方式:

使用auth视图和模板

要使用auth模块提供的视图和模板,需要在urls.py中添加如下代码片段:

from django.contrib.auth import views as auth_views

urlpatterns = [
    # 登录、注销视图
    path('accounts/login/', auth_views.LoginView.as_view(), name='login'),
    path('accounts/logout/', auth_views.LogoutView.as_view(), name='logout'),
    # 修改密码视图
    path('accounts/password_change/', auth_views.PasswordChangeView.as_view(), name='password_change'),
    path('accounts/password_change/done/', auth_views.PasswordChangeDoneView.as_view(), name='password_change_done'),
    # 重置密码视图
    path('accounts/password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
    path('accounts/password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('accounts/reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('accounts/reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

自定义用户模型

Django auth模块默认提供了一个User模型,如果需要增加或修改用户相关的字段,可以考虑自定义用户模型。具体实现方式可以参考Django文档中的说明。

示例说明

下面是两条关于auth模块的示例:

示例一

需求:实现一个用户登录认证的功能。

解决方案:按照如下步骤进行操作:

  1. 创建一个名为“login”的URL,并指定对应的视图;
  2. 在views.py中定义login视图,代码如下:
from django.contrib.auth import authenticate, login
from django.http import HttpResponse

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)
        if user is not None:
            login(request, user)
            return HttpResponse('登录成功')
        else:
            return HttpResponse('用户名或密码错误')
    else:
        return render(request, 'login.html')

其中,authenticate函数用于验证用户名和密码,如果验证成功,返回对应的用户对象;login函数则用于登录指定的用户。

  1. 创建一个名为“login.html”的模板,作为登录视图的显示界面。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
</head>
<body>
    <form method="POST" action="{% url 'login' %}">
        {% csrf_token %}
        <label for="username">用户名:</label>
        <input id="username" name="username" type="text" required>
        <br><br>
        <label for="password">密码:</label>
        <input id="password" name="password" type="password" required>
        <br><br>
        <input type="submit" value="登录">
    </form>
</body>
</html>

该模板通过表单方式提交数据,并将数据提交到login视图进行处理。

示例二

需求:给指定用户添加一个“创建文章”的权限。

解决方案:按照如下步骤进行操作:

  1. 获取指定用户的User对象。
from django.contrib.auth.models import User
user = User.objects.get(username='test_user')
  1. 获取或创建需要添加的权限。
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import Permission

content_type = ContentType.objects.get_for_model(Article)
permission = Permission.objects.get_or_create(codename='can_create_article',
                                               name='Can create article',
                                               content_type=content_type)[0]

其中,ContentType.objects.get_for_model()函数可以通过模型对象获取该模型对应的ContentType对象。

  1. 将权限赋予指定用户。
user.user_permissions.add(permission)

通过上述代码,已经实现了给指定用户添加“创建文章”的权限的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Django之auth模块(用户认证) - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django WebEditor(CKeditor)

    涉及到的文件会在文章结尾给出下载地址!   1) 将 ckeditor 放在某个位置,只要你的settings可以搜索到,比如,我放在目录第一层,setting设置如下: INSTALLED_APPS = ( ‘ckeditor’, ) 2) 将静态文本放在static下。 目录结构应该为 : –static/    –ckeditor/        …

    Django 2023年4月13日
    00
  • django+uwsgi+docker+k8s+jenkins

        其实这个搞这个就因为一点小事,django的日志无法按日期切分 原来方式都是直接用manage.py runserver的,听取了同事的建议开始准备使用uwsgi来搞   1.安装uwsgi   pip install uwsgi     2.django新增一个uwsgi的配置文件 [uwsgi] http = :端口 socket = /tmp/…

    Django 2023年4月13日
    00
  • 【django】admin 后台自定义按钮 传参

    class NongYeInfomation(models.Model): “”” 农业资讯 “”” title = models.CharField(max_length=255,verbose_name=”标题”) url = models.CharField(max_length=255,verbose_name=”路由”) create_time =…

    Django 2023年4月12日
    00
  • Django笔记二十三之case、when操作条件表达式搜索、更新等操作

    本文首发于公众号:Hunter后端原文链接:Django笔记二十三之条件表达式搜索、更新等操作 这一篇笔记将介绍条件表达式,就是如何在 model 的使用中根据不同的条件筛选数据返回。 这个操作类似于数据库中 if elif else 的逻辑。 以下是本篇笔记的目录: model 和数据准备 When 和 Case 操作新增字段返回 条件搜索 条件更新 条件…

    Django 2023年4月14日
    00
  • Django 使用VScode 创建工程的详细步骤

    下面是详细的步骤和两个示例: 安装VSCode和Python环境 在开始Django项目之前,首先需要安装VSCode和Python环境。 下载和安装VSCode。 下载和安装Python,注意版本应该是3.x系列。 创建Django项目 打开VSCode,创建一个新的工作空间。 使用以下命令创建Django项目(假设项目名为myproject): pyth…

    Django 2023年5月16日
    00
  • 【Django drf】视图类APIView之五层封装 ApiView的类属性 drf配置文件

    目录 ApiView的类属性 drf 配置文件之查找顺序 drf之请求 APIView之请求相关配置 drf之响应 APIView之响应相关配置 Response对象属性 视图类 序列化类 路由 基于GenericAPIview 写五个接口 GenericAPIview必备设置 查询所有 get_queryset() get_serializer() get…

    Django 2023年4月13日
    00
  • Django 执行 makemigrations 显示 No changes detected in app

    在Django项目配置一下多数据库,但是运行 makemigrations 执行不正常 $ python manage.py makemigrations polls No changes detected in app ‘polls’   models.py 代码: class Question(models.Model): question_text =…

    Django 2023年4月10日
    00
  • python ==> Django.view(登录,注册,个人页)

    Django-views 1.本篇博客主要是想实现一个:通过Django创建一个项目,目的: 三个界面,用户登录界面,用户注册界面,用户登录成功之后的个人页。本篇功能很简单,就是简单的时间页面的跳转,主要以练习为主。 首先:我们先把项目创建好,这里我创建的Django的项目名为:mysite_views,并且创建一个应用项目:app01.  两种创建方式: …

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部