CGI-良好设计规范:setattr / eval / if-then?

| 我对良好做法有疑问。在为我的公司开发后端时,我们的销售人员可以远程管理客户,我希望他们只需单击“编辑联系人信息”(例如)并使用python脚本“ manageClients.py”即可。 \“调用\” editContactInfo \“函数。 显然,最简单的方法是href
manageClients.pyfunction=editContactInfo&client=ClientName
并在脚本中,获取了fieldtorage实例之后:
if function:
      eval(function)
但是,我看到的一切都说如果可以避免,不要使用eval。我不完全了解setattr(),而且我真的不知道如何将其用于如此简单的脚本中。我也认为
if function==\"editClientInfo
:(依此类推)太笨重了。 显然,上面列出的代码/ URL很简单,因此我可以清楚地问这个问题。有适当的安全措施,等等。 我只是想解决一个被认为是好的实践的方法,因为这是我的第一个大型编程项目,而且我想做对。     
已邀请:
如果我理解正确,则您有一组功能,并且想按名称指定要使用的功能。我将建立一个字典,将名称映射到函数,然后通过简单的查询就可以使用该函数:
# Map names to functions. Note there is no need for the names
# to match the actual function name, and the functions can appear
# multiple times.
function_map = {
    \'editContactInfo\': editContactInfo,
    \'editClientInfo\': editClientInfo,
    \'editAlias\': editContactInfo,
}

# Get name of function to run etc. I\'m assuming that the function
# name is stored in the variable function_name, and any parameters 
# call it with is in the dictionary parameters (i.e., the functions
# all take keyword arguments).

# Do a lookup to get the function.
try:
    function = function_map[function_name]
except KeyError:
    # Replace with your own error handling code.
    print \'Function {0} does not exist.\'.format(function_name)

# Call the function
result = function(**parameters)
这是执行查询的标准方法,这似乎是您要的。但是,您也询问了最佳实践,我也同意RestRisiko的观点:在这种情况下,使用为Web应用程序设计的框架是最佳实践。 我真正有经验的唯一Python框架是Django。与Flask或Bottle相比,这是一个“更重”(更复杂)的框架,但具有很多内置功能。这实际上取决于您的需求,我建议您将它们全部检查一下,以找出最适合您的情况。     
CGI?这是上个世纪的古老元凶。 请使用一个不错的Python网络框架来实现您的功能 以体面和现代的方式。 像Flask或Bottle这样的小型框架比处理CGI更好很多 如今-请不要找借口。如今,没有任何理由以任何方式使用CGI。 甚至在Python HTTPServer之上构建内容也是一个更好的选择。     

要回复问题请先登录注册