определение функции переменной Python - PullRequest
2 голосов
/ 05 февраля 2011

Во-первых, пожалуйста, не стреляйте в меня, если об этом уже спрашивали - я осмотрелся, но безрезультатно.

У меня есть файл python (названный rpc.py), содержащий много функций, обслуживающих запросы AJAX.,Например:

def test(self, vars):
    return vars['id']

def test2(self, vars):
    return vars['id']+1

И он вызывается с URL-адресом вроде:

rpc.py?fnc=test2&id=4

Я хочу вызвать функцию, соответствующую параметру запроса 'fnc', и передать всю строку запроса.в 'vars'.

Итак, что-то вроде следующего «псевдокода» - это то, что мне нужно:

vars = cgi.FieldStorage()
print "Content-Type: text/html\n\n"
print eval('vars["fnc"].value(vars)')

Есть идеи?

1 Ответ

6 голосов
/ 05 февраля 2011

Вы можете использовать

getattr(server, vars["fnc"])(vars)

, но я бы также предложил добавить префикс к именам служб (например, "do_test"), чтобы избежать вредоносного кода, который мог бы вызвать любой из методовобъект сервера просто передавая их имена (включая те, которые, по вашему мнению, не должны).В этом случае это будет

getattr(server, "do_" + vars["fnc"])(vars)
...