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里面的html模板语言

    一、模板语言 DTL.(Django Template Language)简称: 模板语言1、模板变量格式:{{变量名}}变量名由数字,字母,下划线组成,不能以下划线开头. 用于访问变量里面的属性如:{{chen.name}}:将chen当成一个对象,把name当成属性或方法,信息取值如在列表取值:{{chen.0}}:相当于取值列表chen[0]值2、模板…

    Django 2023年4月11日
    00
  • 用Python的Django框架编写从Google Adsense中获得报表的应用

    首先让我们来讲解一下用Python的Django框架编写从Google Adsense中获得报表的应用的完整攻略。 1.准备工作 在开始编写应用程序之前,您需要准备以下工具和框架: Python 3.6+ Django 2.x Google Adsense API Google OAuth2认证 2.创建Google OAuth2应用程序 在项目开发之前,首…

    Django 2023年5月16日
    00
  • django基础之数据库操作方法(详解)

    下面是对“django基础之数据库操作方法(详解)”这篇文章的完整攻略: 1. 数据库连接设置 在django中默认使用sqlite作为数据库,可在settings.py文件中进行配置。也可以使用其他关系型数据库,如MySQL等,只需在settings.py中进行配置即可。 2. 数据库操作方法 2.1. 基本方法 Django提供了强大易用的ORM(Obj…

    Django 2023年5月16日
    00
  • [django]session设置与获取原理

    admin登录 情况1: 登录后会产生一个sessionid 情况2: 自定义设置了key后,会多一个sessionid, 登录后会替换为登录后的sessionid的key值 if username == “maotai” and password == “123456”: request.session[‘name’] = “maotai-session”…

    Django 2023年4月10日
    00
  • django+js+ajax实现刷新页面的方法

    下面是关于“django+js+ajax实现刷新页面的方法”的完整攻略: 1. 整体思路 前端使用Ajax发送请求,后端使用Django返回结果,使用DOM API将结果更新到网页中,从而实现刷新页面的作用。 2. 示例一:实现无刷新删除数据 2.1. 前端实现 2.1.1. html 在html页面中,首先要引入jquery和实现删除的js代码: <…

    Django 2023年5月16日
    00
  • django之“static”全局设置

    1. 首先要配置静态文件路径(这些文件不输入任何app):、 # 设置静态文件读取路径(这些静态文件不属于任何app) STATICFILES_DIRS = [ os.path.join(BASE_DIR, ‘front’, ‘dist’)#路径 ] 2. 在 settings.py 文件中 TEMPLATES 下新增节点:’builtins’:[‘djan…

    Django 2023年4月13日
    00
  • [django]从前端返回字符串,后端转换为字典,执行数据添加操作

    具体如题: js代码如下: $(‘#bill_add’).click(function(){//合同添加 var bill1 = $(“#bill1”).val();var bill2 = $(“#bill2”).val();var bill3 = $(“#bill3”).val();var bill4 = $(“#bill4”).val();var bil…

    Django 2023年4月13日
    00
  • django站点管理详解

    下面我将为你详细讲解“Django站点管理详解”的完整攻略。 Django站点管理详解 Django站点管理介绍 Django站点管理是Django框架提供的内置模块,用于管理和展示站点的内容。通过Django站点管理,我们可以方便地进行内容管理、权限管理、页面展示等操作,而无需手动编写代码。 Django站点管理的使用 要使用Django站点管理,在Dja…

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