我需要编写一个简单 python 应用程序来通过表单收集数据。表单本身只需要
- 几个用于姓名和地址的文本字段,
- 一个日期字段
- 和一个选择框/下拉字段。
应用程序将在本地运行,数据应保存在本地的纯 csv 文件中。无需联网。
我发现有很多不同的方法可以解决这个问题:
- 命令行应用程序,
- 带有 tkinter/qt 的 gui 应用程序,
- 像 flask 或瓶子这样的微框架,
- 像 django 这样的大型框架。
当然肯定有一些方法我还没有找到。主要关注点是简单性,我需要一个指向正确方向的指针:我如何实现这一点,以便即使是没有经验的开发人员以后也可以添加或更改字段?
请您参考如下方法:
我能想到的最简单的形式将它保存为桌面上的 index.html 然后在浏览器中打开它:
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<form id="myfirstform" name='hello'>
<div>
<label for="name">Name:</label>
<input type="text" id="name" name="user_name" />
</div>
<div>
<label for="mail">E-mail:</label>
<input type="email" id="mail" name="user_mail" />
</div>
<div>
<label for="msg">Message:</label>
<textarea id="msg" name="user_message"></textarea>
</div>
<div>
<select id="some_dropdown1" name="some_dropdown">
<option value="" disabled="disabled" selected="selected" >Please select a name</option>
<option value="1">One</option>
<option value="2">Two</option>
</select>
</div>
</form>
<input type='button' value='Submit form' onclick='submitDetailsForm()' />
<script>
function submitDetailsForm() {
var f = $("#myfirstform").serialize();
fetch('http://localhost:8080/?'+ f)
.then(r=> r.json())
.then(j=> {
console.log(j)
})
}
</script>
然后服务器将其保存为server.py并运行python server.py:
from http.server import BaseHTTPRequestHandler, HTTPServer
import urlparse, json
# python2
# from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
class HandleRequests(BaseHTTPRequestHandler):
def _set_headers(self):
self.send_response(200)
self.send_header('Content-type', 'application/json')
# this line is important to understand for CORS
self.send_header('Access-Control-Allow-Origin', '*')
self.end_headers()
def do_GET(self):
self._set_headers()
query_parms = urlparse.urlparse(self.path).query
parsed = urlparse.parse_qs(query_parms)
parsed['server_message'] = 'we gottem'
self.wfile.write(json.dumps(parsed))
host = 'localhost'
port = 8080
HTTPServer((host, port), HandleRequests).serve_forever()
恕我直言,这很简单,一个 python 内置函数和 jquery,它基本上是一个 internet 内置函数。
服务器响应的输入用法示例:
服务器输出示例:
对于更高级的用法,请考虑:
def do_POST(self):
# Doesn't do anything with posted data
self._set_headers()
content_len = int(self.headers.getheader('content-length', 0))
post_body = self.rfile.read(content_len)
self.wfile.write("received post request:<br>{}".format(post_body))
def do_PUT(self):
self.do_POST()
我离开弄清楚如何写入 csv/tsv 文件。
弄清楚如何编写一个基本的路由器,它允许您创建将数据发送回您的页面的端点,以便您可以填充下拉菜单。
do_GET 中的一些if/else 语句应该足够了。
一旦您达到限制并开始学习如何制作意大利面,我希望以此为起点,然后开始使用 flask 或类似 cherrypy 的工具。
祝你好运
