iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Django 中怎么自定义用户模块
  • 765
分享到

Django 中怎么自定义用户模块

2023-06-02 12:06:11 765人浏览 薄情痞子
摘要

这篇文章将为大家详细讲解有关Django 中怎么自定义用户模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、概述DjanGo中自带的User Model使用起来是比较方便的,但是通常我们

这篇文章将为大家详细讲解有关Django 中怎么自定义用户模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

1、概述

DjanGo中自带的User Model使用起来是比较方便的,但是通常我们的需求使用原生的User Model并不合适,或者少了一些必要的属性,或者多了些不必要的属性,这时就需要使用我们自己的User Model,自定义用户模块。
参考:Django官方文档 “Customizing authentication in Django” 部分,文档最后有完整的例子。
虽然自定义了用户模块,但是仍然可以使用Django原有的用户认证机制。
主要包含三个步骤
1. 定义自己的用户模块,包含用户类及用户Manager 类继承自Django中的AbstractBaseUser、BaseUserManager
2. 将自己定义的用户模块注册到Django的admin,即将自己的模块注册到Django的后台管理系统
3. 在settings.py中设置AUTH_USER_MODEL=“自定义用户模块类”

2、操作步骤

2.1 定义自己的用户模块

在自己的用户认证app的model.py中定义两个类,用户类和用户Manager类。
用户类:名字自定义,该例中名字为SysUser,该类继承自AbstractBaseUser,为了使用Django permission 框架,需再继承 PermissionsMixin。该类主要定义了用户的属性。
用户Manager类:名字自定义,该例中名字为SysUserManager,该类继承BaseUserManager,主要重定义create_user、create_superuser这两个函数。

点击(此处)折叠或打开

  1. from django.db import models

  2. from django.contrib.auth.models import (BaseUserManager, AbstractBaseUser)

  3. # Create your models here.

  4. class SysUserManager(BaseUserManager):

  5.     def create_user(self, username, passWord=None):

  6.         """

  7.         Creates and saves a User with the username

  8.         """

  9.         user = self.model(

  10.             username=username,

  11.         )

  12.         user.set_password(password)

  13.         user.save(using=self._db)

  14.         return user

  15.     def create_superuser(self, username, password):

  16.         """

  17.         Creates and saves a superuser

  18.         """

  19.         user = self.create_user(username,password)

  20.         user.is_admin = True

  21.         user.save(using=self._db)

  22.         return user

  23. class SysUser(AbstractBaseUser, PermissionsMixin):

  24.     username = models.CharField(max_length=20, unique=True,)

  25.     full_name = models.CharField(max_length=20,default="姓名")

  26.     user_group = models.CharField(max_length=10,default="NULL")

  27.     is_active = models.BooleanField(default=True)

  28.     is_admin = models.BooleanField(default=False)

  29.     objects = SysUserManager()

  30.     USERNAME_FIELD = 'username'

  31.     #REQUIRED_FIELDS = ['full_name']

  32.     def __str__(self):

  33.         return self.username

  34.     def has_perm(self, perm, obj=None):

  35.         "Does the user have a specific permission?"

  36.         # Simplest possible answer: Yes, always

  37.         return True

  38.     def has_module_perms(self, app_label):

  39.         "Does the user have permissions to view the app `app_label`?"

  40.         # Simplest possible answer: Yes, always

  41.         return True

  42.     @property

  43.     def is_staff(self):

  44.         "Is the user a member of staff?"

  45.         # Simplest possible answer: All admins are staff

  46.         return self.is_admin

2.2 注册到Django Admin

在用户认证app的admin.py中必须定义的两个类,UserCreationFORM和UserChangeForm,其他可以自定义的类参考Django官方文档。

