Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在Django中实现使用userid和密码的自定义用户认证

在Django中实现使用userid和密码的自定义用户认证

原创
作者头像
IT蜗壳-Tango
发布于 2024-07-03 09:38:01
发布于 2024-07-03 09:38:01
65502
代码可运行
举报
运行总次数:2
代码可运行

在本教程中,我们将详细介绍如何在Django中实现自定义用户认证,使用包含userid字段的CustomUser模型以及标准的密码认证。本教程假设您已经对Django有基本的了解并且已经设置好了项目。

概述

  1. 设置和配置
  2. 定义包含userid字段的CustomUser模型。
  3. 创建自定义认证后端,用于使用userid认证用户。
  4. 配置Django设置以使用自定义认证后端。
  5. 创建登录视图和API
  6. 开发登录表单和处理userid和密码认证的API端点。
  7. 确保API响应中包含CSRF保护和错误处理。
  8. 前后端集成
  9. 使用AJAX请求在前端页面中与后端进行通信,处理用户认证的成功和失败情况。

逐步教程

1. 定义CustomUser模型

首先,在usermanagement/models.py中定义一个CustomUser模型,包含userid字段以及其他可选字段如readingsignature

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# usermanagement/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    userid = models.CharField(max_length=20, unique=True)
    reading = models.CharField(max_length=100, blank=True, null=True, verbose_name="名前の読み方")
    signature = models.TextField(blank=True, null=True, verbose_name="メール署名")

    def __str__(self):
        return self.userid
2. 创建自定义认证后端

接下来,创建一个自定义认证后端(usermanagement/auth_backends.py),用于使用userid字段进行用户认证。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# usermanagement/auth_backends.py
from django.contrib.auth import get_user_model
from django.contrib.auth.backends import ModelBackend

User = get_user_model()

class CustomUserBackend(ModelBackend):
    def authenticate(self, request, userid=None, password=None, **kwargs):
        try:
            user = User.objects.get(userid=userid)
        except User.DoesNotExist:
            return None

        if user.check_password(password):
            return user
        return None
3. 配置Django设置

settings.py中配置Django设置,以使用自定义认证后端。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# settings.py
AUTHENTICATION_BACKENDS = [
    'usermanagement.auth_backends.CustomUserBackend',
    'django.contrib.auth.backends.ModelBackend',  # 默认的 ModelBackend
]
4. 创建登录API视图

开发一个登录API视图(usermanagement/views.py),处理userid和密码认证的POST请求。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# usermanagement/views.py
from django.contrib.auth import authenticate, login
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt

@csrf_exempt
def login_api(request):
    if request.method == 'POST':
        userid = request.POST.get('userid')
        password = request.POST.get('password')

        user = authenticate(request, userid=userid, password=password)
        if user is not None:
            login(request, user)
            return JsonResponse({'success': True})
        else:
            return JsonResponse({'success': False, 'error': '无效的凭据'}, status=401)
    else:
        return JsonResponse({'error': '方法不允许'}, status=405)
5. 实现登录表单和前后端集成

开发一个登录表单(templates/login.html),并使用AJAX请求在前端与后端进行集成,处理用户认证的成功和失败情况。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- templates/login.html -->
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
    <script>
        $(document).ready(function() {
            $('#login-form').submit(function(event) {
                event.preventDefault();

                var userid = $('#userid').val();
                var password = $('#password').val();

                $.ajax({
                    type: 'POST',
                    url: '/api/login/',
                    data: {
                        'userid': userid,
                        'password': password,
                        'csrfmiddlewaretoken': $('input[name=csrfmiddlewaretoken]').val()
                    },
                    success: function(response) {
                        if (response.success) {
                            window.location.href = '/';  // 登录成功后重定向到首页
                        } else {
                            alert('登录失败:' + response.error);
                        }
                    },
                    error: function(xhr, errmsg, err) {
                        console.log(xhr.status + ": " + xhr.responseText);
                        alert('登录失败,请稍后再试。');
                    }
                });
            });
        });
    </script>
