#python #ajax #apache
Необходимо создать простой одностраничный сайт для тестовых целей. На странице необходимо иметь возможность делать AJAX запросы к серверу. Пожалуйста, подскажите, каким образом реализовать самым простым и быстрым способом инфраструктуру сервера? Необходимо учитывать, что сервер будет запускаться как на локальной машине не техническим специалистом, так и на общем тестовом сервере. На локальной машине не технического специалиста нет какого–либо специального ПО. На сервере используется apache2, а также настроено окружение для django–проектов.
Ответы
Ответ 1
Самым простым способом реализовать указанное будет использование встроенного python HTTP–сервера на локальной машине и простого WSGI–приложения на сервере. При создании структуры проекта необходимо учитывать, что при работе через WSGI статические файлы лучше отдавать напрямую через apache. Предлагаемая структура проекта будет следующей server.py static/ | - index.html | - m/ | - styles.css | - scripts.js | - img/ В этом случае, мы сможем одинаково работать с файлами проекта. В html/css коде ссылки на статические файлы будут выглядеть следующим образом /m/scripts.js Конфигурация apacheServerAdmin webmaster@mysite.ru DocumentRoot "/path/to/my/site/root/" ServerName mysite.ru WSGIApplicationGroup %{GLOBAL} WSGIDaemonProcess mysite WSGIProcessGroup mysite WSGIScriptAlias / /path/to/my/site/root/server.py Alias /m/ /path/to/my/site/root/static/m/ В конфигурационном файле для сервера мы казали, где находится наш WSGI скрипт (WSGIScriptAlias / /path/to/my/site/root/server.py). Предлагается использовать тот же скрипт и для локального сервера. Также мы добавили псевдоним для /m/ (Alias /m/ /path/to/my/site/root/static/m/). Таким образом, все что остается – сделать папку static рабочей директорией для локального сервера, а apache автоматически сам будет обрабатывать ссылки на файлы. import SimpleHTTPServer import SocketServer import os import sys PORT = 8000 AJAX_ENPOINT_URL = "/ajax/endpoint" DOCUMENT_ROOT = "/path/to/my/site/root/" # Обработчик локального сервера. class CustomHandler(SimpleHTTPServer.SimpleHTTPRequestHandler): # Обрабатываем GET–запрос к серверу. # Если запрос к приходит по известному нам URL, формируем ответ. # Если мы не знаем URL, предлагаем стандартной библиотеки обработать его. def do_GET(self): if self.path == AJAX_ENPOINT_URL: self.send_response(200) self.send_header('Content-type','application/json') self.end_headers() self.wfile.write("My ajax response") return else: SimpleHTTPServer.SimpleHTTPRequestHandler.do_GET(self) if __name__ == "__main__": os.chdir("./static/") httpd = SocketServer.TCPServer(("", PORT), CustomHandler) print "Serving at port", PORT httpd.serve_forever() quit() def get_index(): f = open(DOCUMENT_ROOT +'/static/index.html', 'r') data = f.read() f.close() return data def application(environ, start_response): output = "" status = "200 OK" content_type = "text/plain" path = environ.get('PATH_INFO', None) if path == "/" or path == "index.html": output = get_index() content_type = 'text/html' elif path == AJAX_ENPOINT_URL: content_type = 'application/json' output = "My Ajax response" if output == "": status = "404 Not Found" output = "Not Found" response_headers = [('Content-type', content_type), ('Content-Length', str(len(output)))] start_response(status, response_headers) return [output] Для запуска сервера на локальной машине, достаточно перейти в корень проекта и выполнить команду python server.py В случае запуска на сервер, необходимо добавить конфигурацию apache в папку конфигураций и перезапустить его.Order deny,allow Allow from all ErrorLog "/var/log/apache2/mysite_error.log" LogLevel warn CustomLog "/var/log/apache2/mysite_warning.log" combined
Комментариев нет:
Отправить комментарий