Ich bin ratlos, einen POST zu testen, um eine Kategorie zu der Datenbank hinzuzufügen, wo ich Flask_WTF für Validierung und CSRF-Schutz verwendet habe. Für die CRUD-Operationen pm meine Website. Ich habe Flask, Flask_WTF und Flask-SQLAlchemy verwendet. Es ist mein erstes unabhängiges Projekt, und ich finde mich etwas verloren, wie man die Flask-WTForm validate_on_submit-Funktion testen kann.Einen POST testen, der Flask-WTF verwendet validate_on_submit
Hier sind die Modelle:
class Users(db.Model):
id = db.Column(db.Integer, primary_key=True, unique=True)
name = db.Column(db.String(80), nullable=False)
email = db.Column(db.String(250), unique=True)
class Category(db.Model):
id = db.Column(db.Integer, primary_key=True, unique=True)
name = db.Column(db.String(250), nullable=False, unique=True)
users_id = db.Column(db.Integer, db.ForeignKey('users.id'))
Hier ist die Form:
class CategoryForm(Form):
name = StringField(
'Name', [validators.Length(min=4, max=250, message="name problem")])
Und hier ist der Controller:
@category.route('/category/add', methods=['GET', 'POST'])
@login_required
def addCategory():
""" Add a new category.
Returns: Redirect Home.
"""
# Initiate the form.
form = CategoryForm()
# On POST of a valid form, add the new category.
if form.validate_on_submit():
category = Category(
form.name.data, login_session['users_id'])
db.session.add(category)
db.session.commit()
flash('New Category %s Successfully Created' % category.name)
return redirect(url_for('category.showHome'))
else:
# Render the form to add the category.
return render_template('newCategory.html', form=form)
Wie kann ich einen Test für die if-Anweisung schreiben mit die validate_on_submit Funktion?
Ich hatte unnötig irritiert, wie die WTForm-Klasse funktionierte. Nachdem ich die Quelle von Flask-WTF und WTFrom überprüft hatte, konnte ich klarstellen, dass Flask-WTFs validate_on_submit() einfach Flask-WTFs is_submitted() und WTForm validate() ist. is_submitted() prüft auf die Antwort und die POST- oder PUT-Methode. –
Ich würde mich über die Eingabe von einem erfahrenen Benutzer freuen. Wird die Kategorie in das Formular eingefügt und dann das Formular als Postdaten unnötig? Danke im Voraus. –