如何使用flask以最少的行数写入文件,上载文件并将其存储到数据库中?
我有一个网页,有许多文件的上传形式。 数字超过10个pc,唯一的区别是表格的标题 现在,我用的是烧瓶和金盏花。 数据库模型有不同的类,因为每个表单有不同的处理方式 我想避免重复相同的代码, 但是我不知道如何用最少的行来编写代码 请告诉我如何使用flask以最少的行数写入文件,上载文件并将其存储到数据库中?,flask,Flask,我有一个网页,有许多文件的上传形式。 数字超过10个pc,唯一的区别是表格的标题 现在,我用的是烧瓶和金盏花。 数据库模型有不同的类,因为每个表单有不同的处理方式 我想避免重复相同的代码, 但是我不知道如何用最少的行来编写代码 请告诉我 文件上传标题1 model_table={“MAP”:MapiosMaster,“PAL”:PalcomMaster,“BUN”:BunruiMaster,“NUM”:ProcessMaster} @app.route('/import',methods
文件上传标题1
model_table={“MAP”:MapiosMaster,“PAL”:PalcomMaster,“BUN”:BunruiMaster,“NUM”:ProcessMaster}
@app.route('/import',methods=[“GET”,“POST”])
def数据_导入():
form1=上传表单()
form2=上传表单()
form3=上传表单()
............
form10=上传表单()
如果request.method==“POST”:
如果form1.validate_on_submit():
filename=secure\u文件名(form1.file.data.filename)
form1.file.data.save(os.path.join(app.config['UPLOAD\u FOLDER'],文件名))
如果form2.validate_on_submit():
filename=secure\u文件名(form2.file.data.filename)
form2.file.data.save(os.path.join(app.config['UPLOAD\u FOLDER'],filename))
如果表单3.在提交时验证提交():
filename=secure\u文件名(form3.file.data.filename)
form3.file.data.save(os.path.join(app.config['UPLOAD\u FOLDER'],文件名))
##重复10次
返回重定向(url\u for('data\u import'))
返回渲染模板(
'import.html',form1=form1,form2=form2,formX=formX)
我试着写一些代码,
那就是使用flask的jinja模板和Javascript。
我需要一个索引号,它是html表单和数据库模型之间的绑定关系
在烧瓶侧,渲染JINJA2时使用loop.index0。
另一方面,JS根据MAP的索引生成索引号
JS和FLASK具有可与ID代码关联的字典
{%for i in forms%}
{{forms.csrf_token}
{%endfor%}
变量dict=
{
“标题1”:“id1”,
“标题2”:“id2”,
............
“标题10”:“id10”,
};
Object.keys(dict.map)(函数(键,索引){
document.getElementById('t'+索引).textContent=key;
document.getElementById('f'+索引).action+=“/”+dict[key];
});
模型_表={“id1”:数据库1,“no2”:数据库2,…,“id10”:数据库3}
@app.route('/import/',methods=[“GET”,“POST”])
def数据导入(型号名称):
如果request.method==“POST”:
如果“文件”不在request.files中:
闪存(“无文件部分”)
返回重定向(request.url)
file=request.files['file']
如果file.filename=='':
闪存(名称+”ファイルを選択してください。", "失败的”)
返回重定向(request.url)
如果文件和允许的文件(file.filename):
filename=secure\u文件名(file.filename)
filename=os.path.join(app.config['UPLOAD\u FOLDER'],文件名)
file.save(文件名)
模型=模型表[模型名称]
objects=model.data_导入(文件名)#一些代码导入数据
实例=模型(对象)#创建数据库条目
db.session.bulk\u save\u对象(实例)
db.session.commit()
返回渲染模板(
“import.html”,
表格=范围(10)#表格总数
)
model_table = {"id1":database1,"no2":database2, .......,"id10":database3}
@app.route('/import/<model_name>',methods=["GET", "POST"])
def data_import(model_name):
if request.method == 'POST':
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
file = request.files['file']
if file.filename == '':
flash(name + "ファイルを選択してください。", "failed")
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
filename = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(filename)
model = model_table[model_name]
objects = model.data_import(filename) #some code inport data
instance = Model(objects) #create a database entries
db.session.bulk_save_objects(instance)
db.session.commit()
return render_template(
'import.html',
forms = range(10) #number of the total forms
)