2013-07-27 6 views
-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() 

을 정의 할 때 관리자가 설정

답변

1

, CustomUser.objects.create_user()를 호출합니다.

 CustomUser.objects.create_user(
      email, 
      username, 
      password, 
     ) 

아래와 같이보기에서 관리자를 인스턴스화하는 것은 유효하지 않습니다.

 manager = UserManager() 
     manager.create_user(
      email, 
      username, 
      password, 
     ) 

자세한 내용은 Django docs on Managers을 참조하십시오.

+0

고마워요.하지만 제 제안을 시도 할 때 유형 객체 'UserManager'에 'objects'오류가 없습니다. 또한 실제 코드를 정확하게 표시하도록 코드를 업데이트했습니다 (BildLogUserManager를 UserManager로 대체). – dirtshell

+0

업데이트 된 코드는 여전히 뷰에서 관리자를 인스턴스화합니다 ('manager = UserManager()'). 이러면 안 돼, 그건 무효 야. 이 코드를 계속 사용하면 아무도 당신을 도울 수 없게됩니다. – Alasdair