Django auth 应用模块详解

下面是关于“Django auth 应用模块详解”的完整攻略。

Django auth 应用模块详解

什么是 Django auth 应用模块?

Django auth 模块是 Django 框架内置的一个用于认证和授权的应用模块,它提供了一系列的现成的功能和模板,帮助我们快速地实现用户认证和授权的功能。

它包括用户认证、用户注册、忘记密码等功能,并且还有一个非常重要的功能就是用户权限管理。

如何使用 Django auth 应用模块?

步骤 1:安装 Django

在使用 Django auth 应用模块之前,需要先安装 Django。

pip install Django

步骤 2:创建 Django 项目和应用

使用如下命令创建 Django 项目:

django-admin startproject myproject

使用如下命令创建 Django 应用:

python manage.py startapp myapp

步骤 3:配置 Django auth 应用模块

在 myproject/settings.py 配置文件中添加如下配置:

INSTALLED_APPS = [
    # ...
    'django.contrib.auth',
]

在 myproject/urls.py 文件中添加如下视图路由:

from django.contrib.auth.views import LoginView, LogoutView

urlpatterns = [
    # ...
    path('login/', LoginView.as_view(), name='login'),
    path('logout/', LogoutView.as_view(), name='logout'),
]

以上配置完成后,即可在浏览器中访问相应的 URL 来登录和注销用户。

步骤 4:自定义用户模型

在 Django auth 应用模块中,有一个默认的用户模型(User),但是如果需要添加一些自定义的属性,可以通过继承 AbstractBaseUser 和 PermissionsMixin 来创建一个自定义的用户模型。

from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, PermissionsMixin
from django.db import models


class MyUserManager(BaseUserManager):
    def create_user(self, email, password=None):
        if not email:
            raise ValueError('Email is required')

        user = self.model(
            email=self.normalize_email(email),
        )

        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, password):
        user = self.create_user(
            email=email,
            password=password,
        )

        user.is_admin = True
        user.save(using=self._db)
        return user


class MyUser(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)

    objects = MyUserManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    def __str__(self):
        return self.email

    def has_perm(self, perm, obj=None):
        return True

    def has_module_perms(self, app_label):
        return True

    @property
    def is_staff(self):
        return self.is_admin

在 myproject/settings.py 添加如下配置:

AUTH_USER_MODEL = 'myapp.MyUser'

然后运行如下命令创建自定义用户表:

python manage.py makemigrations
python manage.py migrate

步骤 5:访问用户信息

在视图中可以通过 request.user 来访问当前登录的用户信息。如果需要在模板中访问用户信息,可以在上下文中添加 request 对象,如下所示:

def my_view(request):
    context = {
        'user': request.user,
    }
    return render(request, 'my_template.html', context)

可以通过使用 Django 的模板标签来访问用户信息:

{% if user.is_authenticated %}
    <p>Welcome, {{ user.email }}!</p>
{% else %}
    <p>Please log in.</p>
{% endif %}

示例 1:用户注册

以下是基于 Django auth 应用模块实现用户注册的示例。

注册页面(templates/registration/register.html)

{% extends 'base.html' %}

{% block content %}
    <h2>Register</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Register</button>
    </form>
{% endblock %}

注册表单(forms.py)

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model


class MyUserCreationForm(UserCreationForm):
    class Meta:
        model = get_user_model()
        fields = ('email', 'name')
        widgets = {
            'email': forms.EmailInput(attrs={'class': 'form-control'}),
            'name': forms.TextInput(attrs={'class': 'form-control'}),
        }

注册视图(views.py)

from django.shortcuts import render, redirect
from django.contrib.auth import get_user_model, login
from .forms import MyUserCreationForm


def register(request):
    if request.method == 'POST':
        form = MyUserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            user = get_user_model().objects.latest('id')
            login(request, user)
            return redirect('home')
    else:
        form = MyUserCreationForm()

    context = {
        'form': form,
    }
    return render(request, 'registration/register.html', context)

注册 URL(urls.py)

from django.urls import path
from .views import register

urlpatterns = [
    # ...
    path('register/', register, name='register'),
]

以上代码实现了一个简单的用户注册页面,并且在用户注册成功后,会自动登录并跳转到首页。

示例 2:忘记密码

以下是基于 Django auth 应用模块实现忘记密码功能的示例。

忘记密码页面(templates/registration/password_reset_form.html)

{% extends 'base.html' %}

{% block content %}
    <h2>Forgotten password</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Reset password</button>
    </form>
{% endblock %}

