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

yizhihongxing

下面我将详细讲解“详解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框架学习:二十一.admin列表优化和排序

    今天学习一下列表优化和排序 ModelAdmin django的options.py里面 ModelAdmin类定义的参数可以设置admin后台列表页面,相关的参数如下      排序字段 后台列表页面,如果想按某个字段排序,可以加个ordering参数      刷新页面后,就是降序了 列表分页 列表页默认是设置的100个记录,我们也可以修改下设置成默认每…

    2023年4月10日
    00
  • 动手实践记录(利用django创建一个博客系统)

    1.添加一个分类的标签,和主表的关系是 外键 class Category(models.Model): “”” 分类 “”” name = models.CharField(‘名称’, max_length=16) def __unicode__(self):# 在Python3中用 __str__ 代替 __unicode__ return self.n…

    Django 2023年4月13日
    00
  • django中F与Q查询的使用

    当使用Django ORM查询数据时,查询操作的灵活性是非常重要的。而F和Q查询就是在这种情况下用来实现更复杂、更灵活查询的。本文将介绍F和Q查询的用法,并参考两个示例说明。 F查询 F查询是一种常用的查询方法,用于在查询过程中引用Model实例中的字段。使用F查询时,可以将字段名作为参数传递给F对象,例如下面的查询将查找所有被评论数等于点赞数的博客文章: …

    Django 2023年5月16日
    00
  • uwsgi运行django应用是报错no app loaded. going in full dynamic mode

    今天测试uwsgi运行uwsgi.ini的时候,报错: 网上搜了一天,大都不知原因,还是google吧:github问题解决 说说问题原因吧:根据uwsgi的提示,应该是wsgi.py的application导入问题导致,根据报错,可以尝试用python 导入试试 python -c “from app.wsgi import application” 显然…

    Django 2023年4月13日
    00
  • 使用Django搭建网站实现商品分页功能

    下面是使用Django搭建网站实现商品分页功能的完整攻略。 前置知识 在实现商品分页功能之前,需要了解以下知识: Django框架基本概念和使用方法 Django中模型(Model)的概念和使用方法 Django中视图(View)的概念和使用方法 Django中模板(Template)的概念和使用方法 HTML和CSS的基础知识 实现步骤 创建Django项…

    Django 2023年5月16日
    00
  • Django 自定义存储上传文件的文件名

    一、需求: Django实现自定义文件名存储文件 使文件名看起来统一 避免收到中文文件导致传输、存储等问题 相同的文件也需要使用不同的文件名 二、实现思路: 思路: 生成14位随机字母加数字、后10位采用时间戳。从而实现相同文件不同文件名 1.view版: 在view接收到文件名之后进行重命名,不修改Django默认的文件存储逻辑。从而实现需求 2.uplo…

    Django 2023年4月11日
    00
  • 【Django】使用geetest实现滑动验证

    需导入模块social-auth-app-django 和geetest 提前去官网下载gt.js或者引入http://static.geetest.com/static/tools/gt.js 效果图: html: <div class=”container”> <div class=”row”> <div class=”co…

    Django 2023年4月13日
    00
  • Django学习之六:Django 常用模块导入记忆

    Django 常用模块导入记忆 django相关 1. urls相关操作 from django.urls import path, re_path, include from django.urls import reverse // 注意reverse 和另一个reversed区别。前者要明确导入,后者是built-in内置不用导入;两者功能也不一。 2…

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