Django Проблема с формой и выполнением запросов

Я делаю сайт по lms. На нем есть классы. Учителя могут создавать новые классы, а ученики могут добавлять эти классы, вводя свой id и пароль (если у класса есть пароль). Классы имеют пользовательские идентификаторы и пароли, созданные их учителями. Код для учителей работает нормально, поэтому я его опустил. Но есть проблема в части для учеников. Я уже создал класс, который требует пароль. Я ввожу его id и пароль в форму, и когда я отправляю форму, она отображает форму с 'message', которая имеет значение: "Invalid id and/or password.", хотя пароль и id совпадают. В чем здесь проблема?

<p style="color: red;">{{message}}</p>
{% if user.is_teacher %}
    <form action="{% url 'new_class' %}" method="post">
        {% csrf_token %}
        <div class="form-group">
            <input class="form-control" type="text" name="class-name" placeholder="Class Name" maxlength="64" required>
        </div>
        <div class="form-check">
            <input class="form-check-input" type="checkbox" name="class-type" id="class-type">
            <label class="form-check-label" for="class-type">
                Private
            </label>
        </div>
        <div class="form-group">
            <input class="form-control" type="password" name="class-password" id="class-password" placeholder="Password" style="display: none;" maxlength="16">
        </div>
        <input class="btn btn-primary" type="submit" value="Create">
    </form>
{% else %}
    <form action="{% url 'new_class' %}" method="post">
        {% csrf_token %}
        <div class="form-group">
            <input class="form-control" type="text" name="class-id" placeholder="Class ID" maxlength="4" required>
        </div>
        <div class="form-group">
            <p><sub>Leave the password field empty if the class doesn't have a password.</sub></p>
            <input class="form-control" type="password" name="class-password" id="class-password" placeholder="Password" maxlength="16">
        </div>
        <input class="btn btn-primary" type="submit" value="Add">
    </form>
{% endif %}

Вид:

def new_class(request):
    if request.method == 'POST':
        # teacher user
        if request.user.is_teacher:
            # some code...
        # student user
        else:
            class_id = request.POST['class-id']
            # if user entered a password:
            try:
                class_password = request.POST['class-password']
                # if a class with the entered id existed
                try:
                    newclass = Class.objects.get(class_id=class_id)
                    # check if the class requires a password
                    if newclass.class_password is not None:
                        # if it did, compare the passwords
                        if newclass.class_password == class_password:
                            request.user.student_classes.add(newclass)
                            return HttpResponseRedirect(reverse('index'))
                        else:
                            return render(request, 'lms/new-class.html', {
                                'message': 'Invalid id and/or password.'
                            })
                    # if the class didn't have a password, let the user in
                    else:
                        request.user.student_classes.add(newclass)
                        return HttpResponseRedirect(reverse('index'))
                except:
                    return render(request, 'lms/new-class.html', {
                        'message': 'Invalid id and/or password.'
                    })
            # if user didn't enter any password
            except:
                try:
                    # try finding a class with the entered id
                    newclass = Class.objects.get(class_id=class_id)
                    # if the class doesn't require a password, let the user in
                    if newclass.class_password is None:
                        request.user.student_classes.add(newclass)
                        return HttpResponseRedirect(reverse('index'))
                    else:
                        return render(request, 'lms/new-class.html', {
                            'message': 'This class requires a password.'
                        })
                except:
                    return render(request, 'lms/new-class.html', {
                        'message': 'Invalid id and/or password.'
                    })
        return HttpResponseRedirect(reverse('index'))
    else:
        return render(request, 'lms/new-class.html')

Также я не уверен, какое название использовать для этого моего вопроса, поэтому я открыт для предложений.

Вернуться на верх