忘记密码成功页面(templates/registration/password_reset_done.html)

{% extends 'base.html' %}

{% block content %}
    <h2>Forgotten password sent</h2>
    <p>We've emailed you instructions for setting your password.</p>
{% endblock %}

重设密码页面(templates/registration/password_reset_confirm.html)

{% extends 'base.html' %}

{% block content %}
    <h2>Reset password</h2>
    <form method="post">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Reset password</button>
    </form>
{% endblock %}

重设密码成功页面(templates/registration/password_reset_complete.html)

{% extends 'base.html' %}

{% block content %}
    <h2>Password reset complete</h2>
    <p>Your password has been set. You can now log in to your account.</p>
{% endblock %}

忘记密码视图(views.py)

from django.contrib.auth import views as auth_views

urlpatterns = [
    # ...
    path('password_reset/', auth_views.PasswordResetView.as_view(), name='password_reset'),
    path('password_reset/done/', auth_views.PasswordResetDoneView.as_view(), name='password_reset_done'),
    path('reset/<uidb64>/<token>/', auth_views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
    path('reset/done/', auth_views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

以上代码实现了一个完整的忘记密码功能,支持用户填写邮箱地址,重置密码,并通过邮件发送重置密码的链接。

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

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

相关文章

  • Django 基础篇

    一:Django 简介 Django 中提供了开发网站经常用到的模块,常见的代码都为你写好了,通过减少重复的代码,Django 使你能够专注于 web 应用上有 趣的关键性的东西。为了达到这个目标,Django 提供了通用Web开发模式的高度抽象,提供了频繁进行的编程作业的快速解决方法,以及为“如何解决问题”提供了清晰明了的约定。Django的理念是DRY(…

    Django 2023年4月9日
    00
  • settings.py配置文件是什么?

    Django是一个高效的Web框架,可以轻松地搭建一个功能完善的Web应用程序,而其强大灵活的配置可以借助于settings.py文件实现。 设置调整 Django的settings.py文件包含一系列的配置选项,这些选项可以根据开发需求进行相应的调整和配置。这些选项包括但不限于以下内容: DEBUG:这是一个布尔值,表示是否启用调试模式。在调试模式下,Dj…

    Django 2023年3月12日
    00
  • 在django admin中添加自定义视图

    来自https://blog.csdn.net/qq_35753140/article/details/84881757   django admin提供了完善的用户管理和数据模型管理,方便实用。研究了一下在admin里面添加自己的页面。 在admin.py里继承django.contrib.admin.ModelAdmin基类 class FaceAdmi…

    Django 2023年4月10日
    00
  • Nginx+ uWSGI +django进行部署

    一:uWSGI的安装 sudo pip install uwsgi 如果安装报错: conda install -c conda-forge uwsgi conda install -c conda-forge libiconv   测试 test.py: uwsgi –http :8020 –chdir /mnt/d/hegh/projects/080…

    Django 2023年4月10日
    00
  • Django 内置权限扩展案例详解

    这里是针对“Django 内置权限扩展案例详解”的完整攻略,包含两个示例说明的详细讲解。 1. 示例一 1.1 案例描述 假设我们要实现一个博客系统,需要实现以下功能: 所有用户都可以浏览博客列表和单篇博客。 未登录用户不能对博客进行任何操作(包括新建、修改、删除和点赞)。 登录用户可以进行以下操作: 创建自己的博客文章。 修改自己创建的博客文章。 删除自己…

    Django 2023年5月16日
    00
  • Django之drf的视图类

    目录 1. 视图相关 1.1. 请求与响应 1.1.1 Request 1.1.1.1 常用属性 1).data 2).query_params 1.1.2 Response 1.1.2.1 构造方式 1.1.2.2 常用属性 1).data 2).status_code 3).content 1.1.2.3 状态码 1)信息告知 – 1xx 2)成功 – …

    2023年4月10日
    00
  • Django Rest Framework之解析器

    urls.py: from django.conf.urls import url, include from web.views.s5_parser import TestView urlpatterns = [ url(r’test/’, TestView.as_view(), name=’test’), ]  views.py: from rest_f…

    2023年4月9日
    00
  • django缓存优化中caches参数如何配置?

    在python开发中,如果运营django进行编写,为了提升效率,常常需要优化缓存,接下来和大家介绍的就是缓存优化中必须只晓得caches参数相关知识,一起来看看吧。 CACHES 配置参数概述 – 格式 CACHES 字典配置格式如下 { ‘default’: { ‘BACKEND’: ‘django.core.cache.backends.locmem.…

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