You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django1.11+Python3.6.5用户注册表单报错:__init__()参数不匹配

解决Django类视图的__init__() takes 1 positional argument but 2 were given错误

嘿,我一眼就揪出问题所在了——你的URL配置犯了类视图的典型错误!

错误核心原因

看你的URL代码:

url(r'^register/$', views.User_accountFormView, name='register'),

你直接把User_accountFormView这个类传给了url函数,但Django的类视图不能这么用!它需要调用as_view()方法来生成一个能处理请求的视图函数。当请求过来时,Django会尝试直接调用这个类,而不是它的实例,这就导致了参数不匹配——类的__init__不需要额外参数,但Django会自动传入request等参数,所以就触发了这个报错。

快速修复方案

把URL里的代码改成这样,加上as_view()方法调用:

url(r'^register/$', views.User_accountFormView.as_view(), name='register'),

额外避坑提示

除了这个核心错误,还有几个地方能帮你避免后续麻烦:

  1. 检查Address模型:你的User_account模型里有外键关联Address,但没给出这个模型的代码,一定要确保它已经在models.py里正确定义,不然会出现模型找不到的错误。
  2. 密码安全优化:当前表单的密码是明文输入和存储的,风险很高。建议给密码字段添加隐藏输入组件,并且存储时哈希密码:
    • 修改表单代码:
      class User_accountForm(forms.ModelForm):
          # 新增密码输入组件,隐藏明文
          password = forms.CharField(widget=forms.PasswordInput)
          class Meta:
              model = User_account
              fields = ['first_name', 'last_name', 'user_name', 'email', 'password', 'address']
      
    • 补充视图的POST处理逻辑(记得导入哈希工具):
      from django.contrib.auth.hashers import make_password
      
      def post(self, request, *args, **kwargs):
          form = self.form_class(request.POST)
          if form.is_valid():
              user = form.save(commit=False)
              # 对密码进行哈希处理再存储
              user.password = make_password(user.password)
              user.save()
              return redirect('index')  # 注册成功后跳转首页
          return render(request, self.template_name, {'form': form})
      
  3. 命名规范优化:Python类名通常用驼峰命名法,比如UserAccount代替User_account,UserAccountForm代替User_accountForm,这样代码可读性更强。

按照上面的步骤修改后,你的注册功能应该就能正常跑起来了!

内容的提问来源于stack exchange,提问作者Saleh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:45:15