Мое первое веб-приложение (Python): использовать CGI или фреймворк, такой как Django?

Я не хочу обременять вас всеми деталями, но в основном я студент 2-го курса compsci без опыта веб-разработчиков.

в основном я хочу создать небольшое "веб-приложение", которое принимает входные данные из html-формы, имеет скрипт python для выполнения некоторых вычислений и повторно отображает эти результаты в вашем браузере.

на данный момент у меня есть форма и скрипт. Однако, когда я пытаюсь протестировать форму, вместо запуска скрипта мой браузер пытается загрузить он. Насколько я понимаю, это проблема сценария cgi, и я должен создать веб-сервер для тестирования этого сценария.

и вот я застрял. Я почти ничего не знаю о веб-серверах и о том, как их настроить. Кроме того, я слышал, что сценарии GCI остались в прошлом и требуют больших накладных расходов для правильной работы.

Это приводит к моим вопросам. Как я могу завершить свое приложение и протестировать сценарий cgi? Установить apache и беспорядок вокруг с ним или я должен смотреть на что-то вроде Google app engine? Есть ли другие способы выполнить эту задачу без сценариев cgi? Где такие рамки, как Django, вписываются в это?

5 ответов


Django, будучи приятным, всеобъемлющим и хорошо поддерживаемым, иногда слишком много для небольшого веб-приложения. Django хочет, чтобы Вы играли по его правилам с самого начала, вам придется избегать таких вещей, как базы данных и админ-панели, если они вам не нужны. Также проще, с Django, следовать его макету проекта, даже если он слишком сложен для простого приложения.

так называемые микро-фреймворки могут вам больше подходить для вашего небольшого приложения. Они построены на противоположном. принцип: используйте минимум функций сейчас, добавьте больше, как вам нужно.

  • колбы основан на библиотеке Werkzeug WSGI и шаблонах Jinja2 (последний переключаемый), широко документирован (с Примечания, касающиеся virtualenv и прочее) и хорошо подходит для малых и больших приложений. Он поставляется в комплекте с сервером автоматической перезагрузки dev (нет необходимости в Apache на вашем компьютере dev) и интерактивным отладчиком Werkzeug. Есть расширения для таких вещей, как HTML-формы и база данных ORM.

  • бутылки настолько мал, насколько может получить microframework, состоящий из 1 (одного) файла, включая dev-сервер. Поместите его в папку проекта и начать взлом. Встроенный механизм шаблонов SimpleTemplate переключается, но сервер dev более flakier по сравнению с Flask. Документация менее полная, и, на мой взгляд, все это менее отшлифовано и удобно, как колба.

в обоих случаях вы используете dev server локально, а затем развертываете с помощью WSGI, серверный интерфейс для веб-приложений Python, которые поддерживают обе платформы. Существует много способов развертывания приложения WSGI, Apache mod_wsgi будучи одним из популярных.

Я бы полностью пошел с колбой, если одна зависимость (бутылка) не лучше трех (колба, Jinja2 и Werkzeug).

(есть много других фреймворков, так что дождитесь своих пользователей приходите и расскажите о них. Я бы посоветовал избегать web.py: он работает, но полон магии и неэлегантен по сравнению с колбой или бутылкой.)


один из способов быстро добраться до работы webapp-это сначала понять, а затем изменить что-то вроде App Engine "гостевая книга" пример. Это имеет то преимущество, что большая часть необходимой в противном случае скуки запуска веб-сервера и настройки сервера базы данных (при условии, что вам нужна настойчивость) делается для вас. App Engine также обеспечивает довольно гибкую среду разработки. Это, конечно, не единственный способ пойти, и я признаю предвзятость в рекомендации, но это довольно низкое трение.

сценарии GCI вряд ли остались в прошлом, хотя это не то, что делают крутые дети. CGI имеет преимущество и проклятие, подвергая больше сырой сантехники. Это заставляет вас много понимать о примитивной (в низкоуровневом смысле) веб-архитектуре, но это также немного большой кусок, чтобы жевать, если у вас есть непосредственная проблема для решения, которая может быть решена более простыми средствами.


похоже, что большинство веб-разработок python, похоже, выполняются фреймворками в эти дни. Есть несколько причин для этого:

  1. множество зрелых инструменты. Django имеет встроенную пользовательскую аутентификацию, встроенное управление базами данных, встроенные сеансы, встроенный почти все ORM, который позволяет легко поддерживает пару баз данных.

  2. встроенный веб-сервер. Большие фреймворки python, такие как django и pylons, встроены в веб-серверы. Джанго имеет очень простой веб-сервер python manage.py startserver (Это просто), что делает его чрезвычайно легко создавать и отлаживать приложения. Он однопоточный, поэтому удаление отладчика в него безболезненно

  3. огромные общины. Если у вас есть вопрос django, на него ответят очень быстро, так что сообщество огромно.

учебник django познакомит вас со всеми основными аспектами развития. Это всего 4 страницы, и вы сможете получить свое приложение идти намного проще, чем читать, учиться и возиться с настройкой apache. https://docs.djangoproject.com/en/dev/intro/tutorial01/

хотя django на данный момент может быть излишним, если ваше приложение просто будет 1 формой и скриптом для ее обработки. Из-за своей безшовной рамки испытания довольно легко вырасти любой проект. Я никогда не использовал колбу или бутылку или другие microframeworks, но я бы иметь в виду, где ваш проект будет в будущее.

Что касается того, где django вписывается в это, это полная структура стека, охватывающая презентацию (шаблоны), управление данными (сервер orm), аутентификацию, промежуточное ПО, формы ... все необходимое для создания полностью инклюзивного веб-приложения. Django и почти все другие фреймворки python реализуют стандарт wsgi. Это интерфейс, который позволяет взаимодействовать между веб-серверами. http://en.wikipedia.org/wiki/Web_Server_Gateway_Interface это довольно сухой, и вам никогда не придется напрямую взаимодействовать с ним. Вот что эти рамки делают под капотом.


зачем настраивать и поддерживать свой собственный веб-сервер, если вы можете использовать app engine. Он имеет отличный SDK для тестирования вашего кода. Вот пример https://developers.google.com/appengine/docs/python/gettingstarted/handlingforms

и Джанго вы найдете здесь:https://developers.google.com/appengine/docs/python/gettingstarted/templates Я предпочитаю использовать Jinja для шаблонов.


Django поставляется со своим собственным сервером, но в вашем случае я бы рекомендовал apache и mod_python, поскольку это довольно простой сайт, который вы строите.

настройка Apache-это легкий ветерок, и простой поиск в интернете должен дать вам все, что вам нужно. Вы можете найти более подробную информацию о mod_python здесь прочитайте немного об этом, а затем google после учебника, который соответствует вашим потребностям.