Представления на основе классов Django — регистрация

#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 с вашим шаблоном