【问题标题】:Why POST gets two arguments?为什么 POST 有两个参数?
【发布时间】:2012-02-08 15:58:57
【问题描述】:

我有一个这样的服务器端 webpy 代码:

urls = (
    '/home', 'homePage',
    '/clients/(.*)', 'clientsPage',
    )

# Class for common pages methods and parameters
class allpages(object): ....

    def logout(self):
        i=web.input().keys()[0]
        if i=='logout': session.kill()
        return

class homePage(allpages):
    def GET (self):
        self.loginCheck()
        return self.showpage('home',self.userName())

    def POST (self):
        self.logout()
        return

class clientsPage(allpages):
    def GET (self, client):
        self.loginCheck()
        if client == '': clientID=renderInc.firmlist('clients')
        elif client == 'new': clientID=renderInc.newfirm('clients')
        else: clientID = 'There is no such client' #TODO: make a 404 page
        return self.showpage('clients',clientID)

    def POST (self):
        self.logout()
        return

在我的一个 HTML 模板(页脚)中,有一个“注销”按钮,可在单击时运行脚本:

jQuery('#logout').click(function(){
    jQuery.post(path,{'logout':''}, function(){location.reload();});
});

在 /home 部分一切正常,但是当我尝试从 /clients/ 页面注销时,它会引发错误:TypeError: POST() 只需要 1 个参数(给定 2 个)。

问题 1:为什么会这样? 问题2:有什么方法可以让任何方法默认在每个页面上都在POST中运行(不要在每个类中复制self.logout()行。

【问题讨论】:

    标签: python post web.py


    【解决方案1】:

    问题1: clientsPage 的正则表达式中的捕获 - (.*) 告诉 web.py 您要捕获 URL 的该部分并将其作为参数传递给 POST 方法。从您的代码来看,这似乎是客户端 ID。

    问题2: 我只是使用单独的 URL 进行注销。您不需要为每个页面都注销。

    【讨论】:

    • 用于注销的单独 URL 确实是解决问题的好方法
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-17
    • 2021-08-15
    • 2019-02-19
    • 1970-01-01
    相关资源
    最近更新 更多