2013-09-26 32 views
0

我有一些代碼的問題,試圖獲得QUERY_STRING,但是當我看着控制檯中的錯誤它回來與內部錯誤500似乎是由該行getReqStr = env_vars['QUERY_STRING']mod_python和獲取QUERY_STRING使用env_vars()

任何任何想法如何解決這個請好嗎?

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) 

編輯。

這裏是我找回通過Chrome瀏覽器的控制檯響應:

mod_python的ERRORProcessId:3424Interpreter: '127.0.1.1'ServerName:' 127.0.1.1'DocumentRoot: '在/ var/www'URI:'/ currentcost.py'Location:NoneDirectory:'/ var/www /'文件名:'/var/www/currentcost.py'PathInfo:''階段:'PythonHandler'Handler:'mod_python.publisher'Traceback(最近一次調用最後一次) :文件「/usr/lib/python2.7/dist-packages/mod_python/importer.py」,第1537行,HandlerDispatch default = default_handler,arg = req,silent = hlist.silent)文件「/ usr/lib/python2 .7/dist-packages/mod_python/importer.py「,第1229行,在_process_target結果= _execute_target(config,req,object,arg)文件」/usr/lib/python2.7/dist-packages/mod_python/importer。 py「,行1128,在_execute_targe t result = object(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 log,import_path)文件「/usr/lib/python2.7/dist-packages/mod_python/importer.py」,行680,在import_module execfile(file,module。 dict)文件「/var/www/currentcost.py」,第17行getReqStr = env_vars ['QUERY_STRING']'後的網址?^SyntaxError:掃描字符串文字時的EOLMODULE CACHE DETAILSAccessed:Thu Sep 26 09:18:30 2013Generation:0_mp_545c0d0056a74a40503ad1da7dbb26e2 {FileName:'/var/www/currentcost.py'Instance:1 [IMPORT] Generation:0 [ERROR] Modified:Thu 9月26日09:10:57 2013}

+1

在'env_vars'中甚至可能不存在'QUERY_STRING',這可能會引發'KeyError'異常...我們能否擁有完整的回溯? – 2013-09-26 11:32:13

+0

@Andre我已經用完整的痕跡更新了帖子 –

回答

2

如果您使用mod_python,那麼req.args可能包含您的所有數據。

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

如果您需要處理GET和POST不假思索地QUERY_STRING,那麼你最好使用FieldStoragemod_python捆綁解析它。應該是這樣的:

from mod_python import util 

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

當你的代碼的附加觀察:你的方式建立你的SQL查詢是不安全的,容易受到SQL injection。 不要忘記在傳遞到SQL查詢之前轉義您的數據,或者使用query parameter binding(首選方法)代替。