此代码写入一个名为vip.json的文件。目前,每次我提交表单时,它都会覆盖相同的文件。但是,我想要-每次单击表单中的提交(烧瓶中内置)时,我都希望为每个提交创建新文件。每次提交表单时,类似-vip1.json,vip2.json,vip3.json等。
from flask import Flask, render_template, url_for, flash, redirect, request,
jsonify, json
from forms import RequestForm
@app.route("/home", methods=['POST'])
def home():
form = RequestForm()
employee_id = form.employee_id.data
email = form.email.data
network = form.network.data
app_name = form.app_name.data
vip_name = form.vip_name.data
pool_name = form.pool_name.data
pool_monitor = form.pool_monitor.data
pool_member = form.pool_member.data
load_balance = form.load_balance.data
ssl = form.ssl.data
data={}
data = {
'Employee ID': employee_id,
'Email': email,
'Network': network,
'App Name': app_name,
'VIP Name': vip_name,
'Pool name': pool_name,
'Pool Monitor': pool_monitor,
'Pool Member': pool_member,
'Load Balancing Method': load_balance,
'SSL': ssl
}
if form.validate_on_submit():
with open("C:\\pytest\\vip.json",'w') as j:
json.dump(data, j)
return render_template ('home.html', title='Home', data=data, form=form, employee_id=employee_id, email=email, network=network, app_name=app_name, vip_name=vip_name, pool_name=pool_name, pool_monitor=pool_monitor, pool_member=pool_member, load_balance=load_balance, ssl=ssl)
else:
return render_template('request.html', form=form)
我在网上看了一下,但没有任何有用的信息。最好的方法是什么?
答案 0 :(得分:1)
这可能不是最好的方法,但是如果执行以下操作,则可以附加一个UUID(通用唯一IDentifier):
users.sort(Ordering
.explicit(1, 0, 5)
.onResultOf(User::getStatus)
.thenComparing(User::getUsername));
发生冲突的可能性非常低,但是您始终可以check if the file exists并生成另一个。
如果要序列化,可以通过以下方式实现:
import uuid
if form.validate_on_submit():
filename "vip-"+str(uuid.uuid4())+".json"
with open("C:\\pytest\\"+filename,'w') as j:
json.dump(data, j)
添加到1
中以获取计数(假设目录中仅存在这些文件)< / li>
len(list of files)
过滤出与您的特定模式匹配的文件,然后在最高的位置加1 要使用pickle方法,请转到python文件所在的目录,然后运行一次:
RegEx
这会将import pickle
counter=1;
with open("vip_counter.pickle", "wb") as p:
pickle.dump(p, counter)
存储在运行脚本的文件系统中。确保泡菜文件位于正确的位置
每次退出之前,您都需要以相同的方式更新文件:
vip_counter.pickle
答案 1 :(得分:1)
您可以使用glob
来扫描目录并获取所有json文件的列表,获取具有最新版本的文件,然后将其迭代一个以得到新文件的名称:
import os
import glob
# Use glob to get a list of existing vip files.
dir = "C:/pytest/"
files = glob.glob(os.path.join(dir, "vip*.json")) # Let's say it returns ["C:/pytest/vip1.json", "C:/pytest/vip2.json", "C:/pytest/vip3.json"]
# Grab the latest vip file.
latest_file = sorted(files)[-1]
# Strip the path so it's just the file's name.
file_name = os.path.splitext(os.path.basename(latest_file))[0]
# Extract the number from the file's name.
num = int(file_name.lstrip("vip"))
# Generate your new path.
new_path = os.path.join(dir, "vip{}.json".format(num + 1))
# Output of new_path: C:/pytest/vip4.json
您可能需要进行其他错误检查,例如num
确实是数字还是没有现有文件,则默认将num
更改为1
,但我将其保留为你。