点击(此处)折叠或打开

  1. from django.contrib import admin

  2. from django import forms

  3. from django.contrib.auth.models import Group

  4. from django.contrib.auth.admin import UserAdmin as BaseUserAdmin

  5. from django.contrib.auth.forms import ReadOnlyPasswordHashField

  6. from myauth.models import SysUser

  7. # ReGISter your models here.

  8. class UserCreationForm(forms.ModelForm):

  9.     """A form for creating new users. Includes all the required

  10.        fields, plus a repeated password."""

  11.     password1 = forms.CharField(label='Password', widget=forms.PasswordInput)

  12.     password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)

  13.     class Meta:

  14.         model = SysUser

  15.         fields = ('username', 'full_name', 'user_group','is_active','is_admin')

  16.     def clean_password2(self):

  17.         # Check that the two password entries match

  18.         password1 = self.cleaned_data.get("password1")

  19.         password2 = self.cleaned_data.get("password2")

  20.         if password1 and password2 and password1 != password2:

  21.             raise forms.ValidationError("Passwords don't match")

  22.         return password2

  23.     def save(self, commit=True):

  24.         # Save the provided password in hashed format

  25.         user = super().save(commit=False)

  26.         user.set_password(self.cleaned_data["password1"])

  27.         if commit:

  28.             user.save()

  29.         return user

  30. class UserChangeForm(forms.ModelForm):

  31.     """A form for updating users. Includes all the fields on

  32.     the user, but replaces the password field with admin's

  33.     password hash display field.

  34.     """

  35.     #password = ReadOnlyPasswordHashField()

  36.     class Meta:

  37.         model = SysUser

  38.         fields = ('username', 'password', 'full_name', 'user_group','is_active','is_admin')

  39. class SysUserAdmin(BaseUserAdmin):

  40.     # The forms to add and change user instances

  41.     form = UserChangeForm

  42.     add_form = UserCreationForm

  43.     # The fields to be used in displaying the User model.

  44.     # These override the definitions on the base UserAdmin

  45.     # that reference specific fields on auth.User.

  46.     list_display = ('username', 'full_name', 'user_group', 'is_active', 'is_admin')

  47.     list_filter = ('is_admin',)

  48.     fieldsets = (

  49.         (None, {'fields': ('username','full_name','user_group','is_active')}),

  50.         ('Permissions', {'fields': ( 'is_admin',)}),

  51.     )

  52.     # add_fieldsets is not a standard ModelAdmin attribute. UserAdmin

  53.     # overrides get_fieldsets to use this attribute when creating a user.

  54.     add_fieldsets = (

  55.         (None, {

  56.             'classes': ('wide',),

  57.             'fields': ('username', 'password1', 'password2',)}

  58.          ),

  59.     )

  60.     search_fields = ('username',)

  61.     ordering = ('username',)

  62.     filter_horizontal = ()

  63.     # Now register the new UserAdmin...

  64. admin.site.register(SysUser, SysUserAdmin)

  65. # ... and, since we're not using Django's built-in permissions,

  66. # unregister the Group model from admin.

  67. admin.site.unregister(Group)

2.3 修改AUTH_USER_MODEL

修改项目settings.py 中AUTH_USER_MODEL='myauth.SysUser'

点击(此处)折叠或打开

  1. AUTH_USER_MODEL = 'myauth.SysUser'

关于Django 中怎么自定义用户模块就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: Django 中怎么自定义用户模块

