Изначально у меня была одна длинная форма Flask на одной веб-странице, но теперь я хочу разбить эту форму на более мелкие фрагменты и перебирать эти фрагменты с помощью кнопок нумерации страниц. Я просто немного не понимаю, как к этому подойти.
На данный момент я создал отдельные классы форм и HTML-шаблоны для этих разных «кусков», но не знаю, как связать все это вместе в основном приложении. .py-скрипт. Я собирался использовать динамическую маршрутизацию, но не думаю, что делаю это правильно. Есть предложения?
Класс формы:
from flask_wtf import FlaskForm
from wtforms import StringField, TextField, SubmitField, IntegerField, SelectField, validators
class InputForm1(FlaskForm):
stack_name = StringField('STACK NAME', validators=[validators.required()])
resource_cfn_tmpl_deploy_bucket = SelectField('PIPELINE DEPLOYMENT BUCKET', validators=[validators.required()])
key_pair = SelectField('KEY PAIR', validators=[validators.required()])
start_point = SelectField('START POINT', validators=[validators.required()], choices=[("", "---"), ("", "fastq"), ("", "bam"), ("", "hdof"), ("", "gvcf"), ("", "vcf")])
qc = SelectField('QC', choices=[("", "---"), ("","BAM"), ("","VCF")])
class InputForm2(FlaskForm):
input_uri = StringField('INPUT BUCKET', validators=[validators.required()])
output_uri = StringField('OUTPUT BUCKET', validators=[validators.required()])
ref_uri = SelectField('REFERENCE BUCKET', validators=[validators.required()])
user_assets_uri = StringField('USER ASSETS BUCKET', validators=[validators.required()])
class InputForm3(FlaskForm):
target = StringField('TARGET')
package_name = StringField('PACKAGE NAME', validators=[validators.required()])
license_name = StringField('LICENSE NAME', validators=[validators.required()])
class InputForm4(FlaskForm):
cohort_prefix = StringField('COHORT PREFIX', validators=[validators.required()])
build = SelectField('BUILD', validators=[validators.required()], choices=[("", "---"), ("","GRCh38"), ("","GRCh37")])
ome = SelectField('OME', validators=[validators.required()], choices=[("", "---"), ("", "wgs"), ("", "wes")])
class InputForm5(FlaskForm):
cloudspan_mode = SelectField('CLOUDSPAN MODE', choices=[("", "---"), ("", "validation"), ("", "qc")])
project_id = StringField('PROJECT ID')
zone = StringField('ZONE')
cloud_file = StringField('CLOUD FILE')
submit_final = SubmitField('Execute Pipeline')
pipeline_1.html: (у меня также есть Pipeline_2.....pipeline_5.html с различными входными данными, как определено в приведенной выше форме. класс)
{% extends 'layout.html' %}
{% block body %}
{{ form.hidden_tag() }}
Pipeline Input
{{ form.stack_name.label(class="form-control-label")}}
{{ form.stack_name(class="form-control form-control-lg") }}
{{form.resource_cfn_tmpl_deploy_bucket.label(class="form-control-label") }}
form.resource_cfn_tmpl_deploy_bucket(class="form-control form-control-lg") }}
{{ form.key_pair.label(class="form-control-label") }}
{{ form.key_pair(class="form-control form-control-lg") }}
{{ form.start_point.label(class="form-control-label") }}
{{ form.start_point(class="form-control form-control-lg") }}
{{ form.qc.label(class="form-control-label") }}
{{ form.qc(class="form-control form-control-lg") }}
{{ error }}
{% endblock %}
app.py: (текущая попытка, я знаю, что это неправильно, но здесь я застрял)
# Import the Flask app
from flask import Flask, url_for, render_template, request, flash, redirect
from math import ceil
from datetime import datetime
from user_input import InputForm1, InputForm2, InputForm3, InputForm4, InputForm5
import json
import subprocess
import os
import sys
import boto3
app = Flask('pipeline-ui')
app.config['S3_CLIENT'] = boto3.client('s3')
app.config['EC2_CLIENT'] = boto3.client('ec2')
app.debug = True
@app.route('/', methods=['GET', 'POST'])
def pipeline(page_num):
if request.method == "POST":
if page_num == 1:
form = InputForm1(request.form)
return redirect('/2')
if page_num == 2:
form = InputForm2(request.form)
return redirect('/3')
if page_num == 3:
form = InputForm3(request.form)
return redirect('/4')
if page_num == 4:
form = InputForm4(request.form)
return redirect('/5')
if page_num == 5:
form = InputForm5(request.form)
return redirect('results')
return render_template('pipeline_{}.html'.format(page_num), title='Pipeline Input', form=form)
Подробнее здесь: https://stackoverflow.com/questions/520 ... pagination
Попытка разбить форму Flask на «куски» с нумерацией страниц. ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как лучше всего разбить строку на куски фиксированной длины и работать с ними в Python?
Anonymous » » в форуме Python - 0 Ответы
- 12 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Как разбить код на более мелкие и управляемые куски модулей? [закрыто]
Anonymous » » в форуме Javascript - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-