-1
我想爲django網站做一個簡單的用戶註冊表單。這裏是商品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
所以,我有蜜蜂現在拉我的頭髮一段時間,嘗試各種各樣的東西,看各種教程,我仍然得到同樣的錯誤。我知道它很多,但我認爲關注的是create_user函數。任何幫助將被超讚賞,看到這將最終導致我瘋狂。
感謝
非常感謝,但是當我嘗試你的建議時,我得到一個'類型對象'UserManager'沒有屬性'objects''錯誤。我還更新了代碼以準確顯示真正的代碼(用UserManager替換了BildLogUserManager)。 – dirtshell
您更新的代碼仍然在視圖中實例化一個管理器('manager = UserManager()')。不要這樣做,這是無效的。如果您繼續使用該代碼,沒有人能夠爲您提供幫助。 – Alasdair