首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Django 3中使用类基视图实现不区分大小写的用户名和电子邮件

在Django 3中,可以使用类基视图来实现不区分大小写的用户名和电子邮件。具体步骤如下:

  1. 首先,在settings.py文件中配置AUTH_USER_MODEL为自定义的用户模型,例如:
代码语言:txt
复制
AUTH_USER_MODEL = 'myapp.CustomUser'

这里的myapp是你的应用名称,CustomUser是你自定义的用户模型。

  1. 创建一个自定义的用户模型CustomUser,继承自AbstractUser,并重写normalize_username方法和email字段,如下所示:
代码语言:txt
复制
from django.contrib.auth.models import AbstractUser
from django.db import models

class CustomUser(AbstractUser):
    email = models.EmailField(unique=True)

    def normalize_username(self, username):
        return username.lower()

这里重写了normalize_username方法,将用户名转换为小写,实现不区分大小写的用户名。

  1. urls.py文件中定义相应的URL路由和视图,使用类基视图CreateViewUpdateView来处理用户注册和更新操作,如下所示:
代码语言:txt
复制
from django.urls import path
from myapp.views import UserCreateView, UserUpdateView

urlpatterns = [
    path('register/', UserCreateView.as_view(), name='register'),
    path('profile/update/', UserUpdateView.as_view(), name='profile_update'),
]

这里的UserCreateViewUserUpdateView是自定义的视图类,分别用于用户注册和更新。

  1. 创建相应的视图类UserCreateViewUserUpdateView,继承自CreateViewUpdateView,并指定模型和表单类,如下所示:
代码语言:txt
复制
from django.contrib.auth.mixins import LoginRequiredMixin
from django.urls import reverse_lazy
from django.views.generic import CreateView, UpdateView
from myapp.models import CustomUser
from myapp.forms import UserForm

class UserCreateView(CreateView):
    model = CustomUser
    form_class = UserForm
    template_name = 'register.html'
    success_url = reverse_lazy('login')

class UserUpdateView(LoginRequiredMixin, UpdateView):
    model = CustomUser
    form_class = UserForm
    template_name = 'profile_update.html'
    success_url = reverse_lazy('profile_update')

这里的UserForm是自定义的表单类,用于用户注册和更新的表单验证。

  1. 最后,创建相应的模板文件register.htmlprofile_update.html,用于用户注册和更新的页面展示。

通过以上步骤,就可以在Django 3中使用类基视图实现不区分大小写的用户名和电子邮件。在用户注册和更新时,系统会自动将用户名转换为小写,并确保电子邮件的唯一性。这样可以提高用户体验,并减少重复注册的问题。

