Невозможно сгенерировать код класса в приложении Flask — форма не отправляется правильноPython

Программы на Python
Ответить
Anonymous
 Невозможно сгенерировать код класса в приложении Flask — форма не отправляется правильно

Сообщение Anonymous »

Я работаю над приложением Flask, в котором сотрудники могут генерировать коды классов. Я настроил форму для отправки кодов классов (включая описание), но не могу сгенерировать код класса. Вот краткое описание проблемы:
Что происходит:
  • Форма не отправляется правильно, когда я пытаюсь создать код класса.
  • Я не вижу сообщений об ошибках, но код класса не сохраняется в базе данных.
  • Я' Проверили базу данных, новых записей не добавляется.
  • Я использую Flask-WTF для обработки форм и Flask-SQLAlchemy для взаимодействия с базой данных.
Код:
Маршрут:

Код: Выделить всё

@main.route('/employee/dashboard', methods=['GET', 'POST'])
@login_required
def employee_dashboard():
if current_user.role != 'employee':
flash('You must be an employee to access this page.', 'danger')
return redirect(url_for('main.dashboard'))

form = EmployeeForm()
class_codes = ClassCode.query.order_by(ClassCode.created_at.desc()).all()

if form.validate_on_submit():
code = form.code.data
description = form.description.data

# Check for duplicates
if ClassCode.query.filter_by(code=code).first():
flash('Class code already exists!', 'danger')
else:
new_code = ClassCode(code=code, description=description)
db.session.add(new_code)
db.session.commit()
flash('Class code generated successfully!', 'success')
return redirect(url_for('main.employee_dashboard'))

return render_template('employee_dashboard.html', form=form, class_codes=class_codes)
Модель кода класса:

Код: Выделить всё

class ClassCode(db.Model):
id = db.Column(db.Integer, primary_key=True)
code = db.Column(db.String(50), unique=True, nullable=False)
description = db.Column(db.String(100), nullable=True)
created_at = db.Column(db.DateTime, default=datetime.utcnow)

def __repr__(self):
return f''
Форма:

Код: Выделить всё

class EmployeeForm(FlaskForm):
code = StringField(
'Class Code',
validators=[DataRequired(), Length(max=20, message="Code must be 20 characters or less.")],
)
description = StringField(
'Description',
validators=[DataRequired(), Length(max=255, message="Description must be 255 characters or less.")],
)
submit = SubmitField('Generate Code')
HTML:

Код: Выделить всё

{% extends 'base.html' %}

{% block content %}

Employee Dashboard



{{ form.hidden_tag() }}  

Class Code:

{{ form.code(class="form-control") }}  



Description:

{{ form.description(class="form-control") }}  




{{ form.submit.label }}





Generated Class Codes
[list]
{% for code in class_codes %}
[*]
{{ code.code }} - {{ code.description }}
{{ code.created_at.strftime('%Y-%m-%d') }}

{% endfor %}
[/list]

{% endblock %}

Вопрос:
  • Почему форма не отправляется корректно?
  • Почему код класса не сохраняется в базе данных?
  • Что я могу упустить или какие дополнительные шаги по отладке я могу предпринять, чтобы устранить эту неполадку?

    Заранее спасибо за помощь!
    Что сделал Пробуете?
    • Проверка формы:

      < li>Я проверил, возвращает ли form.validate_on_submit() True, добавив оператор отладочной печати. Кажется, форма не проходит проверку должным образом, но я не знаю почему.
  • < strong>Токен CSRF:
    • Я подтвердил, что токен CSRF включен в форму, с помощью {{ form.hidden_tag() }} в HTML.
  • Запрос к базе данных:
    • Я проверил наличие повторяющихся кодов классов с помощью ClassCode.query.filter_by(code =код).первый(). Я также распечатал результат, и похоже, что он не обнаруживает дубликатов даже для существующих кодов.
  • Обновления базы данных:
    • Я проверил базу данных, но после отправки формы новые записи ClassCode не добавляются.< /li>
  • Ведение журнала Ошибки:
    • Я включил отладку Flask (

      Код: Выделить всё

      app.debug = True
      ) и поискал ошибки в консоли, но, похоже, все в порядке.
  • Поведение перенаправления:
    • Я ожидал, что форма перенаправит обратно на панель управления (

      Код: Выделить всё

      return redirect(url_for('main.employee_dashboard'))
      ) после успешной генерации кода класса, но страница остается прежней и флэш-сообщения не отображаются.
    < /ol>
    Чего вы ожидали?
    • После заполнения формы и нажатия кнопки «Сгенерировать код» я ожидал, что следующее:

      Данные формы (код класса и описание) пройдет проверку.
    • Новая запись ClassCode будет сохранена в базе данных.
    • Если существует повторяющийся код класса, Я ожидал мгновенного сообщения (

      Код: Выделить всё

      'Class code already exists!'
      ).
    • Если код класса был успешно сохранен, я ожидал увидеть всплывающее сообщение об успехе (

      Код: Выделить всё

      'Class code generated successfully!'
      ) и новый код класса, отображаемый в списке ниже.
    • Страница обновится, и новый код класса будет виден в списке сгенерированных кодов классов.


Подробнее здесь: https://stackoverflow.com/questions/792 ... -correctly
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»