From 9802fdd175028c5e75c41358b935dd9c6e29c743 Mon Sep 17 00:00:00 2001 From: dameyer <dameyer@techfak.uni-bielefeld.de> Date: Sun, 2 Oct 2022 23:49:14 +0200 Subject: [PATCH] Add form and template for adding a model. --- app/contributions/forms.py | 75 +++++++++++++++++++ app/contributions/routes.py | 11 ++- .../contributions/contribute.html.j2 | 32 ++++++++ 3 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 app/contributions/forms.py create mode 100644 app/templates/contributions/contribute.html.j2 diff --git a/app/contributions/forms.py b/app/contributions/forms.py new file mode 100644 index 00000000..f00e49c3 --- /dev/null +++ b/app/contributions/forms.py @@ -0,0 +1,75 @@ +from flask_wtf import FlaskForm +from wtforms import ( + BooleanField, + PasswordField, + StringField, + SubmitField, + SelectMultipleField, + ValidationError, FieldList, IntegerField +) +from wtforms.validators import InputRequired, Email, EqualTo, Length, Regexp +from app.models import User + + +class ContributionForm(FlaskForm): + + # The id field will be generated on insert. + # The user_id will be retrieved from the user who is performing this operation. + + # title = db.Column(db.String(64)) + title = StringField( + 'Title', + validators=[InputRequired(), Length(max=64)] + ) + + # description = db.Column(db.String(255)) + description = StringField( + 'Description', + validators=[InputRequired(), Length(max=255)] + ) + + # version = db.Column(db.String(16)) + version = StringField( + 'Version', + validators=[InputRequired(), Length(max=16)] + ) + + # compatible_service_versions = db.Column(ContainerColumn(list, 255)) + compatible_service_versions = SelectMultipleField( + 'Compatible Service Versions', + choices=["asd", "blub", "bla"] + ) + + # publisher = db.Column(db.String(128)) + publisher = StringField( + 'Publisher', + validators=[InputRequired(), Length(max=128)] + ) + + # publisher_url = db.Column(db.String(512)) + publisher_url = StringField( + 'Publisher URL', + validators=[InputRequired(), Length(max=512)] + ) + + # publishing_url = db.Column(db.String(512)) + publishing_url = StringField( + 'Publishing URL', + validators=[InputRequired(), Length(max=512)] + ) + + # publishing_year = db.Column(db.Integer) + publishing_year = IntegerField( + 'Publishing year', + validators=[InputRequired()] + ) + + # shared = db.Column(db.Boolean, default=False) + shared = BooleanField( + 'Shared', + validators=[InputRequired()] + ) + + submit = SubmitField() + + diff --git a/app/contributions/routes.py b/app/contributions/routes.py index 80c6a82d..34d54d41 100644 --- a/app/contributions/routes.py +++ b/app/contributions/routes.py @@ -1,7 +1,9 @@ +from flask import render_template from flask_login import login_required from app.decorators import permission_required from app.models import Permission from . import bp +from .forms import ContributionForm @bp.before_request @@ -11,6 +13,11 @@ def before_request(): pass -@bp.route('') +@bp.route('', methods=['GET', 'POST']) def contributions(): - pass + form = ContributionForm(prefix='contribution-form') + return render_template( + 'contributions/contribute.html.j2', + form=form, + title='Contribution' + ) diff --git a/app/templates/contributions/contribute.html.j2 b/app/templates/contributions/contribute.html.j2 new file mode 100644 index 00000000..6789e1f8 --- /dev/null +++ b/app/templates/contributions/contribute.html.j2 @@ -0,0 +1,32 @@ +{% extends "base.html.j2" %} +{% import "materialize/wtf.html.j2" as wtf %} + + +{% block page_content %} +<div class="container"> + <div class="row"> + <div class="col s12 m8 offset-m2"> + <h1 id="title">{{ title }}</h1> + <p> + In order to add a new model, please fill in the form below. + </p> + + <form method="POST"> + <div class="card-panel"> + {{ form.hidden_tag() }} + {{ wtf.render_field(form.title) }} + {{ wtf.render_field(form.description) }} + {{ wtf.render_field(form.publisher) }} + {{ wtf.render_field(form.publisher_url) }} + {{ wtf.render_field(form.publishing_url) }} + {{ wtf.render_field(form.publishing_year) }} + {{ wtf.render_field(form.shared) }} + {{ wtf.render_field(form.version) }} + {{ wtf.render_field(form.compatible_service_versions) }} + {{ wtf.render_field(form.submit, class_='width-100', material_icon='send') }} + + </div> + </form> + </div> +</div> +{% endblock page_content %} \ No newline at end of file -- GitLab