Django Auth应用实现用户身份认证

Django Auth应用是Django官方提供的一个用户认证应用,可以用于实现用户的注册、登录、注销等功能。本文将介绍如何使用Django Auth应用实现用户身份认证的完整方法。

安装Django Auth应用

首先需要安装Django Auth应用,可以使用pip安装:

pip install django-auth

或者在项目的requirements.txt文件中添加以下内容:

django-auth

配置Django Auth应用

在Django的settings.py文件中,需要添加以下配置项:

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

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
]

其中,INSTALLED_APPS需要添加django.contrib.auth和django.contrib.contenttypes两个应用;AUTHENTICATION_BACKENDS需要添加django.contrib.auth.backends.ModelBackend作为默认的身份认证后端。

创建用户模型

Django Auth应用使用的是Django自带的用户模型,可以通过以下命令创建用户模型:

python manage.py migrate auth

如果需要自定义用户模型,可以在models.py文件中定义一个继承自AbstractBaseUser和PermissionsMixin的用户模型:

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

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    name = models.CharField(max_length=30)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    date_joined = models.DateTimeField(auto_now_add=True)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['name']

    objects = UserManager()

    class Meta:
        verbose_name = 'user'
        verbose_name_plural = 'users'

    def get_full_name(self):
        return self.name

    def get_short_name(self):
        return self.name

    def __str__(self):
        return self.email

在上面的代码中,我们自定义了一个包含email、name等字段的用户模型,并通过USERNAME_FIELD指定了用户名字段为email。REQUIRED_FIELDS指定注册时需要填写的字段列表。

创建用户管理器

如果自定义用户模型,还需要创建一个用户管理器。可以在managers.py文件中定义一个继承自BaseUserManager的用户管理器:

from django.contrib.auth.base_user import BaseUserManager

class UserManager(BaseUserManager):
    use_in_migrations = True

    def create_user(self, email, name, password=None, **kwargs):
        if not email:
            raise ValueError('Users must have an email address')
        user = self.model(
            email=self.normalize_email(email),
            name=name,
            **kwargs
        )
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_superuser(self, email, name, password=None, **kwargs):
        kwargs.setdefault('is_staff', True)
        kwargs.setdefault('is_superuser', True)
        return self.create_user(email, name, password, **kwargs)

在上述代码中,我们通过create_user方法创建用户,create_superuser方法创建超级用户。

创建用户注册视图

接下来,我们需要创建用户注册视图。在views.py文件中添加以下代码:

from django.contrib.auth import authenticate, login
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import redirect, render

def register(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)
        if form.is_valid():
            form.save()
            email = form.cleaned_data.get('email')
            password = form.cleaned_data.get('password1')
            user = authenticate(request, email=email, password=password)
            login(request, user)
            return redirect('home')
    else:
        form = UserCreationForm()
    return render(request, 'registration/register.html', {'form': form})

在上述代码中,我们使用了django.contrib.auth.forms.UserCreationForm来创建用户注册表单,用户提交注册表单后,将用户信息保存到数据库中,并使用authenticate方法进行身份认证,最后使用login方法登录到系统中。

创建用户登录视图

类似地,我们需要创建用户登录视图。在views.py文件中添加以下代码:

from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate, login
from django.shortcuts import redirect, render

def login_view(request):
    if request.user.is_authenticated:
        return redirect('home')
    if request.method == 'POST':
        form = AuthenticationForm(request, request.POST)
        if form.is_valid():
            email = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            user = authenticate(request, email=email, password=password)
            if user is not None:
                login(request, user)
                return redirect('home')
    else:
        form = AuthenticationForm()
    return render(request, 'registration/login.html', {'form': form})

在上述代码中,我们同样使用django.contrib.auth.forms.AuthenticationForm来创建用户登录表单,并在用户成功登录后跳转到网站首页。

创建用户注销视图

最后,我们需要创建用户注销视图。在views.py文件中添加以下代码:

