Дата-время Торнадо

#python #datetime #offset #tornado

#python #дата и время #смещение #торнадо

Вопрос:

Как мне создать отметку даты и времени из смещения клиентов? Я возился с этим весь день. Идея состоит в том, чтобы иметь логин пользователя и на основе его часового пояса создавать cookie, срок действия которого истекает через столь долгое время.

 #!/usr/bin/env python

import tornado.auth
import tornado.database
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import tornado.escape
import hashlib
import unicodedata
import markdown
import os.path
import re
import urllib
import sys
import time
import json
import MySQLdb
import Cookie
from tornado.options import define, options
import datetime
from nptime import nptime

define("port", default=8001, help="Server port", type=int)
class Application(tornado.web.Application):
    def __init__(self):
        handlers = [
            (r"/", MainHandler),
            (r"/test", Test),
        ]
        tornado.web.Application.__init__(self, handlers)

        self.db = tornado.database.Connection(
            host=options.mysql_host, database=options.mysql_database,
            user=options.mysql_user, password=options.mysql_password)

class BaseHandler(tornado.web.RequestHandler):
    @property
    def db(self):
        return self.application.db

class MainHandler(BaseHandler):
    def get(self):
        self.set_header("Content-Type", "text/html")
        self.write()
        self.finish()

class Test(BaseHandler):
    def post(self):
        tmz = self.get_argument('tmz', '')
        cur = datetime.datetime.utcnow().strftime('%A, %B %d, %Y %I:%M:%S %p 'tmz, gmtime())
        self.set_header("Content-Type", "text/html")
        self.write(cur)
        self.finish()

def main():
    tornado.options.parse_command_line()
    http_server = tornado.httpserver.HTTPServer(Application())
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()


if __name__ == "__main__":
    main()
 

Где tmz будет часовым поясом, отправленным, например, -0400 или 0500

Ответ №1:

У вас может быть скрытый ввод даты и времени, который передает текущее время клиента, включая часовой пояс, в форму входа:

 <input type="hidden" name="current_datetime" />
 

Это входное значение может быть заполнено с помощью javascript.

Затем в вашей функции post вы можете добавить часы или дни к значению, в которое передается current_datetime .

Комментарии:

1. Это было бы возможно, за исключением того, что, если пользователь некоторое время находился на странице в режиме ожидания, т.Е. Вставал, чтобы что-то сделать, и возвращался, то время было бы недолгим. Не похоже, что это должно быть сложно выполнить, так как при запуске его как скрипта с сервера все в порядке, он запускает его через Интернет, что, по-видимому, является проблемой, Tornado, похоже, выдает ошибку 500

2. В итоге я разобрался с проблемой. По какой-то причине его нужно было поместить в int()