Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 9, 2013 14:38:37

fogdragon
Зарегистрирован: 2013-12-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Python Twisted работа с динамическими URL

Делаю сервер и возникла потребность принимать POST запросы на динамический URL. Т.е. сервер генерирует какой то уникальный URL, а клиент на этот адрес отправляет данные POST запросом.
Имеется такой код для работы со статическими адресами как к этому прикрутить обработку динамических URL?

class CustomResource(Resource):
    isLeaf = True
    def render_POST(self, request):
        self.process_confirm(request)
        return NOT_DONE_YET
    @defer.inlineCallbacks
    def process_confirm(self, request):
        post_data=self.get_data(request)
        print post_data
        try:
            response_body = yield self.process_data(post_data)
        except GetError as e:
            response_body = e.err_text()
            logging.error(response_body)
        print 'respbody', response_body
        response_body = json.dumps(response_body)
        request.write(response_body)
        request.finish()
class Archiv(CustomResource):
    @defer.inlineCallbacks
    def process_data(self, post_data):
        #некая обработка запроса
        defer.returnValue(responce_body)
root = Resource()
archiv=Archiv()
root.putChild('archiv', archiv)
factory = Site(root)
reactor.listenTCP(8880, factory)
reactor.run()

Офлайн

#2 Дек. 9, 2013 17:54:38

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Python Twisted работа с динамическими URL

O_o

from twisted.web import server, resource
from twisted.internet import reactor
class Simple(resource.Resource):
    isLeaf = True
    def render_POST(self, request):
        return 'Hi i am POST handler for: {}'.format(request.path)
site = server.Site(Simple())
reactor.listenTCP(8001, site)
reactor.run()

# curl -d 'hello' http://127.0.0.1:8001/
Hi i am POST handler for: /
# curl -d 'hello' http://127.0.0.1:8001/foo
Hi i am POST handler for: /foo
# curl -d 'hello' http://127.0.0.1:8001/foo/bar
Hi i am POST handler for: /foo/bar

Офлайн

#3 Дек. 10, 2013 10:59:22

fogdragon
Зарегистрирован: 2013-12-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Python Twisted работа с динамическими URL

s0rg
O_o
Ну собственно при таком коде я не знаю как работать со статическими адресами)
Та и потом я нашел как примерно это сделать в моем коде, но никак не могу разобраться как оно работает.
Через getChild можно назначит чтобы он отлавливал какое то значение после статического URL, но пока я не разобрался как сделать это толком.
В классе делается такая вещь и по идее если после статического URL идет какое то значение то он должен сравнить его в функции но пока что у мне не вышло.
    
def getChildWithDefault(self, name, request):
        a= checkurl(name, self.pay_r)
        a=True
        if name == '':
            return self
        elif a:
            return self
        return Resource.getChild(self, name, request)

Офлайн

#4 Дек. 10, 2013 14:48:52

s0rg
От:
Зарегистрирован: 2011-06-05
Сообщения: 777
Репутация: +  25  -
Профиль   Отправить e-mail  

Python Twisted работа с динамическими URL

Вы можете, описать задачу целиком?

Офлайн

#5 Дек. 10, 2013 16:55:08

fogdragon
Зарегистрирован: 2013-12-09
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Python Twisted работа с динамическими URL

s0rg
Вы можете, описать задачу целиком?
Задача целиком:
Есть сервер который обрабатывает и отвечает на POST запросы приходящие на несколько статических URL.
Но появилась потребность получать данные через динамический, генерируемый мною URL который живет некоторое время( это я организовал с помощью redis), т.е. я генерирую адрес, отправляю его клиенту, клиент открывает браузер с формой в которую пользователь вбивает данные и эта форма отправляет эти данные POST запросом на сгенерированный мною URL, мой сервер должен получить эти данные распознать URL сверить его и ответить на этот запрос.
Собственно я уже разобрался, как я уже выше говорил за это отвечает функция getChild в классе resource. Пока что я не совсем разобрался, но почти реализовал это.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version