Почему POST получает два аргумента? - PullRequest
0 голосов
/ 12 января 2012

У меня есть серверный веб-код, подобный этому:

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 / pages, возникает ошибка: TypeError: POST () принимает ровно 1 аргумент (2 дано).

Вопрос 1: Почему это происходит? Вопрос 2: есть ли способ заставить какие-либо методы запускаться в POST на каждой странице по умолчанию (не копировать строку self.logout() в каждом классе.

1 Ответ

2 голосов
/ 12 января 2012

Вопрос1: захват в регулярном выражении для clientsPage - (. *) Сообщает web.py, что вы хотите захватить эту часть URL-адреса и передать ее в качестве аргумента методу POST.Из вашего кода, похоже, это идентификатор клиента.

Вопрос2: Я бы просто использовал отдельный URL для выхода из системы.Вам не нужно выходить из системы на каждой странице.

...