#html #django #django-views
#HTML #django #django-представления
Вопрос:
Я реализовал регистрацию / вход на основе представлений на основе классов. Хотя вход в систему работает нормально, регистрация не выполняется. Проблема в том, что после попытки зарегистрировать пользователя, а метод POST равен 200, пользователь не создается в базе данных. Кстати, я думаю, что проблема в интерфейсе, потому что, когда я использую простой HTML-файл, {{ form.as_p }}
он работает, когда я использую шаблон из Интернета, он не работает. Пожалуйста, помогите мне определить причину:
views.py файл
from django.shortcuts import render
from django.views import generic
from django.contrib.auth.forms import UserCreationForm
from django.urls import reverse_lazy
class UserResisterView(generic.CreateView):
form_class = UserCreationForm
template_name = 'registration/register.html'
success_url = reverse_lazy('login')
success_message = "Your profile was created successfully"
authapp1/urls.py файл
from django.urls import path
from .views import UserResisterView
urlpatterns = [
path('register/', UserResisterView.as_view(), name='register'),
]
auth/urls.py файл
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('pages.urls')),
# Django authentication system with package URLs
path('authapp1/', include('django.contrib.auth.urls')),
path('authapp1/', include('authapp1.urls')),
шаблон html
<!-- Register -->
<section class="our-log-reg bgc-fa">
<div class="container">
<div class="row">
<div class="col-sm-12 col-lg-6 offset-lg-3">
<div class="sign_up_form inner_page">
<div class="heading">
<h3 class="text-center">Register to start learning</h3>
<p class="text-center">Have an account? <a class="text-thm" href="{% url 'login' %}">Login</a></p>
</div>
<div class="details">
<form action="{% url 'register' %}" form method="POST">
{% csrf_token %}
<div class="form-group">
<input type="username" class="form-control" id="exampleInputName2" placeholder="Username" name="username">
</div>
<div class="form-group">
<input type="password" class="form-control" id="exampleInputPassword4" placeholder="Password" name="password1">
</div>
<div class="form-group">
<input type="password" class="form-control" id="exampleInputPassword5" placeholder="Confirm Password" name="password2">
</div>
<div class="form-group custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="exampleCheck3">
<label class="custom-control-label" for="exampleCheck3">Want to become an instructor?</label>
</div>
{{ form.non_field_errors }}
<button type="submit" class="btn btn-log btn-block btn-thm2">Register</button>
<div class="divide">
<span class="lf_divider">Or</span>
<hr>
</div>
<div class="row mt40">
<div class="col-lg">
<button type="submit" class="btn btn-block color-white bgc-fb mb0"><i class="fa fa-facebook float-left mt5"></i> Facebook</button>
</div>
<div class="col-lg">
<button type="submit" class="btn btn2 btn-block color-white bgc-gogle mb0"><i class="fa fa-google float-left mt5"></i> Google</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
Шаблон входа, который отлично работает:
<!-- LogIn -->
<section class="our-log bgc-fa">
<div class="container">
<div class="row">
<div class="col-sm-12 col-lg-6 offset-lg-3">
<div class="login_form inner_page">
<form action="{% url 'login' %}" form method="POST">
{% csrf_token %}
<div class="heading">
<h3 class="text-center">Login to your account</h3>
<p class="text-center">Don't have an account? <a class="text-thm" href="{% url 'register' %}">Sign Up!</a></p>
</div>
{{ form.non_field_errors }}
<div class="form-group">
<input type="username" class="form-control" id="exampleInputEmail3" placeholder="Username" name="username">
</div>
<div class="form-group">
<input type="password" class="form-control" id="exampleInputPassword4" placeholder="Password" name="password">
</div>
<div class="form-group custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="exampleCheck3">
<label class="custom-control-label" for="exampleCheck3">Remember me</label>
<a class="tdu btn-fpswd float-right" href="#">Forgot Password?</a>
</div>
<button type="submit" class="btn btn-log btn-block btn-thm2">Login</button>
<div class="divide">
<span class="lf_divider">Or</span>
<hr>
</div>
<div class="row mt40">
<div class="col-lg">
<button type="submit" class="btn btn-block color-white bgc-fb mb0"><i class="fa fa-facebook float-left mt5"></i> Facebook</button>
</div>
<div class="col-lg">
<button type="submit" class="btn btn2 btn-block color-white bgc-gogle mb0"><i class="fa fa-google float-left mt5"></i> Google</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</section>
Ответ №1:
Попробуйте отобразить форму с помощью:
{{ form.as_p }}
Если это все еще не работает, вставьте тело запроса, которое отправляется вместе с формой, чтобы мы могли его проверить.
Если это работает, это означает, что ваши входные данные имеют неправильные имена / идентификаторы.
Редактировать: имена полей неверны:
<div class="form-group">
<input type="username" class="form-control" id="exampleInputEmail3" placeholder="Username" name="username">
</div>
<div class="form-group">
<input type="password" class="form-control" id="exampleInputPassword4" placeholder="Password" name="password">
</div>
чтобы стать:
<div class="form-group">
<input type="username" class="form-control" id="exampleInputEmail3" placeholder="Username" name="username">
</div>
<div class="form-group">
<input type="password" class="form-control" id="exampleInputPassword4" placeholder="Password" name="password1">
</div>
<div class="form-group">
<input type="password" class="form-control" id="exampleInputPassword4" placeholder="Password" name="password2">
</div>
Правка 2: добавлены ссылки
UserCreationForm имеет «password1» и «password2» в качестве обязательных полей.
https://docs.djangoproject.com/en/1.8/_modules/django/contrib/auth/forms /
Комментарии:
1. Спасибо! Я попытался отобразить форму как {{ form.as_p }}, и она работает нормально. Вы знаете, как я могу правильно установить эти имена / идентификаторы?
2. Я думаю, вам не хватает поля подтверждения пароля. Вы видите больше полей при отображении формы таким образом?
3. Еще раз спасибо. Я уже тестировал с помощью password1 и password2, но это тоже не работает. Я проверил имена полей, проверив форму {{form.as_p}}, которая работает нормально. Это странно.
4. Сравните тела запросов из 2 разных шаблонов, используя вкладку сеть в ваших инструментах разработки
5. Я предполагаю, что у вас также отсутствует завершающий символ «/» в форме
action
с вашим шаблоном