В моих пользовательских учетных записях Django я создал форму регистрации и модель для моей регистрации. Однако, когда я пошел запускать python manage.py makemigrations, я столкнулся с ошибкой: AttributeError: module Django.contrib.auth.views не имеет атрибута 'registration'. Во-вторых, правильно ли я кодирую SignUpForm в forms.py? Я не хотел использовать модель User в моделях, потому что он запрашивал бы имя пользователя, и я не хотел, чтобы мой сайт запрашивал имя пользователя.
Вот мой код:
models.py
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.contrib.auth.models import User
class UserProfile(models.Model):
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)
email = models.EmailField(max_length=150)
birth_date = models.DateField()
password = models.CharField(max_length=150)
@receiver(post_save, sender=User)
def update_user_profile(sender, instance, created, **kwargs):
if created:
UserProfile.objects.create(user=instance)
instance.profile.save()
forms.py
from django.forms import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from useraccounts.models import UserProfile
class SignUpForm(UserCreationForm):
class Meta:
model = User
fields = ('first_name',
'last_name',
'email',
'password1',
'password2', )
views.py
from django.shortcuts import render, redirect
from django.contrib.auth import login, authenticate
from useraccounts.forms import SignUpForm
# Create your views here.
def home(request):
return render(request, 'useraccounts/home.html')
def login(request):
return render(request, 'useraccounts/login.html')
def registration(request):
if request.method == 'POST':
form = SignUpForm(request.POST)
if form.is_valid():
user = form.save()
user.refresh_from_db()
user.profile.birth_date = form.cleaned_data.get('birth_date')
user.save()
raw_password = form.cleaned_data.get('password1')
user = authenticate(password=raw_password)
login(request, user)
return redirect('home')
else:
form = SignUpForm()
return render(request, 'registration.html', {'form': form})
urls.py
from django.conf.urls import url
from . import views
from django.contrib.auth import views as auth_views
urlpatterns = [
url(r'^$', views.home),
url(r'^login/$', auth_views.login, {'template_name': 'useraccounts/login.html'}, name='login'),
url(r'^logout/$', auth_views.logout, {'template_name': 'useraccounts/logout.html'}, name='logout'),
url(r'^registration/$', auth_views.registration, {'template_name': 'useraccounts/registration.html'}, name='registration'),
]