Şu yapı kalsiktir.
Bir siteniz vardır örneğin: www.domain.com ve birde bu sitenin yönetimi için admin.domain.com sitesi varıdır.
Özünde her iki site de aynı veri tabanını kullanır ve eğer ORM kullanıyorsanız, her iki proje için de ayrı ayrı model sınıfları tanımlamanız gerekir. Tabi eğer iki projeyi tek bir proje olarak geliştirmiyorsanız.
Tornado framework, bir Python frameworküdür ve sadece bir framework değil aynı zamanda bir web application sunucusudur. Yani bu framework ile geliştrdiğiniz python uygulaması aynı zamanda bir server olacaktır. Üstelik bu server non-blocked serverdır.
Blocked ve non-blocked server kavramları başka bir yazının konusu. Bu yazımızda, tornado framework ile nasıl birden fazla domaini yöneteceğimizi yazacağım.
Routing Sınıfları
class ClientRouting: @staticmethod def get(): return [ # Static Files url(r'/assets/(.*)', StaticFileHandler, {'path': join(dirname(__file__), 'client/assets')}), url(r'/uploaded/(.*)', StaticFileHandler, {'path': join(dirname(__file__), 'uploaded')}), # Web Handlers url(r'/giris', LoginHandler, name="login"), url(r'/yeni-uye',SignupHandler, name="signup") ]
class AdminRouting: @staticmethod def get(): return [ url(r'/assets/(.*)', StaticFileHandler, {'path': join(dirname(__file__), 'admin/assets')}), url(r'/', AdminDefaultHandler, name="admin_home"), url(r'/login', AdminLoginHandler, name="admin_login"), url(r'/logout', AdminLogoutHandler, name="admin_logout") ]
Tornado Server
define('port', default=8000, help="run on the givenport", type=int) # define('address', default='www.domain.com', help="run on the given address", type=str) class YourApplication(tornado.web.Application): def __init__(self): setting = TornadoSettings.get() setting.__setitem__("ui_modules", uimodules) client_routing = ClientRouting.get() admin_routing = AdminRouting.get() tornado.web.Application.__init__(self, None, **setting) self.add_handlers(r"admin\."+YourSettings.domain_base.replace(".", r"\."), admin_routing) # All subdomains routing (exclude admin) self.add_handlers(r"[0-9a-z]*(.)?"+YourSettings.domain_base.replace(".", r"\."), client_routing) # Have one global connection. self.engine = create_engine(SqlAlchemySettings.toConnStr()) self.db = scoped_session(sessionmaker(bind=self.engine)) if __name__ == "__main__": tornado.options.parse_command_line() application = YourApplication() http_server = tornado.httpserver.HTTPServer(application) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()