</head>
<body>
    <h2>用户登录</h2>
    <form id="login-form" method="post">
        {% csrf_token %}
        <label for="userid">用户ID</label>
        <input type="text" id="userid" name="userid" required><br><br>
        
        <label for="password">密码:</label>
        <input type="password" id="password" name="password" required><br><br>
        
        <button type="submit">登录</button>
    </form>
</body>
</html>

总结

通过本教程,您学习了如何在Django中使用包含userid字段的CustomUser模型来实现自定义用户认证。通过以下步骤,您完成了:

  • 定义包含额外字段的自定义用户模型。
  • 创建自定义认证后端以使用userid进行用户认证。
  • 配置Django设置以使用自定义认证后端。
  • 开发登录API视图,并使用AJAX请求在前端页面中集成用户认证功能。

这种设置允许您根据特定项目需求定制Django中的认证过程,增强用户登录功能的安全性和易用性。

我正在参与2024腾讯技术创作特训营最新征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
rest_framework自定义认证
rest_framework自定义认证,简单两步即可实现 下面是所有views urls models 的代码 #views.py from django.shortcuts import render from django.http import HttpResponse,JsonResponse from rest_framework.views import APIView from rest_framework.request import Request from rest_framewor
kirin
2020/06/11
3250
第一季 | ModelBackend 自定义用户验证,实现用户名、手机号、邮箱登录
Django REST框架构建Web API。Django网络应用开发的5项基础核心技术包括模型(Model)的设计,URL 的设计与配置,View(视图)的编写,Template(模板)的设计和Form(表单)的使用。
小团子
2020/04/08
1.6K0
Django用户认证系统组与权限(一)
apps.User.utils.mycustombackend.custombackend.CustomBackend
Autooooooo
2020/11/09
7730
【愚公系列】2022年01月 Django商城项目09-注册界面-注册功能实现
文章目录 一、注册业务逻辑 1.使用django自带的用户登录模型配置 2.UsernameMobileModelBackend校验函数源码 3.定义models类 4.登录的业务逻辑 一、注册业务逻辑 1.使用django自带的用户登录模型配置 # 允许自定义用户模型类 AUTH_USER_MODEL = 'users.User' # 修改默认的认证后端 AUTHENTICATION_BACKENDS = [ # 'django.contrib.auth.backends.ModelBacken
愚公搬代码
2022/01/14
3830
【愚公系列】2022年01月 Django商城项目12-登录界面-登录和退出功能实现
登录和退出功能取决与是否有cookie,在页面加载时vue会自动获取cookie数据进行判断用户是否登录,进行相应展示。
愚公搬代码
2022/01/17
4400
【愚公系列】2022年01月 Django商城项目12-登录界面-登录和退出功能实现
自定义认证后台
Django auth 应用默认支持用户名(username)进行登录。但是在实践中,网站可能还需要邮箱、手机号、身份证号等进行登录,这就需要我们自己写一个认证后台,用于验证用户输入的用户信息是否正确,从而对拥有正确凭据的用户进行登录认证。 Django 验证用户合法性的方式 Django 对用户登录的验证工作均在一个被称作认证后台(Authentication Backend)的类中进行。这个类是一个普通的 Python 类,它有一个 authenticate 方法,接收登录用户提供的凭据(如用户名或者邮
追梦人物
2018/04/17
9050
学习猿地 python教程 django教程10 Django中的用户认证
Django带有一个用户认证系统。它处理用户帐户,组,权限和基于cookie的用户会话。本文档的这一部分解释了默认实现如何开箱即用,以及如何[扩展和定制](https://docs.djangoproject.com/en/1.11/topics/auth/customizing/)它以适应您的项目需求。
学习猿地
2020/03/24
1.2K0
使用Django实现微信公众号用户openid登录认证
最近在用Django做一个小项目,需要将微信的用户与网站的用户进行关联,由于是微信的订阅号,没有oauth网页授权的权限,只能退而求其次,在响应中获取用户的openid,来唯一的标识用户。
SingYi
2022/07/13
2.2K0
Python Web 聊天室开发(三):用户认证和登录
在第一篇文章中,我们借助 Django 3 + Channels + Redis 实现了一个WebSocket 连接的 Web 在线聊天室。
州的先生
2021/09/08
2.1K0
Django之用户认证组件
  只要登录过的用户,访问任何视图的时候都可以使用request.user对象,这就是一个user对象,request.user.name就可以拿到用户的名字,request.user.email就可以得到用户的邮箱,还可以拿到用户的其他信息。除此之外,user对象还拥有以下方法:
py3study
2020/01/21
6140
Django 用户认证(Auth)组件
我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销、修改密码等功能,这还真是个麻烦的事情呢。
HammerZe
2022/03/25
9580
Django 用户认证(Auth)组件
Django REST framework+Vue 打造生鲜超市(六) 七、用户登录与手机注册
七、用户登录与手机注册 7.1.drf的token (1)INSTALL_APP中添加 INSTALLED_APPS = ( ... 'rest_framework.authtoken
zhang_derek
2018/04/16
6.1K2
Django REST framework+Vue 打造生鲜超市(六)
		七、用户登录与手机注册
Django + Vue 快速实现前后端分离的用户认证
Web 后端在主流场景下,注定成为了仅仅提供 API 接口和进行一些需要消耗服务器性能和后端计算载体;
州的先生
2021/07/20
5.4K0
Django + Vue 快速实现前后端分离的用户认证
Django 用户认证系统使用总结
本文按默认配置讲解Django认证系统的用法。如果默认的认证无法满足项目,Django提供了对认证系统的扩展与定制。
授客
2020/09/22
1.9K0
Spring Security 自定义用户认证
在 Spring Boot 集成 Spring Security 这篇文章中,我们介绍了如何在 Spring Boot 项目中快速集成 Spring Security,同时也介绍了如何更改系统默认生成的用户名和密码。接下来本文将基于 Spring Boot 集成 Spring Security 这篇文章中所创建的项目,进一步介绍在 Spring Security 中如何实现自定义用户认证。
阿宝哥
2019/11/15
1.4K0
django2.2.6 check_password 验证失败解决办法
python3.6, django 2.2.6 AUTHENTICATION_BACKENDS 里添加自定义认证 CustomBackend(邮箱、手机号等),
KEVINGUO_CN
2020/03/17
9650
Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块
中间件的调用只需要在配置文件中添加,如果不使用某个中间件,只需要在配置文件中将对应的字符串注释掉就可以,这种调用执行某一代码的方式是不是很方便呢?下面我们就利用Django对中间件的调用的思想,将自己的功能也实现和中间件一样的调用方式。
GH
2019/12/16
9200
Django对中间件的调用思想、csrf中间件详细介绍、Django settings源码剖析、Django的Auth模块
django 用户认证(电视业务认证失败怎么办)
一般在公司内部都会使用ldap系统进行用户认证。 安装 pip install django-auth-ldap 主要在settings.py的配置
全栈程序员站长
2022/08/01
8970
Django之auth模块(用户认证)
auth模块简介 auth模块是对登录认证方法的一种封装,之前我们获取用户输入的用户名及密码后需要自己从user表里查询有没有用户名和密码符合的对象, 而有了auth模块之后就可以很轻松的去验证用户的登录信息是否存在于数据库中。 除此之外,auth还对session做了一些封装,方便我们校验用户是否已登录 auth里的方法 如果想使用auth模块的方法,必须要先导入auth模块 from django.contrib import auth django.contrib.auth中提供了许多方法,这里主要介
人生不如戏
2018/04/13
1.7K0
Django之auth模块(用户认证)
Django+Vue开发生鲜电商平台之7.用户登录和注册功能
Github和Gitee代码同步更新: https://github.com/PythonWebProject/Django_Fresh_Ecommerce; https://gitee.com/Python_Web_Project/Django_Fresh_Ecommerce。
cutercorley
2020/07/30
4.5K0
Django+Vue开发生鲜电商平台之7.用户登录和注册功能
推荐阅读
相关推荐
rest_framework自定义认证
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验