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
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
| 归档时间: |
|
| 查看次数: |
12503 次 |
| 最近记录: |