Django auth 应用模块详解

yizhihongxing

下面是关于“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实现微信消息推送

    一 所需准备条件 微信公众号的分类 微信消息推送 公众号 已认证公众号 服务号 已认证服务号 企业号 基于:微信认证服务号 主动推送微信消息。前提:关注服务号环境:沙箱环境 沙箱环境地址: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 二 基本流程 注册开发者账号 获得:appI…

    Django 2023年4月11日
    00
  • python django 配置文件和url参数配置

    配置文件 配置视图查找的路径 静态资源的映射路径 示例如下     第一个参数正则表达式 路由匹配用正则需要引入re_path,以下规则为0-9的4位数字   第一个参数正则表达式分组名 在Python正则表达式中,命名正则表达式组的语法是(?P<name>pattern),组name的名称,并且 pattern是要匹配的模式 year为匹配到的…

    Django 2023年4月16日
    00
  • Django源码分析之执行入口

    魔法门 一般我们启动django,最简单的方法是进入project 目录,这时目录结构是这样的 然后我们执行python manage.py runserver,程序就开始执行了。 那django是如何从一个命令就启动整个server,启动的流程是如何的? 踏门而入 打开目录下的manage.py,内容是这样的: #!/usr/bin/env python …

    Django 2023年4月11日
    00
  • Python——Django-urls.py的作用

    一、urls.py的作用是保存路径和函数的对应关系 二、函数返回指定内容 from django.urls import path #引用HTTP协议的代码 from django.shortcuts import HttpResponse def yimi(request): #request参数保存了所有和用户浏览器请求相关的数据,返回指定内容 retu…

    Django 2023年4月10日
    00
  • 详解Python的Django框架中的中间件

    下面是详解Python的Django框架中的中间件的完整攻略。 什么是中间件 Django中的中间件(middleware)是处理请求和响应的钩子类(hook-based classes),可以拦截请求并进行某些操作,如记录日志、检查用户登录状态以及实现缓存等。 中间件是一个独立模块,可以在Django的settings.py中通过MIDDLEWARE设置来…

    Django 2023年5月16日
    00
  • Django在使用models生成数据库表时报错:django.contrib.admin.sites.AlreadyRegistered: The model Event is already registered

    在进行Django项目中需要创建一个组与用户 实例代码如下: 但是在执行Pythonx manage.py runserver时,就会报错,同时网页端也无法打开,报错如下:       不要慌,先分析下代码报错内容,说在sites.py 这个文件中,93行有这么一个报错:django.contrib.admin.sites.AlreadyRegistered…

    2023年4月9日
    00
  • django解决订单并发问题【推荐】

    以下是对django解决订单并发问题的完整攻略: 核心原理 Django解决并发问题的核心原理是通过数据库的事务机制来保证数据的一致性。当一个用户对某个数据进行操作时,Django会在数据库层面对数据进行锁定,使得其他用户不能同时对该数据进行操作。在用户完成操作后,Django会释放该锁。这样就可以避免多个用户同时对同一个数据进行操作,导致数据不一致的问题。…

    Django 2023年5月16日
    00
  • Django安装与配置(Windows、Linux、MacOS)

    Django是一种基于Python语言的Web应用程序框架,用于开发高效、快速和安全的Web应用程序。本文将详细介绍Django的安装和配置方法,包括Windows、Linux和macOS系统。 Windows系统 安装Python 要使用Django,首先需要安装Python。建议使用Python 3.5及以上版本。可以在Python的官网(https:/…

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