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

带有Django Rest Auth的自定义注册表单-错误: save()采用1个位置参数,但给出了2个

在使用Django Rest Framework (DRF) 和 Django Rest Auth 进行自定义注册表单时,如果你遇到错误信息 save() takes 1 positional argument but 2 were given,这通常是因为你在重写的 save() 方法中没有正确地调用父类的 save() 方法。

基础概念

Django Rest Auth 是一个用于 Django REST framework 的库,它提供了用户认证的功能,包括注册、登录、密码重置等。自定义注册表单允许你根据项目需求定制注册逻辑。

错误原因

这个错误的原因是你重写的 save() 方法没有接受 commit 参数。在 Django 中,Model.save() 方法默认接受两个参数:selfcommit。当你重写这个方法时,需要确保也接受这两个参数,并且正确地调用父类的 save() 方法。

解决方法

以下是一个示例,展示如何正确地重写 save() 方法:

代码语言:txt
复制
from rest_framework import serializers
from rest_auth.registration.serializers import RegisterSerializer
from django.contrib.auth.models import User

class CustomRegisterSerializer(RegisterSerializer):
    # 添加自定义字段
    first_name = serializers.CharField(required=True)
    last_name = serializers.CharField(required=True)

    def get_cleaned_data(self):
        return {
            'username': self.validated_data.get('username', ''),
            'password1': self.validated_data.get('password1', ''),
            'email': self.validated_data.get('email', ''),
            'first_name': self.validated_data.get('first_name', ''),
            'last_name': self.validated_data.get('last_name', '')
        }

    def save(self, request):
        user = super().save(request)  # 调用父类的 save 方法
        user.first_name = self.cleaned_data.get('first_name')
        user.last_name = self.cleaned_data.get('last_name')
        user.save()
        return user

应用场景

自定义注册表单在以下场景中非常有用:

  1. 多字段注册:除了标准的用户名、密码和电子邮件外,还需要用户提供其他信息,如姓名、地址等。
  2. 数据验证:在保存用户数据之前进行额外的数据验证。
  3. 集成第三方服务:在用户注册时,可能需要与第三方服务进行集成,如发送欢迎邮件、短信验证等。

参考链接

通过以上方法,你可以解决 save() takes 1 positional argument but 2 were given 错误,并成功实现自定义注册表单。

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

相关·内容

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

