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')
Также я не уверен, какое название использовать для этого моего вопроса, поэтому я открыт для предложений.