如何在 Python CGI 脚本中访问 URL 的查询字符串?

Jam*_*mie 1 cgi apache2 python-2.7

我正在尝试访问 python 脚本中的查询字符串:在 bash 中,我将使用${QUERY_STRING}环境变量访问它。

我遇到过这样的事情:/sf/answers/193537571/,但是这个脚本,由 Apache2 运行:

#!/usr/bin/python

print self.request.query_string
Run Code Online (Sandbox Code Playgroud)

不打印任何内容,在命令行中,同样会产生此错误:

$ ./testing.py
Traceback (most recent call last):
  File "./testing.py", line 3, in <module>
    print self.request.query_string
NameError: name 'self' is not defined
Run Code Online (Sandbox Code Playgroud)

我如何阅读query_string

小智 5

首先,“self”关键字仅在函数中定义一次才可用,通常是对象的。它的使用方式通常与在其他 OOP 语言中使用“this”的方式相同。

现在,您尝试使用的代码片段适用于您尚未导入(我认为也未安装)的 Google App Engine。由于您习惯于使用环境变量,因此您可以执行以下操作:

#!/usr/bin/python
import os

print os.environ.get("QUERY_STRING", "No Query String in url")
Run Code Online (Sandbox Code Playgroud)

但是,我建议您改用 cgi 模块。在此处阅读更多相关信息:http : //docs.python.org/2/library/cgi.html


mat*_*aly 5

QUERY_STRING如果您正在运行 cgi 脚本,就像添加一种替代方法来访问该值一样,您只需执行以下操作:

import os
print "content-type: text/html\n" # so we can print to the webpage
print os.environ['QUERY_STRING']
Run Code Online (Sandbox Code Playgroud)

我的测试和理解是,当 URL 中没有任何查询字符串时,这也有效,您只会得到一个空字符串。

这被确认正在处理2.7.6,查看所有环境变量,如下所示:

#!/usr/bin/python

import os

print "Content-type: text/html\r\n\r\n";
print "<font size=+1>Environment</font><\br>";
for param in os.environ.keys():
    print "<b>%20s</b>: %s<\br>" % (param, os.environ[param])
Run Code Online (Sandbox Code Playgroud)

这段代码是从关于使用 Python 进行 CGI 编程的TutorialsPoint 教程中获得的。

虽然,正如zombie_raptor_jesus 提到的,使用Python 的CGI 模块和FieldStorage 可能会更好,使事情变得更容易。

再次从上面的教程:

# Import modules for CGI handling 
import cgi, cgitb 

# Create instance of FieldStorage 
form = cgi.FieldStorage() 

# Get data from fields
first_name = form.getvalue('first_name')
last_name  = form.getvalue('last_name')
Run Code Online (Sandbox Code Playgroud)

将保存查询字符串中的值 first_name=Bobby&last_name=Ray