如何在python中使用Web表单更改多行?

时间:2017-11-29 11:32:44

标签: python flask

我有一个包含以下内容的文本文件:

host host_name {
# comment (optional)
    hardware ethernet 01:22:85:EA:A8:5D;
    fixed-address 192.168.107.210;
}

host another_host_name {
# comment (optional)
    hardware ethernet 01:22:85:EA:A8:5D;
    fixed-address 192.168.107.210;

}

我希望我的程序使用'host'检测行,然后根据我键入的内容修改块的内容。

当我执行以下操作时(例如在烧瓶中使用request.form.get('name')):

#random inputs
host = name2
comment = nothing
hardware = 00:00:00:00:00:00
address = 192.168.101.123

我想:

host host_name {
# comment (optional)
    hardware ethernet 01:22:85:EA:A8:5D;
    fixed-address 192.168.107.210;
}

#after the change
host name2 {
# nothing
    hardware ethernet 00:00:00:00:00:00;
    fixed-address 192.168.101.123;

}

我对正则表达式没有问题,而是为了实现这一点我必须做的程序,所以我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果你开始以你考虑问题的方式开始编写,你可能会有一个完整而彻底的混乱,即使它最初有效也无法改变或维护。

你有几个不同的小任务,你正在考虑它们“作为一件事”。

没有。您正在使用Falsk为您提供简单轻便的Web界面。那没问题。您已经知道如何从中获取文本块。你现在不需要询问有关Flask的任何信息。 Nor tio将任何进一步的代码放在同一个地方,从网络获取数据的代码就是。

相反,只需编写一些简单的Python函数,将您的文本数据作为参数,然后为您更新配置文件。

在此期间,如果您可以选择一个特殊模板并在执行此操作时创建新的配置文件,而不是尝试解析现有文件,并更新所需的值,那么,这是你可以实现的目标。

解析“真实世界”配置文件并进行实时更新并非易事。实际上,它可能非常复杂,以至于大多数Linux发行版在超过10年的时间里都没有尝试过。

然后你还有一个你没有提到的复杂问题:你可能想保留你没有改变文件的任何配置。我建议你保留文件的模板,并填写你的数据,每次运行时创建一个新文件。但是这需要你以其他格式获得所有其他配置数据,这基本上会复制你的问题。

所以,好吧,你用正则表达式“从原始文件中获取数据”的想法可能就好了。但是,仍然将单独与写回文件保持一致。如果所述文件是以块为单位构建的,请不要在“行”中思考。

一个可行的方法是读取文件,将您感兴趣的数据导入Python数据结构(例如,字典列表,每个字典都包含您的host_name,comment,ethernet和ip字段)。并且,在同一个正则表达式的第二个应用中,更改占位符的所有内容,以便可以通过调用.format方法或使用Flask的jinja2模板来填充文件内容。

将上述两个函数分开,甚至可以让您在Web界面上显示所有配置的主机,这样用户就可以单独编辑,而无需手动输入以太网地址。

抱歉,我赢了为您编写所有这些代码。我希望上面的内容可以帮助你思考一个适当的方法。因此,如果您稍后提出其他问题,并尝试使用某些代码,我们可以为您提供进一步的帮助。