mod_python并使用env_vars()获取QUERY_STRING

时间:2013-09-26 11:15:47

标签: python query-string mod-python

我遇到了一些代码问题,尝试获取QUERY_STRING但是当我查看控制台中的错误时,它会返回内部错误500,这似乎是由行getReqStr = env_vars['QUERY_STRING']引起的

有任何想法如何解决这个问题吗?

import MySQLdb
import cgi, cgitb
from urlparse import urlparse

def index(req):

    req.add_common_vars()
    env_vars = req.subprocess_env
    getReqStr = env_vars['QUERY_STRING']           
    getReqArr = getReqStr.split('&')               
    getReqDict = {}

    for item in getReqArr:                          
       tempArr = item.split('=')                    
       getReqDict[tempArr[0]] = tempArr[1]
 
    dtbox = getReqDict['dt']
    tmbox = getReqDict['tm']

    con = MySQLdb.connect('localhost', 'root', '', 'mydb')

    with con:
        cur = con.cursor(MySQLdb.cursors.DictCursor)
        st = "SELECT tmp, watts FROM currentcost WHERE dt ='" + dtbox + "' and tm like '" + tmbox + "%'"
        cur.execute (s)
        rows = cur.fetchall()

        x=""
        y=""
        for row in rows:
            x=x+row["watts"]+","
            y=y+row["tmp"]+","

    x="data:["+x+"]"
    y="data:["+y+"]"

    con.close()

    req.write(st)

EDIT。

以下是我通过Chrome控制台回复的回复:

MOD_PYTHON ERRORProcessId:3424Interpreter:'127.0.1.1'ServerName:'127.0.1.1'DocumentRoot:'/ var / www'URI:'/ currentcost.py'Location:NoneDirectory:'/ var / www /'Filename:' /var/www/currentcost.py'PathInfo:''阶段:'PythonHandler'Handler:'mod_python.publisher'Traceback(最近一次调用最后一次):文件“/usr/lib/python2.7/dist-packages/mod_python/ importer.py“,第1537行,在HandlerDispatch中默认= default_handler,arg = req,silent = hlist.silent)文件”/usr/lib/python2.7/dist-packages/mod_python/importer.py“,第1229行,在_process_target result = _execute_target(config,req,object,arg)文件“/usr/lib/python2.7/dist-packages/mod_python/importer.py”,第1128行,在_execute_target结果=对象(arg)文件“/ usr /lib/python2.7/dist-packages/mod_python/publisher.py“,第204行,处理程序模块= page_cache [req]文件”/usr/lib/python2.7/dist-packages/mod_python/importer.py“ ,第1059行, getitem return import_module(req.filename)文件“/usr/lib/python2.7/dist-packages/mod_python/importer.py”,第296行,在import_module日志中,import_path)文件“/usr/lib/python2.7/ dist-packages / mod_python / importer.py“,第680行,在import_module execfile(文件,模块。 dict )文件”/var/www/currentcost.py“,第17行getReqStr = env_vars [' QUERY_STRING']'之后的网址? ^ SyntaxError:EOL扫描字符串文字时模块CACHE DETAILSccessed:Thu Sep 26 09:18:30 2013Generation:0_mp_545c0d0056a74a40503ad1da7dbb26e2 {FileName:'/ var / www / currentcost.py'实例:1 [IMPORT]生成:0 [ERROR]修改:Thu 9月26日09:10:57 2013}

1 个答案:

答案 0 :(得分:2)

如果您使用的是mod_python,则req.args可能包含您的所有数据。

您还可以使用req.parsed_uri[apache.URI_QUERY]

获取query_string

如果您需要处理GET和POST而不考虑它,那么最好使用与mod_python捆绑在一起的FieldStorage类来解析它。应该是这样的:

from mod_python import util

getReqDict = util.FieldStorage(req)
dtbox = getReqDict['dt']
tmbox = getReqDict['tm']

作为对代码的额外观察:构建SQL查询的方式不安全且易受SQL injection攻击。 在传递给SQL查询之前不要忘记转义数据,或者使用query parameter binding(首选方法)。