如何检索自动报告并将其保存到数据库?

How do I retrieve an automated report and save it to a database?

提问人:Mason Wheeler 提问时间:3/19/2010 最后编辑:Jon SeigelMason Wheeler 更新时间:4/17/2010 访问量:229

问:

我有一个 Web 服务器,可以接受 Python、PHP 或 Perl 的脚本。我对这些语言都不太了解,但在这三种语言中,Python 似乎是最不可怕的。它设置了一个 MySql 数据库,我有足够的 SQL 来管理它并为它编写查询。

我还有一个程序,我想添加自动错误报告。出了点问题,它向我的服务器发送了错误报告。

我不知道该怎么做的是编写一个 Python 脚本,该脚本将位于 Web 服务器上,当我的程序发送错误报告时,请执行以下操作:

  • 接收错误报告。
  • 将其解析为多个部分。
  • 将其插入数据库。
  • 让服务器给我发一封电子邮件。

据我所知,如果我只知道自己在做什么,这似乎应该不会太难。有人可以给我指出一个网站,解释我创建这样的脚本所需的基本原则吗?

python 错误报告

评论


答:

0赞 Byron Whitlock 3/19/2010 #1

我不懂python,所以我向你展示php。

因此,假设您的错误将代码发布到file.php?report=report+is+here

以下方法将起作用。

<?

 # code to initialize the database here
 $rc = mysql_connect(...);

 if (!$rc)
 {
  die ("Could not connect to the database.");
 }

 // probably should do some error checking in a try .. catch
 mysql_execute("
                 INSERT INTO BugTable(report) 
                 VALUES('".addslashes($_REQUEST['report'])."')");

 mail("[email protected]","Bug Report Recieved", "Recieved the following bug report: {$_REQUEST['report']}");

 ?>

关于php的一切都在 php.net。

0赞 Tom Morris 3/19/2010 #2

使用 Python,这取决于您的虚拟主机。一些共享的 Web 主机使用 PHP,然后只通过 CGI 执行 Perl/Python(和 Ruby 等)。使用 Python,您可以使用 CGI 模型或 - 如果您有支持它的托管 - WSGI 来构建 Web 内容。如果您要执行 Python 和 CGI,只需查看 cgi 模块的文档即可。或者,使用 web.py。基本上,您需要在特定 URI 上以 HTTP POST 消息的形式读取输入。web.py 文档应描述如何编写此内容。

对于解析 - 取决于它以什么格式发送。您可以使用 x-www-form-encoded 来传输简单的键值对。我不知道 web.py 的复杂性(我主要使用 Ruby),但它基本上应该为您提供一种获取“请求”对象的方法,对它做一些事情,然后您修改一个“return”对象,其中包含返回到浏览器的内容。web.py,这是 web.input() - 请参阅此处

对于更复杂的事情,您基本上需要以您选择的格式 - XML、JSON、神奇的二进制 blob 格式发布数据。如何解析它取决于它是什么。只需在谷歌上搜索“python xml”或“python json”或其他任何东西,您就会找到它的最新库。

插入数据库 - 使用 Python 的 mysqldb 库(我使用 Postgres,主要来自 Ruby 和 Java,所以我并不完全喜欢最新的 Python MySQL 库)。

对于发送电子邮件,您可以只使用 sendmail(在安装了 sendmail 的 Unix 系统上),也可以使用 Python 的 smtplib 将其发送到 SMTP 服务器 - 如果您只是在做管理电子邮件,请使用 Gmail 帐户之类的东西作为您的 SMTP 服务器,因为您知道它会起作用。哦,web.py 使它变得简单 - 它有一个内置的邮件模块。我猜,用那个。

您可能需要考虑安全性 - 这意味着身份验证,这意味着表单验证。RTFM 适用于您使用的任何语言和数据库库,这样您就不会对 SQL 注入敞开心扉 - 对电子邮件也是如此。您不想成为垃圾邮件的代理。