我想使用flask向文本文件(在磁盘上)添加/写入信息(只有python程序可以正常工作,但是当我实现它时,其余的都没有发生)。
view.py
:
@app.route('/add', methods=['GET','POST'])
def add_entry():
if request.method == 'POST':
filename = request.form['file_name']
read_file(filename) #returns a dictionnary list
write_file(filename)
return redirect(url_for('index'))
else :
return render_template("file_add.html",title='Add a file', items=items)
和function.py
:
def write_file(filename):
with open("app/static/DATA/{}".format(filename), "w") as f:
global items
items2 = [{ 'fixed_address': request.form['mac_address'],
'hardware': request.form['ip_address'],
'host': request.form['host_name'],
'comment': request.form['comment']}]
items.append(items2)
f.write(items)
提交时没有任何反应,文件保持不变。我究竟做错了什么?
我看到f.write()
可能不适用于字符串旁边的其他内容,但即使其他解决方案也不起作用,f.write('random_string')
也不会做任何事情。
答案 0 :(得分:0)
1)将 request
obj传递给您的函数,以便在其正文中使用它来检索POST参数。在你的代码中(当你没有将request
obj传递给你的写函数时)你无法获得所需的参数,因为request
不是写函数体中的烧瓶请求对象,只是一个未定义的var。要在函数体中使用flask请求obj,您需要将其作为第二个参数传递:
view.py:
@app.route('/add', methods=['GET','POST'])
def add_entry():
if request.method == 'POST':
filename = request.form['file_name']
read_file(filename) #returns a dictionnary list
write_file(filename, request)
return redirect(url_for('index'))
else :
return render_template("file_add.html",title='Add a file', items=items)
function.py:
def write_file(filename, request):
with open("app/static/DATA/{}".format(filename), "w") as f:
global items
items2 = [{ 'fixed_address': request.form['mac_address'],
'hardware': request.form['ip_address'],
'host': request.form['host_name'],
'comment': request.form['comment']}]
items.append(items2)
f.write(items)
2)始终在with open("app/static/DATA/{}".format(filename), "w") as f:
3)使用 json.dump()
将数据写入文件:
import json
obj = [{"123": "123"}]
with open("<full_path>", "w") as f:
json.dump(obj, f, indent=4)
4)请勿使用filename = request.form['file_name']
- 改为使用filename = request.form.get('file_name')
。