from django.contrib.auth import logout
from django.shortcuts import redirect

def logout_view(request):
    logout(request)
    return redirect('home')

在上述代码中,我们使用django.contrib.auth.logout方法注销用户,并跳转到网站首页。

配置网站URL

最后,我们需要在urls.py文件中配置网站URL。添加以下代码:

from django.contrib.auth.views import LogoutView
from django.urls import path
from . import views

urlpatterns = [
    path('register/', views.register, name='register'),
    path('login/', views.login_view, name='login'),
    path('logout/', LogoutView.as_view(next_page='home'), name='logout'),
    ...
]

在上述代码中,我们使用django.contrib.auth.views.LogoutView来处理用户注销操作,并使用next_page参数指定注销后跳转的页面。

至此,使用Django Auth应用实现用户身份认证的完整实现方法就结束了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django Auth应用实现用户身份认证 - Python技术站

(0)
上一篇 2023年3月12日
下一篇 2023年3月12日

相关文章

  • Django orm 实现批量插入数据

    Django ORM 中的批量操作 在Hibenate中,通过批量提交SQL操作,部分地实现了数据库的批量操作。但在Django的ORM中的批量操作却要完美得多,真是一个惊喜。 数据模型定义 首先,定义一个实例使用的django数据库模型Product,只是象征性地定义了两个字段name和price。 from django.db import models…

    Django 2023年4月9日
    00
  • Django 多环境配置详解

    下面我来详细讲解“Django 多环境配置详解”的完整攻略。 什么是多环境配置? 在开发一个 Django 网站的过程中,我们需要在本地环境、测试环境和生产环境等不同的环境下进行部署。而不同的环境可能需要不同的配置,比如数据库设置、缓存设置等等。因此,我们需要对不同的环境进行不同的配置,这就是多环境配置。 多环境配置步骤 实现 Django 的多环境配置可以…

    Django 2023年5月16日
    00
  • Django笔记二十一之使用原生SQL查询数据库

    本文首发于公众号:Hunter后端原文链接:Django笔记二十一之使用原生SQL查询数据库 Django 提供了两种方式来执行原生 SQL 代码。 一种是使用 raw() 函数,一种是 使用 connection.cursor()。 但是官方还是推荐在使用原生 SQL 之前,尽量的先去探索一下 QuerySet 提供的各种 API。 目前而言,官方文档提供…

    2023年4月13日
    00
  • 【开源】最近写了一个简单的网址导航网站

    前言 随着团队的成长,要管理的项目或使用的内部系统越来越多,很多内部系统都没有域名,使用IP+端口,很难记。 为了解决这个痛点,我抽空写了个导航网站~ 目前用下来效果还不错,可以基本完美的解决这个问题。 项目名称是 SiteDirectory ,代码在 Github 开源了: https://github.com/Deali-Axy/SiteDirector…

    2023年4月10日
    00
  • windows下使用nginx + waitress 部署django

    虽然不喜欢IIS,不过有些项目又必须部署在windows上,windows下部署django的方案有IIS + wfastcgi,apache + mod_wsgi,也有超简单的部署方式如:nginx + waitress,本文主要讲的是最后一种部署方式。 程序文件 随便找个目录放置好程序文件 下载安装nginx和配置文件 1、下载下载链接:http://n…

    2023年4月10日
    00
  • Python Django log日志

    log开发日志 一、创建项目 1、python -m venv ll_env # 创建虚拟环境 2、source ll_env/bin/activate # 激活虚拟环境 3、pip install django # 安装django 4、django-admin.py startproject project . # 创建项目 5、python manag…

    Django 2023年4月11日
    00
  • Django 连接Mysql异常处理

    启动manage.py提示 连接数据库异常 django.db.utils.OperationalError: (2003, “Can’t connect to MySQL server on ‘127.0.0.1’ ([Errno 10061] )”)   此时cmd.exe  输入mysql指令同样有异常提示: C:\Windows\system32&g…

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