【发布时间】:2020-06-02 07:34:18
【问题描述】:
我正在制作我的个人项目。 我正在尝试编码注册功能。但不工作。 createuser 做得对。但是当我运行服务器并转到 signup.html 页面时,输入值总是相同的错误。我的代码有什么问题?
模型.py
from django.contrib.auth.models import(BaseUserManager, AbstractBaseUser, PermissionsMixin)
from django.db import models
from django.contrib.auth.models import AbstractBaseUser
from django.utils.translation import ugettext_lazy as _
class UserManager(BaseUserManager):
use_in_migrations = True
def create_user(self, username, userid, company, companycode, password=None):
if not username:
raise ValueError(_('Users must have an name!'))
user = self.User(
username=username,
userid = userid,
company= company,
companycode = companycode,
)
user.set_password(password)
user.save()
return user
def create_superuser(self, username, userid, company, companycode, password):
user = self.create_user(
username=username,
userid = userid,
company = company,
companycode = companycode,
password=password,
)
user.is_active = True
user.is_superuser = True
user.save()
return user
class User(AbstractBaseUser, PermissionsMixin):
username = models.CharField(max_length=10, unique=True, verbose_name="이름")
userid = models.CharField(max_length=100, unique=True, verbose_name="아이디")
company = models.CharField(max_length=10, verbose_name="회사")
companycode = models.CharField(max_length=100, verbose_name="회사코드")
created_date = models.DateTimeField(auto_now_add=True, verbose_name="생성날짜")
is_admin = models.BooleanField(default=False)
is_active = models.BooleanField(default=True)
class Meta:
db_table = 'user'
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['userid', 'company', 'companycode']
def __str__(self):
return self.username
def get_full_name(self):
return self.username
def get_short_name(self):
return self.username
@property
def is_staff(self):
"Is the user a member of staff?"
# Simplest possible answer: All superusers are staff
return self.is_superuser
get_full_name.short_description = _('Full name')
views.py
from django.shortcuts import render
from django.http.response import HttpResponseRedirect
from django.urls.base import reverse
from django.contrib.auth.models import User, UserManager
from django.http import HttpResponse
from django.shortcuts import render
from .models import UserManager
def signup(request):
if request.method == 'GET':
return render(request, 'useraccount/signup.html')
def signup_sign(request):
if request.method == 'POST':
username = request.POST['name']
userid = request.POST['id']
company = request.POST['company']
code = request.POST['code']
account = UserManager.create_user(
username=username,
userid = userid,
company = company,
companycode = code,
)
account.save()
return render(request, 'useraccount/success.html')
signup.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form name="test" action="/signup_sign/" method="post"> {% csrf_token %}
NAME : <input type="text" name="name" > </br>
ID : <input type="text" name="id" > </br>
COMPANY: <input type="text" name="company"> </br>
CODE: <input type="password" name="code"> </br>
<input type="submit" value="send">
</form>
</body>
</html>
基本上基本用户需要电子邮件、姓名、姓氏、名字等。 但我只想输入姓名、身份证、公司名称、公司代码。 所以我使用 AbstractBaseUser 创建了新模型。
但总是出现此错误。 错误。
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/signup_sign/
Django Version: 3.0.6
Python Version: 3.7.7
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'useraccount']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.7/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/Users/junbeomkwak/Desktop/fido_project/useraccount/views.py", line 25, in signup_sign
companycode = code,
Exception Type: TypeError at /signup_sign/
Exception Value: create_user() missing 1 required positional argument: 'self'
【问题讨论】:
标签: python django django-models