Я расширил форму регистрации в Django, основанную на UserCreationForm. Он будет публиковать данные, но не будет отправлять их в БД. Что я неправильно понял?
Мой логин, который можно найти в моих файлах views.py, работает просто отлично.
Я добавил проверку формы, чтобы проверить форму, я также проверил, что я могу видеть, что опубликовано. Под вкладкой сети в Chrome Inspector я вижу это под заголовком моей формы:
Form data:
csrfmiddlewaretoken: 3GHtaasjvJ5Qbl3qvDB9loxCdgYdtZ0aRwG0g5n3sjlopGUZlNt1wEOaLNVLdIe7
first_name: dfhdsfh
last_name: dfghfgh
username: dfhg
email: hdghgfh@sdg.dk
password: lolleren123
password2: lolleren123
Мои файлы приведены ниже. Я очистил код, поэтому здесь показан только необходимый код.
urls.py
from django.urls import path, re_path, reverse_lazy
from . import views
from django.contrib.auth import views as auth_views
app_name = 'accounts'
urlpatterns = [
path('login', views.login_view, name='login'),
path('signup', views.signup_view, name='signup'),
path('logout', views.logout_view, name='logout'),
]
forms.py
from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
class RegistrationForm(UserCreationForm):
email = forms.EmailField(required=True)
class Meta:
model = User
fields = (
'username',
'first_name',
'last_name',
'email',
'password1',
'password2'
)
def save(self, commit=True):
user = super(RegistrationForm, self).save(commit=False)
user.first_name = cleaned_data['first_name']
user.last_name = cleaned_data['last_name']
user.email = cleaned_data['email']
if commit:
user.save()
return user
views.py
from django.shortcuts import render, redirect
from django.contrib.auth.forms import UserCreationForm, AuthenticationForm
from django.contrib.auth import login, logout
from accounts.forms import RegistrationForm
from django.contrib import messages
def signup_view(request):
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid():
user = form.save()
messages.success(request, "Your user is created - Thank you for joining us")
login(request, user)
return redirect('lol')
else:
form = RegistrationForm()
return render(request, 'index.html', {'form': form})
def login_view(request):
if request.method == 'POST':
form = AuthenticationForm(data=request.POST)
if form.is_valid():
user = form.get_user()
login(request, user)
messages.success(request, "You've been logged in!")
return redirect('profiles:profile', request.user.username)
else:
form = AuthenticationForm()
return render(request, '/', {'form': form})
index.html
<form action="{% url 'accounts:signup' %}" name="sign_up" method="post" autocomplete="off">
{% csrf_token %}
<div class="top-row">
<div class="field-wrap">
<label>
First Name
</label>
<input type="text" autocomplete="off" name="first_name" required />
</div>
<div class="field-wrap">
<label>
Last Name
</label>
<input type="text" autocomplete="off" name="last_name" required />
</div>
</div>
<div class="top-row">
<div class="field-wrap">
<label>
Username
</label>
<input type="text" autocomplete="off" name="username" required />
</div>
<div class="field-wrap">
<label>
E-mail
</label>
<input type="email" autocomplete="off" name="email" required />
</div>
</div>
<div class="top-row">
<div class="field-wrap">
<label>
Password
</label>
<input type="password" autocomplete="off" name="password" required />
</div>
<div class="field-wrap">
<label>
Repeat
</label>
<input type="password" autocomplete="off" name="password2" required />
</div>
</div>
<button type="submit" class="button button-block">Register</button>
</form>
Я надеюсь быть направленным на верный путь к этой ошибке, поскольку я новичок, и мне трудно понять, где она идет не так.