-1
장고 사이트에 대한 간단한 사용자 등록 양식을 작성하려고합니다. 여기에 제품Django 사용자 정의 사용자 인증 없음 유형 오류
models.py
from django.db import models
from django import forms
from django.conf import settings
from taggit.managers import TaggableManager
from django.contrib.auth.models import BaseUserManager, AbstractBaseUser
class UserManager(BaseUserManager):
def create_user(self, email, username_input, password=None):
if not email:
raise ValueError('Users must have an email address')
user = self.model(
email=self.normalize_email(email),
username=username_input,
)
user.set_password(password)
user.save(using=self._db)
return user
def create_superuser(self, email, username, password):
user = self.create_user(email,
password=password,
username=username,
)
user.is_admin = True
user.save(using=self._db)
return user
class CustomUser(AbstractBaseUser):
# Last login, is active, and password are included automatically
username = models.CharField(max_length=30, blank=False, unique=True,)
email = models.EmailField(max_length=150, blank=False)
join_date = models.DateTimeField(auto_now_add=True)
objects = UserManager()
USERNAME_FIELD = 'username'
REQUIRED_FIELDS = ['email']
class UserForm(forms.Form):
email = forms.EmailField(max_length=150, required=True)
username = forms.CharField(max_length=30, required=True)
password1 = forms.CharField(label='Password', widget=forms.PasswordInput(), max_length=30, required=True)
password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput(), max_length=30, required=True)
views.py
from django.http import HttpResponse
from django.template import RequestContext, loader
from django.shortcuts import render
from myapp.models import *
def signup(request):
if request.method == 'POST': # If the form has been submitted...
if not request.POST['password1'] == request.POST['password2']:
return HttpResponse("HOLY JESUS BATMAN YOUR PASSWORDS DONT MATCH!")
form = UserForm(request.POST) # A form bound to the POST data
if form.is_valid(): # All validation rules pass
password = request.POST['password1']
username = request.POST['username']
email = request.POST['email']
manager = UserManager()
manager.create_user(
email,
username,
password,
)
return HttpResponse('Huzzah! Success!')
else:
form = UserForm() # An unbound form
return render(request, 'signup.html', {
'form': form,
})
추적 그래서
Environment:
Request Method: POST
Request URL: http://10.0.1.25:8000/signup/
Django Version: 1.5.1
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'taggit',
'bild',
'bildloguser')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Traceback:
File "/home/bildlog/virtenv/local/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
115. response = callback(request, *callback_args, **callback_kwargs)
File "/home/user/myapp/myapp/views.py" in signup
19. password,
File "/home/user/myapp/myapp/models.py" in create_user
13. username=username_input,
Exception Type: TypeError at /signup/
Exception Value: 'NoneType' object is not callable
, 나는 벌을 n 잠시 동안 내 머리카락을 꺼내서, 모든 종류의 튜토리얼을보고 모든 종류의 것을 시도해 보았습니다. 여전히 같은 오류가 발생합니다. 나는 그 많은 부분을 알고 있지만, 생각하기에 초점을 맞춰야 할 것은 create_user 함수이다. 어떤 도움이라도 결국은 나를 정신 이상자로 몰아 넣을 것이므로 SUPER로 평가 받게 될 것입니다.
감사
당신이보기에 그런 클래스class CustomUser(AbstractBaseUser):
...
objects = UserManager()
을 정의 할 때 관리자가 설정
고마워요.하지만 제 제안을 시도 할 때 유형 객체 'UserManager'에 'objects'오류가 없습니다. 또한 실제 코드를 정확하게 표시하도록 코드를 업데이트했습니다 (BildLogUserManager를 UserManager로 대체). – dirtshell
업데이트 된 코드는 여전히 뷰에서 관리자를 인스턴스화합니다 ('manager = UserManager()'). 이러면 안 돼, 그건 무효 야. 이 코드를 계속 사용하면 아무도 당신을 도울 수 없게됩니다. – Alasdair