我通常用PHP编写web应用程序。现在我正在学习使用Python的CherryPy框架来做web编程。我尝试做的是接受来自用户的http Get请求,然后使用查询字符串中的变量执行一些函数,最后我将返回结果。但是现在我想我被困在CherryPY的编程约定中了。
我尝试使用索引函数通过GET方法接受变量post,然后按如下方式执行函数:
import cherrypy
from sqlalchemy import *
from function import function
class WelcomePage:
def index(self,number):
if not number:
return "failure";
else:
number1=number;
return ;
now = datetime.datetime.utcnow();
code = generateCode();
finalResult();
def finalResult():
return code;上面的代码不起作用,它将在index(self,number)的返回语句中结束,并且我不能继续执行其他函数。我想我打破了Python风格的面向对象的结构(与PHP不同)。因此,以下是处理GET输入和计算后返回的正确方法
@cherrypy.exposed
def index(self,number):
if not number:
return "failure";
else:
cal = Calculation();
other =OtherFunction();
code=cal.doSomething(number1);
final =other.doAnotherThing(code);
return final; 也就是说,我需要调用index函数中的所有其他函数,然后在index函数中返回结果。这是处理http GET变量(或post)的唯一方法。我可以用另一种方式来编写不需要调用索引函数中的所有函数的代码吗(这似乎会使索引函数变得如此冗长)。用不同的函数完成GET变量的处理,然后最终返回计算结果,这是一种更干净、更清晰的方法吗?我已经用谷歌搜索了很多天,但还是想不出一个好的方法。
发布于 2014-06-29 03:01:54
首先,来自PHP的你应该理解Python的语法(例如,除非它是多语句行,否则你不需要分号)和语义(例如,Python OO功能来安排你的代码,你的“编程结构”)。第二,CherryPy应用程序和普通PHP部署之间的工作流差异(例如,您可以阅读PHP is meant to die )。代码的CherryPy是线程化的应用服务器。您的活动代码始终在内存中,并且可以在后台运行。你的权力越大,你的责任就越大。
一旦你知道了基础知识,你就可以随心所欲地安排你的代码了。组合或分解,放入函数或类,或者单独的模块,或者Python可以处理的任何其他可以想象的方式。这里的CherryPy是没有限制的。在最简单的情况下,它可能是这样的。
#!/usr/bin/env python
import cherrypy
config = {
'global' : {
'server.socket_host' : '127.0.0.1',
'server.socket_port' : 8080,
'server.thread_pool' : 4
}
}
class App:
def _foo(self, value):
return self._bar(value)[::-1]
def _bar(self, value):
return value * 2
@cherrypy.expose
def index(self, value = None):
if not value:
# when you visit /
raise cherrypy.HTTPError(500)
else:
# when you visit e.g. /?value=abc
return self._foo(value)
if __name__ == '__main__':
cherrypy.quickstart(App(), config = config)https://stackoverflow.com/questions/24107883
复制相似问题