推荐的腾讯云相关产品:腾讯云服务器(CVM)、腾讯云数据库MySQL版、腾讯云对象存储(COS)等。你可以通过访问腾讯云官网(https://cloud.tencent.com/)了解更多相关产品和详细介绍。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【Django】 开发:补充知识

Django提供了Paginator类可以方便的实现分页功能 Paginator类位于django.core.paginator 模块中。...number为页码信息(从1开始) 返回当前number页对应的页信息 如果提供的页码不存在,抛出InvalidPage异常 Paginator异常exception InvalidPage:总的异常基类...利用QQ邮箱发送电子邮件 django.core.mail 子包封装了 电子邮件的自动发送SMTP协议 前其准备: 申请QQ号 用QQ号登陆QQ邮箱并修改设置 用申请到的QQ号和密码登陆到 https...部署要分以下几个步骤进行 在安装机器上安装和配置同版本的环境 django 项目迁移 $ sudo scp 当前项目源代码 远程主机地址和文件夹 sudo scp /home/tarena/django...Web 服务器之间的一种接口,被广泛使用 使用 python manage.py runserver 通常只在开发和测试环境中使用。

6.4K30
  • Django模型model

    前言 根据前几篇文章的分享已经了解djangoWeb开发一般步骤为: 创建虚拟环境 安装django 创建项目 创建应用 在model.py中创建模型类 定义视图 配置url 创建模板 1....定义模型类 在模型中定义属性,会生成数据库表中的字段 django根据属性的类型确定以下信息: 当前选择的数据库支持字段的类型 渲染管理表单时使用的默认html控件 在管理站点最低限度的验证 django...模型类中字段选项 通过字段选项,可以实现对字段的约束 在字段对象时通过关键字参数指定 null:如果为True,Django 将空值以NULL 存储到数据库中,默认值是 False blank:如果为True...说明: init 方法已经在基类models.Model中使用,在自定义模型中无法使用 在模型类中增加一个类方法保存数据到数据库 class BookInfo(models.Model): @classmethod...isnull、isnotnull:是否为null filter(btitle__isnull=False) 在前面加个i表示不区分大小写,如iexact、icontains、istarswith

    15310

    【云+社区年度正文】Django从入门到精通No.3---与数据库交互

    二、与数据库建立连接 前面我们讲过django的模型和关联关系后,我们来试着操纵下数据库,首先我们需要在django中配置数据库,进入settings.py文件中,如下: 1.jpg 这里我们可以设置四种数据库类型...,不指定会有警告信息 配置好了之后,我们需要使用pymysql模块来使数据库连接上,只需在该目录的init.py文件中添加如下代码即可: import pymysql pymysql.install_as_MySQLdb...七、操作数据库 我们可以在cmd窗口中来实现数据库的基本操作,如图: 4.jpg 如果你不习惯在cmd中操作,也可以把代码写在app的views.py文件中,如下: 5.jpg 然后把这个视图函数添加到...首先我们来看看我们编写的数据模型类,如下: from django.db import models from django.utils import timezone # Create your models...='aaa')#包含aaa,且aaa不区分大小写 book.objects.filter(book_name__iexact='aaa')#为aaa,但是不区分大小写 5.book.objects.exclude

    99730

    Python全栈开发之Django基础

    BookInfo.objects.filter(btitle__contains='传') list = BookInfo.objects.filter(btitle__icontains='传') # 不区分大小写...BookInfo.objects.filter(btitle__startswith='神') list = BookInfo.objects.filter(btitle__istartswith='神') # 不区分大小写...BookInfo.objects.filter(btitle__endswitch='侣') list = BookInfo.objects.filter(btitle__iendswitch='侣') # 不区分大小写...,建议要储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息 禁用Session中间件 存储方式 存储在数据库中,如下设置可以写,也可以不写,这是默认存储方式 SESSION_ENGINE...总结:在定义url时,需要为include定义namespace属性,为url定义name属性,使用时,在模板中使用url标签,在视图中使用reverse函数,根据正则表达式动态生成地址,减轻后期维护成本

    3.8K20

    Django3.2边学边记—Adimn站点管理

    准备工作 创建管理员的用户名和密码:  1 python manage.py createsuperuser   根据提示创建用户名 密码 在admin.py中注册模型类 1234567 from django.contrib...ModelAdmin类可以控制不同模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式 上文中展示了TestAdmin类的一种注册方法,还有一种方法,就是使用装饰器注册,...image.png   由action_on_bottom 和action_on_top两属性来控制 默认显示在顶部,默认值分别为:False 和 True,改为只显示在底部: 1234 class...atitle.short_description='标题'   如果是更改模型字段显示的列标题,可以在定义模型字段时,设置verbose_name的值 ,或者封装成方法,再对方法使用上面那个属性,模型字段不能直接使用那个属性...,并返回所有包含这些词的对象,不区分大小写(即 icontains 查找:不区分大小写的包含匹配),其中每个词必须在 search_fields 中至少有一个。

    1.2K00

    Django3.2边学边记—Adimn站点管理

    准备工作 创建管理员的用户名和密码:  1 python manage.py createsuperuser   根据提示创建用户名 密码 在admin.py中注册模型类 1234567 from django.contrib...ModelAdmin类可以控制不同模型在Admin界面中的展示方式,主要包括在列表页的展示方式、添加修改页的展示方式 上文中展示了TestAdmin类的一种注册方法,还有一种方法,就是使用装饰器注册,...  由action_on_bottom 和action_on_top两属性来控制 默认显示在顶部,默认值分别为:False 和 True,改为只显示在底部: 1234 class TestAdmin...atitle.short_description='标题'   如果是更改模型字段显示的列标题,可以在定义模型字段时,设置verbose_name的值 ,或者封装成方法,再对方法使用上面那个属性,模型字段不能直接使用那个属性...,并返回所有包含这些词的对象,不区分大小写(即 icontains 查找:不区分大小写的包含匹配),其中每个词必须在 search_fields 中至少有一个。

    1.3K30

    DRF进阶之DRF视图和常用功能

    DRF视图和常用功能 DRF视图 DRF视图类介绍 在DRF框架中提供了众多的通用视图基类与扩展类,以简化视图的编写。...View:Django默认的视图基类,负责将视图连接到URL,HTTP请求方法的基本调度,之前写类视图一般都用这个。...APIView:DRF提供的所有视图的基类,继承View并扩展,具备了身份认证、权限检查、流量控制等功能。...,删除,查看 ViewSet类 GenericAPIView已经完成了许多功能,但会有一个问题,获取所有用户列表和单个用户需要分别定义两个视图和URL路由,使用ViewSet可以很好解决这个问题,并且实现了路由自动映射...也就是必须每个人区分开,所以就有了用户名来标识,但每次访问页面都要登录,非常麻烦,这就有了会话保持。Cookie+Session就是实现会话保持的技术。

    4.8K10

    简化 Django 开发的八个 Python 包 | Linux 中国

    ◈   notes 输出你项目里所有带 TODO、FIXME 等标记的注释。  Django-extensions 还包括几个有用的抽象基类,在定义模型时,它们能满足常见的模式。...当你需要以下模型时,可以继承这些基类:◈   TimeStampedModel:这个模型的基类包含了   created 字段和   modified 字段,还有一个   save() 方法,在适当的场景下...◈   ActivatorModel:如果你的模型需要像   status、  activate_date 和   deactivate_date 这样的字段,可以使用这个基类。...它带有一个可选的能过滤垃圾邮件的表单类(也有不过滤的普通表单类)和一个 ContactFormView 基类,基类的方法可以覆盖或自定义修改。而且它还能引导你完成模板的创建,好让表单正常工作。  ...)提供了视图、表单和 URL,支持邮件地址作为用户名的认证方式,而且有大量的文档记录。

    3K20

    Django+xadmin打造在线教育平台(三)

    代码 github下载 五、用户注册 主要实现功能 用户输入邮箱、密码和验证码,点注册按钮 如果输入的不正确,提示错误信息 如果正确,发送激活邮件,用户通过邮件激活后才能登陆 即使注册功能,没有激活的用户也不能登陆...,‘register’表明是注册 注册成功跳转到登录界面 5.6.发送激活邮件 在Python中已经内置了一个smtp邮件发送模块,Django在此基础上进行了简单地封装,让我们在Django环境中可以更方便更灵活的发送邮件...如果没有提供,Django将使用该EMAIL_HOST_PASSWORD设置的值 。 connection:用于发送邮件的可选电子邮件后端。如果未指定,将使用默认后端的实例。...html_message:如果html_message被提供,所得到的电子邮件将是一个 多部分/替代电子邮件message作为 文本/无格式内容类型和html_message作为 text / html...#邮箱和用户名都可以登录 # 基础ModelBackend类,因为它有authenticate方法 class CustomBackend(ModelBackend): def authenticate

    4.3K90

    【Django】当大型项目采用Django框架对于QueryDict以及模板的表单在Admin 管理工具的使用

    QueryDict 在HttpRequest对象中,GET和POST属性是django.http的实例。QueryDict类。 QueryDict是一个用户定义的类,类似于字典。...每个视图函数负责返回一个HttpResponse对象,该对象包含生成的响应。 视图层中有两个重要的对象:请求对象和响应对象。 Admin 管理工具 我们可以自定义管理页面以替换默认页面。...我们只想显示姓名和电子邮件部分。...Python,则需要按如下方式进行修改: 通过错误消息Py文件的文件路径,在…site packages django-2.0-py3.6.eggDjango-db-backends-mysql的路径中找到基...返回的数据是QuerySet类型,类似于列表。它包含满足条件的模型类的对象。可以使用索引下标来检索模型类的对象。 Pk=3意味着主键=3,这相当于id=3。

    1.7K20

    37.Django1.11.6文档

    这是因为子类需要一个空间来存储不包含在基类中的字段数据。 但有时,你可能只想更改 model 在 Python 层的行为实现。比如:更改默认的 manager ,或是添加一个新方法。...iexact 不区分大小写的精确匹配 contains 大小写敏感的包含关系测试。...,开始位置匹配 例如: Entry.objects.filter(headline__startswith='Lennon') istartswith 不区分大小写,开始位置匹配 endswith 区分大小写...拆分搜索查询为单词并返回包含每个单词的所有对象,不区分大小写,其中每个单词必须在至少一个search_fields。 ...另外,如果列上有索引,有些数据库可能能够对于此查询使用索引,即使它是LIKE 查询。 = 使用'='运算符不区分大小写的精确匹配。

    24.4K80

    Django开发常用30个软件包

    这个应用支持多种认证体系,比如用户名或电子邮件。一旦用户注册成功,它还可以提供从无需认证到电子邮件认证的多种账户验证的策略。同时,它也支持多种社交账户和电子邮件账户。...如果你对 Django 的视图类很熟悉,你会觉得使用 DRF 构建 REST API 与使用它们很相似,不过 DRF 只针对特定 API 使用场景而设计。.../ 25.django-brace 简介:django 内置的 class based view 很 awesome,但还有一些通用的类视图没有包含在 django 源码中,这个库补充了更多常用的类视图...类视图是 django 的一个很重要也很优雅的特性,使用类视图可以减少视图函数的代码编写量、提高视图函数的代码复用性等。.../index.html 点评:深入学习类视图可以看Django类视图源码分析。

    3.4K20

    用户管理模块之用户登录

    创建IUserService接口和实现类UserServiceImpl 由于在用户管理模块之用户注册已经创建了,所以不用新建了 功能 实现用户登录的业务,传入的参数是用户名和密码 分析 用户登录输入的是用户名和密码...中新建两个异常类 用户名不存在的异常UserNotFoundException,继承Exception,重写父类的构造方法 密码不匹配的异常PasswordNotMatchException,继承Exception...,重写父类的构造方法 实现 IUserService接口中定义 /** * 实现登录的业务 * @param userName 用户名 * @param passWord 密码 * @return...,不可以使用用户名和密码直接查询人数,因为sql是不区分大小写的,但是我们的密码是区分大小写的,比如select * from t_user where username=?...,这个是不可以直接使用的,应该是使用用户名查询返回User对象,然后在比较用户输入的密码和对象中的密码是否相同:password.equals(user.getPassWord()) 在需要修改前端页面的时候

    1.9K30

    【SQL server】玩转SQL server数据库:第三章 关系数据库标准语言SQL(一)模式、表、索引与视图

    基础知识 sqlserver语句区分大小写和单双引号吗?...在 SQL Server 中,标识符(例如表名、列名、数据库名等)默认是不区分大小写的,但是字符串常量是区分大小写的【仅支持英文版双引号("")】。...例如,以下查询是有效的: SELECT column1 FROM TableName WHERE column2 = 'Value'; 在这里,column1、TableName 和 Value 不区分大小写...,但字符串 'Value' 区分大小写。...级联删除语句,把该视图和由它导出的所有视图一起删除 删除基表时,由该基表导出的所有视图定义都必须显式地使用DROP VIEW语句删除 【1】删除视图BT_S和IS_S1 DROP

    30210

    Python:Django搭建博客

    简介 学完 Django2.x 可以搭建一个个人博客练练手 教程 创建项目 通过 pycharm 创建博客项目与虚拟环境 修改相关设置 允许任何域名 在开发和测试的时候可以将这里填为 *,后期部署上线后修改为指定域名即可...Django 安装成功, 访问 Django-admin 界面, 在浏览器中输入 127.0.0.1:8000/admin,看到 Django 管理,需要输入用户名密码,输入用户名密码后可以跳转到 Django...再次进入 admin,选择文章修改就可以看到集成的 markdown 编辑器了 实现视图 首先找到一套你喜欢的模版,将模版下载下来,html 部分放入 templates 中,其他静态文件放入 static...可以写一个简单的视图,然后开着 Django 一边抽取一遍调试 接下来实现首页试图 首先在 urls.py 中配置路由 DjangoBlog/u rls.py ... from blog import...这样当我们重新访问 127.0.0.1:8000 时,我们修改的前端代码就被加载了 接下来我们实现将分类加载,将 index 视图修改为一下代码 blog/views.py ... from .models

    57000

    第 5 篇:用视图集,简化你的代码

    使用视图集的一个更大的好处,就是可以配合 django-rest-framework 提供的路由器(router),自动生成 API 的 URL,不需要我们再手工将 URL 模式和视图函数绑定了。...视图集也有 2 个基类:ViewSet 和 GenericViewSet,前者是最基本的视图集类,后者拓展自前者,拓展了很多 Web 开发中的通用逻辑。...提供 SimpleRouter 和 DefaultRouter 两个路由器类,后者是对前者的拓展,因此通常情况下都使用后者。...第二个参数就是视图集,第三个参数 basename 用于指定视图集生成的视图函数名的前缀。在 django 的 URL 中,一条路由通常由 URL 模式,对应的视图函数和视图函数名组成。...不过,根据 Python 之禅,显式优于隐式,因此即使你设置的 basename 和 django-rest-framework 默认生成的一样,也比不指定要好。

    82010

    jS正则和WEB框架Django的入门

    : 正则表达式 /…/ 用于定义正则表达式 /…/g 表示全局匹配 /…/i 表示不区分大小写 /.....,显示为红色 图标文字 @font-face 在使用的时候一个关键的地方: 在css样式的时候如果想要某个css样式优先级最高,例子如下: .c3{ border-radius...important; } 就可以实现c3的css样式优先级最高,无论在上面还是在下面都会被应用 下面的两个偏向于后台管理 jQueryUI EasyUI  类似的插件有很多,例如想实现一个轮播图的效果...这样就实现了对输入用户和密码的判断 输入的账户和密码不匹配的时候: 如果正确则会跳转到百度 下面是一个完整的例子 views.py中的代码如下: from django.shortcuts import... 运行结果如下: 输入正确的用户名和密码提交

    2.1K60

    【Django | allauth】登录_注册_邮箱验证_密码邮箱重置

    (用户名、电子邮件地址或两者之一) ACCOUNT\_EMAIL\_CONFIRMATION\_EXPIRE\_DAYS (=3):邮件确认邮件的截止日期(天数) ACCOUNT\_EMAIL...SIGNUP\_PASSWORD\_ENTER\_TWICE (=True): 用户注册时是否需要用户输入两遍密码 ACCOUNT\_USERNAME\_BLACKLIST (=[]):用户不能使用的用户名列表...ACCOUNT\_UNIQUE\_EMAIL (=True): 加强电子邮件地址的唯一性 ACCOUNT\_USERNAME\_MIN\_LENGTH (=1):用户名允许的最小长度的整数...SOCIALACCOUNT\_AUTO\_SIGNUP (=True):使用从社会帐户提供者检索的字段(如用户名、邮件)来绕过注册表单 LOGIN\_REDIRECT\_URL (="/"...因为每个开发者对用户所需提供的额外信息需求都不是一样的,所以django-allauth没有提供这个视图和URL。

    3.9K10

    Django模型(数据库)及Django Query常用方法

    使用 Django 提供的 QuerySet API Django提供了丰富的API, 下面演示如何使用它。...name 和 age 等字段中不能有 __(双下划线,因为在Django QuerySet API中有特殊含义(用于关系,包含,不区分大小写,以什么开头或结尾,日期的大于小于,正则等) 也不能有Python...abc") 名称严格等于 "abc" 的人 Person.objects.filter(name__iexact="abc") # 名称为 abc 但是不区分大小写,可以找到 ABC, Abc, aBC...name__contains="abc") # 名称中包含 "abc"的人 Person.objects.filter(name__icontains="abc") #名称中包含 "abc",且abc不区分大小写...Person.objects.filter(name__regex="^abc") # 正则表达式查询 Person.objects.filter(name__iregex="^abc") # 正则表达式不区分大小写

    2.6K40
    领券