本文链接: https://www.lsjlt.com/news/230042.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Django 中怎么自定义用户模块
    这篇文章将为大家详细讲解有关Django 中怎么自定义用户模块,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、概述Django中自带的User Model使用起来是比较方便的,但是通常我们...
    99+
    2023-06-02
  • 在Django中创建自己的自定义用户模型
    目录1. Django安装2.创建Django应用3.该应用程序的自定义模型4.迁移模型自定义用户模型有什么需求? 创建自己的自定义用户模型至关重要。将来,如果要对模型进行一些更改,...
    99+
    2024-04-02
  • VScode中怎么引用自定义模块
    这篇文章给大家介绍VScode中怎么引用自定义模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1. Python中lib、package和module的关系module:以.py为结尾的文件都是模块。package:...
    99+
    2023-06-20
  • Nodejs中怎么自定义CommonJS模块
    这篇文章主要介绍了Nodejs中怎么自定义CommonJS模块的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Nodejs中怎么自定义CommonJS模块文章都会有所收获,下面我...
    99+
    2024-04-02
  • Python中怎么使用Import自定义模块
    这篇文章给大家介绍Python中怎么使用Import自定义模块,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。具体步骤首先找到当前编辑器(可能会存在多个python解析器)对应的第三方库的安装路径,如果不知道具体的位置,...
    99+
    2023-06-15
  • Django怎么自定义模型字段
    在Django中,可以通过继承models.Field类来自定义模型字段。下面是一个简单的示例,展示如何自定义一个名为CustomC...
    99+
    2024-03-01
    Django
  • python怎么自定义模块并调用
    要自定义一个模块并在Python中调用,可以按照以下步骤进行操作:1. 创建一个新的Python文件,命名为你想要的模块名字,比如`...
    99+
    2023-10-11
    python
  • python--自定义模块
    python模块说明:类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合。而对于一个复杂的功能来,可能需要多个函数才能完成(函数又可以在不同的.py文件中),多个 .py 文件...
    99+
    2023-01-30
    自定义 模块 python
  • python-自定义模块mylog
    在编写程序中添加一大堆的代码就不是那么愉快的事情,好在python有强大的import,完全可以先配置好一个mylog.py,以后需要使用时直接导入mylog.py模块即可编写mylog.py,代码如下#!/usr/bin/env ...
    99+
    2023-01-30
    自定义 模块 python
  • django怎么自定义admin
    要自定义Django的admin界面,可以按照以下步骤进行:1. 创建一个继承自`django.contrib.admin.Mode...
    99+
    2023-10-08
    django
  • Django自定义权限及用户分组
    登录、注销和登录限制: 登录 在使用authenticate进行验证后,如果验证通过了。那么会返回一个user对象,拿到user对象后,可以使用django.contrib.auth...
    99+
    2024-04-02
  • Django rest framework如何自定义用户表
    目录说明1. Django项目和应用创建2. 自定义User表3. 序列化和路由3. DRF配置4. 同步数据库5. 测试6. 命令行注册用户说明 Django 默认的用户表 aut...
    99+
    2024-04-02
  • 在VScode中引用自定义模块问题
    1. Python中lib、package和module的关系 module:以.py为结尾的文件都是模块。 package:就是一个带__init__.py的文件夹**(必须有!!...
    99+
    2024-04-02
  • 自定义python模块路径
    自定义python模块路径: 方法一: $ mkdir ~/.pip$ mkdir ~/.python$ vi ~/.pip/pip.conf[install]install-option=--prefix=~/.python:wq$ pi...
    99+
    2023-01-31
    自定义 路径 模块
  • python导入自定义模块
    >>> import sys >>> print sys.path ['', '/usr/lib64/python26.zip', '/usr/lib64/python2.6', '/usr/lib64/...
    99+
    2023-01-31
    自定义 模块 python
  • node.js中的模块化标准CommonJS与自定义模块
    一、 什么是 CommonJs? JavaScript 是一个强大面向对象语言,它有很多快速高效的解释器。 然而, JavaScript标准定义的 API 是为了构建基于浏览器的应用...
    99+
    2024-04-02
  • Django rest framework自定义用户表的方法
    这篇文章主要介绍了Django rest framework自定义用户表的方法,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。说明Django 默认的用户表 auth_user...
    99+
    2023-06-15
  • SAP WF模块怎么定义
    本篇内容介绍了“SAP WF模块怎么定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!SAP 业务工作流是SAP R/3 ...
    99+
    2023-06-05
  • Django中auth模块用户认证的使用
    目录auth模块是什么auth模块常用方法authenticate()login(HttpRequest, user)logout(request)is_authenticated(...
    99+
    2023-03-20
    Django auth模块用户认证 Django auth模块
  • django怎么自定义工作流
    在Django中自定义工作流可以通过以下步骤实现: 定义模型:首先定义一个包含工作流状态的模型。例如,可以创建一个名为`MyMod...
    99+
    2023-10-26
    django
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作