/manage.py hello LaceyHello, Lacey  处理有限状态机:django-fsm  django-fsm[16] Django 模型添加了有限状态机支持。...它带有一个可选能过滤垃圾邮件表单类(也有不过滤普通表单类)和一个 ContactFormView 基类,基类方法可以覆盖或自定义修改。而且它还能引导你完成模板创建,好让表单正常工作。  ...用户注册和认证:django-allauth  django-allauth[19] 是一个 Django 应用,它为用户注册、登录/注销、密码重置,还有第三方用户认证(比如 GitHub 或 Twitter...处理 Django REST 框架用户认证:django-rest-auth  如果 Django 开发中涉及到对外提供 API,你很可能用到了 Django REST Framework[22](DRF...如果你在用 DRF,那么你应该试试 django-rest-auth,它提供了用户注册、登录/注销,密码重置和社交媒体认证端点(是通过添加 django-allauth 支持来实现,这两个包协作得很好

2.9K20

注册

编写注册视图函数(V),并将为视图函数绑定对应 URL。编写注册模板(T),模板中提供一个注册表单用户。...编写用户注册表单 Django 已经内置了一个用户注册表单django.contrib.auth.forms.UserCreationForm,不过这个表单一个小问题是它关联django 内置...model 属性,它值对应auth.User,因此无法用于我们自定义 User 模型。...注意:虽然 model 属性值都被指定为 User,一个是 auth.User,另一个是 users.User。 编写用户注册视图函数 首先来分析一下注册函数逻辑。...= Form() # 渲染模板 # 如果不是 POST 请求,则渲染是一个空表单 # 如果用户通过表单提交数据,但是数据验证不合法,则渲染是一个带有错误信息表单

9.1K60
  • django 1.8 官方文档翻译:13-1-2 使用Django认证系统

    它提供一种分配权限特定用户和用户组方法。 它被Djangoadmin站点使用,欢迎你在你自己代码中使用。...认证视图 Django提供一些视图,你可以用来处理登录、登出和密码管理。它们使用stock auth 表单你也可以传递你自己表单Django没有为认证视图提供默认模板。...所有的认证视图 下面列出了django.contrib.auth提供所有视图。实现细节参见使用视图。...(参见Customizing Authentication),你可以通过authentication_form参数传递一个自定义认证表单登录视图。...如果你使用了自定义用户模型,可能需要为验证系统定义你自己表单。更多信息请见 使用带有自定义用户模型内建验证表单文档。

    4.7K20

    Django REST framework+Vue 打造生鲜超市(六) 七、用户登录与手机注册

    request.user 是一个 Django User 实例. request.auth 是一个 rest_framework.authtoken.models.Token 实例....jwt接口它默认采用是用户名和密码登录验证,如果用手机登录的话,就会验证失败,所以我们需要自定义一个用户验证  自定义用户认证  (1)settings中配置 AUTHENTICATION_BACKENDS...,已post方式提交注册信息,post数据都保存在initial_data里面 #username就是用户注册手机号,验证码按添加时间倒序排序,为了后面验证过期,错误等...import post_save from django.dispatch import receiver from rest_framework.authtoken.models import Token...from django.contrib.auth import get_user_model User = get_user_model() # post_save:接收信号方式 #sender

    6K80

    django写接口(实战篇)

    :视图及模版》 《django入门:Admin管理系统及表单》 《django入门:通用视图类重构视图》 《用django写接口(入门篇)》 《用django写接口(优化篇)》 正文 上一部分我们通过基本类重构了...首先我们需要安装过滤器模块 pip install django-filter 然后我们需要将过滤器模块到 settings.py 中 INSTALLED_APPS 进行注册才可以使用。...类来写 class PostFilter(django_filters.rest_framework.FilterSet): # 定义进行过滤参数,CharFilter 是过滤参数类型,过滤器参数类型还有很多...post_save from django.dispatch import receiver from rest_framework.authtoken.models import Token @receiver...(post_save, sender=settings.AUTH_USER_MODEL) def create_auth_token(sender, instance=None, created=False

    2.1K20

    (项目)生鲜超市(六)

    七、用户登录与手机注册 1、drftoken   在INSTALLED_APPS中注册: 1 INSTALLED_APPS = ( 2 'rest_framework.authtoken' 3...jwt接口默认采用是用户名和密码登录验证,如果用手机登录的话,就会验证失败,所以我们需要自定义一个用户验证,在users/view.py中编写: 1 from django.shortcuts import...render 2 from django.contrib.auth.backends import ModelBackend 3 from django.contrib.auth import get_user_model...,post方式提交注册信息,post数据都保存在initial_data里面 18 # username就是用户注册手机号,验证码按添加时间倒序排序,为了后面验证过期,错误等 19...post_save 3 from django.contrib.auth import get_user_model 4 5 6 User = get_user_model() 7

    1.8K20

    Django+Vue开发生鲜电商平台之7.用户登录和注册功能

    一、DRFtoken基本使用 1.DRFtoken登录原理 基于DRF前后端分离登录与单独使用Django登录原理不同,不再需要CSRF验证,DRF提供了许多开箱即用身份验证方案,并且还允许实现自定义方案...token不采用全局设置,而在View中单独设置,settings.py如下: # DRF配置 REST_FRAMEWORK = { 'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend...中定义自定义验证类如下: from django.db.models import Q from django.contrib.auth.backends import ModelBackend from...在apps/users下创建signals.py如下: from django.db.models.signals import post_save from django.contrib.auth import...error.code[0]:''; }); }, 因为一般在注册成功之后会有两种情况: 一种是注册成功后直接自动登录并跳转到指定页,这里采用就是这种方式; 另一种是注册后不自动登录,但是跳转到登录页或其他页面

    4.4K20

    python教程

    Django提供表单(Form)类和模型表单(ModelForm)类相同方式,REST 框架包括了实例化(Serializer)类和模型实例化(ModelSerializer)类。...我们现在在哪 到目前为止,我们做都很好,我们已经获得一个序列化API,这和Django表单API非常相似,并且我们写好了一些常用Django视图。...相似地,虽然我们可以在响应对象中带数据,允许REST框架渲染响应成正确内容类型。...使用@detail_route装饰器自定义动作会响应GET请求。如果我们让动作响应POST请求,我们可以使用methods参数自定义动作URL在默认情况下是依赖于方法本身。...我们已经经历了设计过程每一步,看到了如果我们只是使用常规Django视图自定义任何东西。

    5.1K10

    Django | allauth】useprofile 用户模型扩展

    有两种方法实现 1)自定义表单类 (这里需求是需要附加输入,建议使用这种方法) 注意!!!...: 自定义表单 在配置好之后,是直接引入到allauth.account,forms,这个时候是不能使用 重写继承方法!,不然引入父类操作会陷入调用循环!...图片 原理: allauth应用 根据setting中 account_signup_form_class值(路由)引入该表单类,将该表单方法 siginup 替换掉原生注册表单# 自定义表单...' 2)重写表单( 继承表单类) 图片 不需要和自定义一样引入表单,直接定向到该表单(所以不会出现引用循环) # 继承(继承用法,保证其 重写注册表单,重联系二者 class CustomSignupForm...: 我们在登录用户之后,此时系统是记录我们用户信息,而此时如果我们更改路径到admin中,输入我们管理员账号会报 提供了两个参数信息,这是因为管理员用户信息和当前用户信息冲突了,需要signout

    1.1K10

    Django | allauth】useprofile 用户模型扩展

    创建扩展模型(添加字段)from django.contrib.auth.models import Userfrom django.db import models# Create your models...1)自定义表单类 (这里需求是需要附加输入,建议使用这种方法)注意!!!...: 自定义表单 在配置好之后,是直接引入到allauth.account,forms,这个时候是不能使用 重写继承方法!,不然引入父类操作会陷入调用循环!...图片原理: allauth应用 根据setting中 account_signup_form_class值(路由)引入该表单类,将该表单方法 siginup 替换掉原生注册表单# 自定义表单class...2)重写表单( 继承表单类)不需要和自定义一样引入表单,直接定向到该表单(所以不会出现引用循环)# 继承(继承用法,保证其 重写注册表单,重联系二者class CustomSignupForm(SignupForm

    19710

    Django开发常用30个软件包

    Python social auth 一款社交账号认证/注册机制,支持Django、Flask、Webpy等在内多个开发框架,提供了约50多个服务商授权认证支持,如Google、Twitter、新浪微博等站点.../ 点评:增强 Django 内置 django.contrib.auth 模块,提供登录、注册、邮件验证、找回密码等一切用户验证相关功能。...一旦用户注册成功,它还可以提供从无需认证到电子邮件认证多种账户验证策略。同时,它也支持多种社交账户和电子邮件账户。它还支持插拔式注册表单,可让用户在注册时回答一些附加问题。.../en/latest/ 22.django-crispy-forms 简介:大大增强 Django 内置表单功能,Django 内置表单生成原生 HTML 表单代码还可以,为其设置样式是一个麻烦事情...对验证性要求不高需求,例如注册表单防止机器人自动注册等使用起来非常方便。

    3.4K20

    django-rest-framework框架学习

    现在新一代web应用都开始采用前后端分离方式来进行,淘汰了以前服务器端渲染方式。...在django中很著名一个框架是django-rest-framework,帮我们减少了很多工作量,尤其在序列化与反序列化成我们需要格式帮了我们省了很多事 在这里就记录一下个人学习过程 django-rest-framework...很多时候逻辑需要自己处理,必须按照自己逻辑去复写父类属性 在get方法中self.request.GET.get(‘test’, None)是取出get方法传递参数 lookup_field...# coding=utf-8 import re from rest_framework import serializers from django.contrib.auth.models import...django1.9 djangorestframework3.6.2中测试成功 上述文字皆为个人看法,如有错误或建议请及时联系我

    1.3K10

    基于django视频点播网站开发-step3-注册登录功能

    用户注册登录是一个网站基本功能,django对这部分进行了很好封装,我们只需要在django基础上做些简单修改就可以达到我们想要效果。...在本讲中,我们会用到user中用户授权方面的一些函数,还会对djangouser进行扩展,以及djangoform验证。 效果展示 注册页面 [1685c09137831125?...我们先来写注册函数,写注册,当然得有注册表单了,幸运是,在django中,可以用代码来生成表单。...我们只需在users下新建forms.py文件,然后写入注册表单代码。...而且django是自带验证,只需要我们配置好error_messages字典,当form验证时候,就会显示我们自定义错误信息。 有了注册表单后,就可以在前端模板和视图函数中使用它。

    1.4K30
    领券