【问题标题】:Cherrypy handling requests differentlyCherrypy 处理请求的方式不同
【发布时间】:2015-12-01 05:09:24
【问题描述】:

我正在尝试找出一种方法,我需要让两个不同的页面调用一个函数,并且该函数将根据调用的函数相应地处理请求。

流程可以是基于调用函数的predict function 句柄,也可以是向调用函数返回一个值,然后调用函数页面重新加载以显示必须显示的结果。

Class GSpam:

    @cherrypy.expose
    def main(self,contents=""):
        return call predict

    @cherrypy.expose
    def alt(self):
        return """<html>
        <div align=center>
          <body>
        <br>
        <br>
            <form method="post" action="predict">
              <input type="text" value="Enter post to check" name="text" />
              <button type="submit">Predict!</button>
            </form>
        </div>
          </body>
        </html>"""

    @cherrpy.expose
    def predict(self,text):
        do some stuff
        check which function called and return accordingly
        return result

if __name__ == '__main__':
    port = 80
    api = cherrypy.dispatch.RoutesDispatcher()
    api.connect('home','/',controller=GSpam,action='main')
    conf = {'/': {'request.dispatch': api}}
    cherrypy.config.update({
        'server.socket_host' : "0.0.0.0",
        'server.socket_port' : int(port),
        'server.thread_pool' : 10,
        'engine.autoreload.on' : False,
        'response.timeout' : 10
    })
    app=cherrypy.tree.mount(root=None,config=conf)

我以前没用过cherrypy。任何帮助表示赞赏。

【问题讨论】:

    标签: python cherrypy


    【解决方案1】:

    创建一个私有方法怎么样:

    class GSpam:
    
       def _predict(self, text, from_='original'):
           if from_ == 'original':
              return "Something very different"
           else:
              return "Content for %s" % from_
    
       @cherrypy.expose
       def main(self,contents=""):
           return self._predict(contents, 'main')
    
       @cherrypy.expose
       def alt(self):
           return """<html>
           <div align=center>
             <body>
           <br>
           <br>
               <form method="post" action="predict">
                <input type="text" value="Enter post to check" name="text" />
                <button type="submit">Predict!</button>
               </form>
           </div>
             </body>
           </html>"""
    
       @cherrypy.expose
       def predict(self, text):
           #do some stuff
           result = self._predict(text)
           return result
    

    【讨论】:

    • 您的意思是在另一个私有函数中添加一个附加参数,该函数决定调用来自何处。以后会记住这一点。谢谢
    【解决方案2】:

    这是我尝试过的适合我的方法。我在函数本身上使用了表单操作。这并不完全根据问题中提到的哪个函数调用另一个函数来处理,而是调用另一个函数的同一个函数通过对自身使用表单操作来处理自己。

        @cherrypy.expose
            def index(self,text=""):
    
                cherrypy.response.headers['Content-Type'] = 'text/xml'
                try:
                    if not text:
                        cherrypy.response.status = 400
                        return "<error>\n<code>400</code>\n<msg>empty text</msg>\n</error>"
                    else:
    
                        res=self.predict(text)
                        res=[map(lambda x : "spam" if x==0 else "ham" ,res[0]),res[1]]
                        return '<?xml version="1.0"?><Result>\n<Logistic_Regression>\n<Label>'+res[0][1]+'</Label>\n<Score>'+str(res[1][1])+'</Score>\n</Logistic_Regression>\n<Linear_SVM>\n<Label>'+res[0][0]+'</Label>\n<Score>'+str(res[1][0])+'</Score>\n</Linear_SVM>\n<Random_Forest>\n<Label>'+res[0][2]+'</Label>\n<Score>'+str(res[1][2])+'</Score>\n</Random_Forest>\n</Result>' 
    
                except Exception, e:
                    cherrypy.response.status = 500
                    return "<error>\n<code>500</code>\n<msg>%s</msg>\n</error>" % traceback.format_exc()
    
    
            @cherrypy.expose
            def alt(self,text="",is_money=""):
                if text=="":
                    return """<html>
                    <div align=center>
                    <h1>Spam Detector</h1>
                    <title>Spam Detector</title>
                    <body>
                    <br>
                    <form method="post" action="alt">
                    <input type="text" value="" placeholder="Enter post to check" name="text" />
                    <br><br>
                    Is Money : <input type="radio" name="is_money" value="y" checked> Y<input type="radio" name="is_money" value="n">N
                    &emsp;<button type="submit">Predict!</button>
                    </form>
                    </div>
                    </body>
                </html>"""
                else:
                    res=self.predict(text,is_money)
                    res=[map(lambda x : "<font color='red'>spam" if x==0 else "<font color='green'>ham" ,res[0]),res[1]]
                    print res
                    text= text + "<br> #money" if is_money=="y" else text
                    separator="<br><br><div align=center><hr width=50%></div><br><br>"
                    htmlstart="""<html>
                    <div align=center>
                    <h1>Spam Detector</h1>
                    <title>Spam Detector</title>
                    <body>
                    <br>
                    <br>
                    <form method="post" action="alt">
                    <input type="text" value="" placeholder="Enter post to check" name="text" />
                    <br>
                    Is Money : <input type="radio" name="is_money" value="y" checked> Y<input type="radio" name="is_money" value="n">N
                    <button type="submit">Predict!</button>
                    </form>
                    </div><div align=center>"""+separator
                    htmlend="</body></html>"
                    html="<b><table border=0 style='width:60%' cellspacing=20  ><tr><td align='center' valign='middle'><font color = 'navy'><b>Logistic Regression</td><td></td><td align='center' valign='middle'><b><font color='navy'>Linear SVM</b></font></td><td></td><td align='center' valign='middle'><b><font color='navy'>Random Forest</b></font></td></tr><tr><td align='center' valign='middle'><h1>"+res[0][1]+"</font></h1></td><td></td><td align='center' valign='middle'><h1>"+res[0][0]+"</font></h1></td><td></td><td align='center' valign='middle'><h1>"+res[0][2]+"</font></h1></td></tr><tr><td align='center' valign='middle' colspan=5><font color='orangered'><b>Text : <font color='orange'>"+text+"</td></tr><tr><td align='center' valign='middle'><font color='navy'><b>Probability : <font color='blue'>"+str(res[1][1])+"</b></td><td></td><td align='center' valign='middle'><b><font color='navy'>Probability : <font color='blue'>"+str(res[1][0])+"</font></b></td><td></td><td align='center' valign='middle'><font color='navy'><b>Probability : <font color='blue'>"+str(res[1][2])+"</b></td></tr></table>"
                    if 'html' not in cherrypy.session:
                        cherrypy.session['html']=[html]
                    else:
                        li=cherrypy.session['html']
                        li.append(html)
                        cherrypy.session['html']=li[-5:]
                    txt=separator.join((cherrypy.session['html'])[::-1])
                    return htmlstart+txt+htmlend
    def predict(self,text="",is_money=""):
         return do_Something
    

    【讨论】:

      猜你喜欢
      • 2014-02-27
      • 2018-05-07
      • 1970-01-01
      • 2015-10-18
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2012-07-21
      相关资源
      最近更新 更多