Найти - Пользователи
Полная версия: Python Twisted работа с динамическими URL
Начало » Python для новичков » Python Twisted работа с динамическими URL
1
fogdragon
Делаю сервер и возникла потребность принимать 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()
s0rg
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
fogdragon
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)
s0rg
Вы можете, описать задачу целиком?
fogdragon
s0rg
Вы можете, описать задачу целиком?
Задача целиком:
Есть сервер который обрабатывает и отвечает на POST запросы приходящие на несколько статических URL.
Но появилась потребность получать данные через динамический, генерируемый мною URL который живет некоторое время( это я организовал с помощью redis), т.е. я генерирую адрес, отправляю его клиенту, клиент открывает браузер с формой в которую пользователь вбивает данные и эта форма отправляет эти данные POST запросом на сгенерированный мною URL, мой сервер должен получить эти данные распознать URL сверить его и ответить на этот запрос.
Собственно я уже разобрался, как я уже выше говорил за это отвечает функция getChild в классе resource. Пока что я не совсем разобрался, но почти реализовал это.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB