Как сохранить введенные пользователем данные в Redis с помощью торнадо Python - PullRequest
2 голосов
/ 17 марта 2012

Я пишу небольшое веб-приложение, использующее торнадо, python, ниже приведен мой код.У меня есть HTML-форма в Python с 2 текстовыми полями, теперь я хочу взять форму ввода текстовых полей и сохранить в Redis.
Мои вопросы -

  1. Как мне установить соединение сRedis из моего скрипта Python?
  2. Как сохранить входящие пользовательские входы в Redis?

Пример кода будет приветствоваться.

import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web

from tornado.options import define, options

define("port", default=8888, help="run on the given port", type=int)

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write('<html><body><form action="/" method="post">'
           '<p>Please enter the Key Value pair for redis.</p>'
                   '<input type="text" **name="key"** value="type key here">'
           '<input type="text" **name="value"** value="type value here">'
                   '<input type="submit" value="Submit Key Value">'
                   '</form></body></html>')


def main():
    tornado.options.parse_command_line()
    application = tornado.web.Application([
        (r"/", MainHandler),
    ])
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == "__main__":
    main()

1 Ответ

3 голосов
/ 20 марта 2012

Для 1-го вопроса, используя модуль redis в python.

Во-первых, установите redis из sudo easy_install redis или получите исходный код , чтобы установить его из сценария установки

На странице github py-redis есть документация, но если вы хотите начать с чего-то более простого, просто напишите эти 2 строки кода:

import redis
# if your redis was implemented properly and defaultly (eg. on 6379 port),
# `db` you get can work now.
db = redis.StrictRedis()

Для второго вопроса напишите метод обработки HTTP POST в MainHandler:

class MainHandler(tornado.web.RequestHandler):
    def get(self):
        ...

    def post(self):
        # use handler's get_argument method to get incoming data,
        # if eithor of them is not get, a HTTP 400 will return
        key = self.get_argument('key')
        value = self.get_argument('value')
        # just like `SET` command in redis client
        db.set(key, value)
        # return something you want
        self.write('Set %s - %s pair OK' % (key, value))

PS. вы можете установить db в качестве атрибута ранее вашего класса-обработчика, чтобы его можно было легко получить из self.db.

...