Какие из известных сервисов и веб приложений построены на фреймворке django
Pinterest (cоциальная сеть)
Использованные технологии:
Python как язык программирования и в качестве фреймворка был выбран Django. Хостинг – Amazon. За основную систему управления базами данных взята MySQL, кэширование объектов выполняет memcached, а коллекций объектов – Redis. Solr используется как поисковая платформа, а Hadoop – для реализации поисковых и контекстных механизмов, анализа данных.
Немного о статистике:
В штате работают более чем 140 сотрудников по последним данным. Около 11-ти миллионов уникальных посетителей в неделю на декабрь 2011. 500 виртуальных машин в EC2, 410 Терабайт пользовательских данных или 80 миллионов различных объектов хранится в Amazon S3. На июль 2013 года Pinterest имеет около 70 миллионов пользователей, согласно французскому агентству Semiocast. Итого, Pinterest становится 4-ой по популярности социальной сетью в США после Facebook, Twitter и LinkedIn.
Disqus (сервис)
Использованные технологии:
Python как язык программирования и в качестве фреймворка был выбран Django. Операционная система – Linux. За основную систему управления базами данных взята PostgreSQL, кэширование объектов выполняет memcached, как и в случае с Pinterest. За балансировку нагрузки отвечает HAProxy, за репликацию данных – Slony.
Немного о статистике:
Instagram (фото- и видео-приложение)
Использованные технологии:
За основную операционную систему взят Ubuntu Linux 11.04. Python как язык программирования в качестве фреймворка был выбран Django. За основную систему управления базами данных взята PostgreSQL, кэширование объектов выполняет опять же memcached, а Redis выступает в качестве дополнительного хранилища данных. За балансировку нагрузки отвечает HAProxy. Проект использует инфраструктуру Amazon, в частности EC2, ELB, Route, S3 и CloudFront. За поисковую платформу взят Solr. Для работы с задачами используется Gearman.
Немного о статистике:
Reddit (новостной сайт)
Использованные технологии:
Python как язык программирования в качестве фреймворка был выбран Pylons. За основную систему управления базами данных взята также PostgreSQL, кэширование объектов выполняет memcached. RabbitMQ используется для автономной обработки данных. За балансировку нагрузки отвечает HAProxy. За поисковую платформу взят Amazon CloudSearch.
Немного о статистике:
Dropbox (облачное хранилище данных)
Использованные технологии:
И Dropbox сервер и клиентское приложение написаны на Python. Клиент использует средства разработки GUI, такие как wxWidgets и Cocoa и другие важные библиотеки Python такие как Twisted, ctypes и pywin32. Dropbox зависит от librsync библиотеки, которая написана на C. Информация о файлах содержится в хранилище, реализованном на базе MySQL. Для хранения самих файлов используется Amazon S3.
Немного о статистике:
Pitchfork (музыкальный электронный журнал)
Использованные технологии:
Python как язык программирования в качестве фреймворка был выбран Django. Хостинг – Amazon. Основной системой управления базами данных была выбрана MySQL. В дополнение используется PostgreSQL. За кэширование объектов отвечает Redis. В качестве поисковой платформы используется ElasticSearch и Solr. Также используются сервисы Amazon (EC2, RDS, SES).
Немного о статистике:
Lanyrd (портал)
Использованные технологии:
Python как язык программирования и в качестве фреймворка был выбран Django. За основную систему управления базами данных взята PostgreSQL, кэширование объектов выполняет memcached. Redis используется в связке с Celery для хранения промежуточных результатов задач, которые выполняет Celery в асинхроном режиме. За балансировку нагрузки отвечает HAProxy. Проект использует инфраструктуру Amazon, в частности S3. За поисковую платформу взят Solr.
Немного о статистике:
Mozilla (программное обеспечение)
Использованные технологии:
Компания Mozilla использует различные языки программирования, в том числе и Python, который используется широко: от написания сборочных скриптов до сайта компании, Webmaker и других компонентов, а также сервера синхронизации – минималистичное WSGI приложение использующее Paste для разворачивания на хостинге и Sqlite3 в качестве базы данных.
Немного о статистике:
На сегодняшний день проектами Mozilla пользуются более 500 миллионов человек. Это весьма большой показатель, если учесть конкуренцию. Проектами Mozilla занимаются более тысячи разработчиков.
Yelp (портал с элементами социальной сети)
Использованные технологии:
За основную операционную систему взят Ubuntu Linux. Python как язык программирования и в качестве фреймворка был выбран Django. За основную систему управления базами данных взята MySQL. Также Yelp использует сервисы Amazon, в частности S3 для хранения логов и фотографий, и EMR. В качестве поисковой платформы используется Solr/Lucene. За балансировку нагрузки отвечает HAProxy и LVS.
Немного о статистике:
Foursquare (социальная сеть с функцией геопозиционирования)
Использованные технологии:
Проект написан на нескольких языках, в том числе и Python, который используется для автоматизации операционных задач и других процессов. CentOS Linux является основной операционной системой. HAProxy отвечает за распределение нагрузки и API-запросов. За основную систему управления базами данных взята MongoDB, кэширование вычислительных процессов выполняет Memcache. Часть информации, а именно пользовательские фотографии, хранится в Amazon S3. Анализом занимается Hadoop. За поисковую платформу взяты Solr и Elasticsearch. Для поиска по гео-индексам используется библиотека s2 от Google в связке с PostGIS. Kestrel отвечает за обработку асинхронных задач.
Немного о статистике:
Штат состоит примерно из 140 сотрудников. По данным за 2013 год проектом занимались около 40 тысяч разработчиков. Пользователей около 45 миллионов. Общее количество чек-инов по всему миру 5 миллиардов, и примерно 3 миллиона добавляется каждый день.
Rdio (музыкальный сервис)
Использованные технологии:
Rdio использует несколько языков программирования. В частности, часть Бэкенда написана на Python и в качестве фреймворка выбран Django. Для хранения информации используется несколько баз данных – MongoDB и MySQL. Redis был выбран в качестве альтернативы memcached.
Немного о статистике:
Google (поисковая система)
Использованные технологии:
Google использует множество языков программирования. Так как создатель Python работал одно время в Google, легко предположить, что и этот язык программирования используется. Так и есть. На Python написана часть YouTube и поискового движка, а также много других компонентов. Вкратце, используется LevelDB как основная система управления базами данных. Также используется Closure для работы с JavaScript, это своего рода набор инструментов, созданный разработчиками Google.
Немного о статистике:
Статистика Google известна всем и везде, но приведем несколько цифр. Ежемесячно через поиск проходит 12,477 миллиардов запросов. Google занимает около 67% поискового рынка Соединенных Штатов. Уникальных посещений за месяц – 191 миллион человек. Штат компании составляет 53,891 человек.
Quora (социальный сервис «Вопросы и ответы»)
Использованные технологии:
Python как язык программирования. Хостинг – Amazon. За основную систему управления базами данных взята MySQL, кэширование объектов выполняет memcached. За балансировку нагрузки отвечает HAProxy.
Немного о статистике:
Штат состоит из 72 сотрудников. Число уникальных посещений за февраль 2014 года составляет более одного миллиона. Ежемесячно сервисом Quora пользуются 1,126,00 людей (данные за 2013).
Подведем итог
Как видите, довольно много известных проектов использует Python / Django и это вполне оправданно. Python – очень интересный современный язык программирование, который сейчас очень быстро набирает популярность, как на западе, так и в рунете. Про преимущества Python / Django мы уже писали ранее небольшую заметку. На данный момент мы наблюдаем большой спрос на программирование на Python / Django, ведь это качество! Спрос на проекты рождает и спрос на специалистов.
Если Вы хотите разработать высоконагруженный проект, то мы рекомендуем рассмотреть Python / Django в качестве технической платформы. Ну а для коллег, если Вы хотите стать программистом или освоить новый язык программирования – Python будет одним из наилучших вариантов.
Новые статьи Чтобы получать наши новые статьи раньше других или просто не пропустить новые публикации — подписывайтесь на нас в Facebook, VK и Twitter.
Курсы по программированию Совсем скоро в нашей бизнес-школе Digitov стартуют курсы: Хочу стать Junior PHP Developer!, Symfony 2. Гибкая разработка и Ruby on Rails. По рельсам к профессиональной разработке. Подписывайтесь на курсы сейчас и сможете купить их со скидкой.
Авторы:
Андрей Астафьев, Middle Project Manager, Компания «SECL GROUP» / «Internet Sales Technologies»
Никита Семенов, президент, Компания «SECL GROUP» / «Internet Sales Technologies»
Django набирает популярность и многие крупные компании используют его для создания веб проектов. Мы подобрали 10 популярных сайтов, написанных на Django.
Django это фреймворк языка Python , который очень сильно облегчает работу над созданием веб проектов. Построение сайтов на этой технологии достаточно удобное, а сайты могут быть любых масштабов и жанров.
Крупнейший видео хостинг YouTube является частью компании Google, которая во многих своих проектах использует язык Python и фреймворк Django. YouTube также не стал исключением и вся эта гигантская платформа написана на этом фреймворке.
Компания Google с давних пор использует язык Python во многих своих продуктах. Они всегда видели потенциал данного языка и старались внедрять его как можно больше и как можно чаще. Компания использует язык Python и фреймворк Django и для своего главного проекта - Поисковика Гугл.
Один из крупнейших в мире сайтов для хранения данных или проще говоря облачное хранилище. DropBox создал новый способ хранения данных: вместо компьютера - на облаке. Dropbox позволяет нам хранить, синхронизировать и делиться почти чем угодно, используя мощь Python.
Инстаграм является одной из наиболее крупных социальных сетей в мире. Он позволяет пользователям выкладывать свои фотографии, лайкать другие и вникать в жизнь не только своих друзей, но и различных знаменитостей по всему миру. Инстаграм является мобильным приложением, но если говорить про его веб версию, то она полностью и целиком построена на Python Django.
Reddit это крупнейший социальный новостной проект. Сами пользователи могут размещать различные статьи, а также комментировать и голосовать за други статьи других авторов. На этом сайте вы найдете тысячи Интернет новостей и споров на различные тематики. Большая часть всего функционала сайта выполнена как раз на Python.
Ресурс Pinterest очень схож с инстаграмом. Здесь пользователи также могут делиться различными фотографиями, но лишь теми фотографиями, которые отвечают их интересам или же их подборке. К примеру, если пользователь ведет Pin про самые быстрые машины, то подписавшись на него вы будете получать кучу фотографий с быстрыми машинами.
В целом Yahoo использует для своих проектов платформу Node.js . Тем не менее, они решили использовать язык Python для создания своих карт. Yahoo Maps это обычная, хорошая карта, которая позволяет вам получить маршрут из точки А в точку B. В странах СНГ данный поисковик не особо популярен, но на западе он является весьма крупным и популярным поисковиком. Карты от Yahoo считаются надежными, поэтому многие люди используют именно их в своих ежедневных поездках.
Spotify - это приложение, которое позволяет вам бесплатно находить, прослушивать и делиться музыкой с друзьями. Приложение очень удобно, так как позволяет быстро находить релевантную музыку и добавлять её к себе в плейлист.
Onion это сатирическая газета, которая также имеет онлайн версию своей газеты. Все публикации, дизайн и вся функциональность их сайта выполнены на Python с использованием Django.
Это лишь небольшая часть всех сайтов, которые были созданы при помощи технологии Django. Если вы знаете еще какие-либо крупные проекты, которые также созданы при помощи этой технологии, то обязательно оставляйте ваш отзыв с ссылкой на проект в комментариях к этой статье!
Больше интересных новостей
Сколько зарабатывают программисты?
10 самых провальных технологических запусков последнего десятилетия
6 новых языков программирования, что достойны вашего внимания
10 классных проектов GitHub на языке Python
Представьте, насколько выше будет ваш шанс сделать свой проект успешным, если применить в нем практики лидеров рынка. Но для этого нужно быть с ними знакомым. В этом материале — примеры проектов, созданных на Django, которые показывают, как этот фреймворк используется в самых разных отраслях.
9. Spotify
Spotify — приложение, которое позволяет находить, слушать и делиться музыкой бесплатно. Оно очень удобное, поскольку позволяет быстро находить нужные треки и создавать плейлисты.
Как и iTunes, Spotify изменил то, как люди слушают музыку и делятся ею. С помощью Spotify получить доступ к своей медиатеке можно с любого устройства. Разработчики выбрали Django по двум причинам:
- Быстрый бэкенд
- Возможности для машинного обучения
Они не только используют возможности Python, но и создают новые. В Spotify также используют Java и C++, но последний — все меньше и меньше.
6. Pinterest
Pinterest очень похож на Instagram. На этом сайте пользователи могут делиться разными фотографиями, но только теми, которые соответствуют их интересам или определенной теме. Например, можно вести доску о самых быстрых автомобилях, подписаться на нее и после этого получать похожие фотографии.
Django — популярный фреймворк в среде платформ социальных медиа, ведь он позволяет работать с большими объемами данных, которые могут обрабатывать тысячи взаимодействий каждую секунду. У Pinterest 250 миллионов активных пользователей, поэтому важно обеспечивать производительность и пропускную способность. Все это есть в Django, что позволяет пользователям Pinterest следить друг за другом, делиться информацией и так далее.
8. Yahoo Maps
В основном, Yahoo использует для своих проектов Node.js. Но для создания карт они решили использовать Python. Yahoo Maps — стандартное решение, которое позволяет проложить маршрут из точки A в точку B. Этот поисковый движок не так популярен в восточных странных, но пользуется популярностью на западе. Он считается надежным, поэтому его часто используют в повседневных поездках.
Представления Post
Следующий шаг — создать набор представлений для Post API. Добавьте следующее в blog/api/views.py:
Давайте поможем разработчикам разобраться, подходит ли фреймворк Django для их следующего проекта. Вполне вероятно — подходит.
Не стоит хвататься за определенный язык программирования или фреймворк лишь потому, что вы пользовались им в вашем предыдущем проекте, или просто потому что он вам хорошо знаком. Так дела не делаются.
Прежде чем приступать к новому проекту, следует оценить, какой язык или фреймворк лучше всего подойдет вам для достижения желаемого результата. Что для вас наиболее важно? Безопасность, скорость разработки, масштабируемость, универсальность, поддержка?
Лучше принять информированное решение перед тем как приступать к работе, чем потом раскаиваться в поспешном (или, хуже того, навешивать на проект костыли в процессе реализации – из-за того, что заранее не озаботились его поддержкой).
Я много лет работал с разными технологиями, имел дело как с мобильной, так и с веб-разработкой, и считаю, что Django предлагает такой полноценный набор возможностей, каких нет ни в одном другом веб-фреймворке.
Понимаю, это громкое заявление. Позвольте мне его обосновать.
«На Django основано множество сайтов, используемых самым активным образом, в частности, Instagram и Pinterest. Даже Facebook использует Django для многих своих утилит. Django зародился в издательской среде, поэтому неудивительно, что данный фреймворк используется на таких сайтах как The Washington Post и Smithsonian Magazine.” — Амит Ашвини, Вице-президент по маркетингу @ Zibtek
Общий взгляд: когда использовать Django
Если хотя бы несколько из нижеприведенных тезизов – про вас (и в списке нет тезисов, с которыми вы категорически не согласны), то, вполне вероятно, Django хорошо подойдет для вашего проекта.
- Вам требуется разработать веб-приложение или серверную часть API.
- Требуется быстро работать, быстро развертывать и вносить изменения в проект по ходу работы.
- По умолчанию приложение должно быть защищено от наиболее распространенных уязвимостей и атак, в частности: CSRF, SQL-инъекции, XSS, кликджекинг, etc.
- В любой момент в приложении может потребоваться масштабирование: как наращивание, так и сокращение.
- В перспективе вы планируете интегрировать новейшие технологии, например, машинное обучение.
- Вам нужно использовать надежный фреймворк, который активно разрабатывается, используется многими топовыми компаниями и ведущими веб-сайтами во всем мире.
- Требуется, чтобы и веб-приложение, и серверная часть API находились в одной и той же базе кода, согласовываясь с «единым источником истины» (принцип DRY)
- Вы не хотите работать непосредственно с запросами к базе данных, и вам нужна поддержка ORM.
- Вы собираетесь пользоваться свободным ПО.
- Если застрянете – то решение придется искать самостоятельно, поэтому вам понадобится хорошая документация и отзывчивое сообщество разработчиков.
Если вы – веб-разработчик, и уже знаете, как веб устроен, то работа с Django пойдет для вас сравнительно гладко. Необходимо понимать, как структурируется Django, и некоторые другие вещи, конечно, тоже – и считайте, что вы готовы.
Сайты, работающие на фреймворке Django
Вы еще сомневаетесь, стоит ли тратить свое драгоценное время, чтобы напрактиковаться с Django? Для начала давайте обсудим, по каким причинам Django может НЕ ПОДОЙТИ для вашего проекта:
Когда не стоит использовать Django
- Вы имеете дело с колоссальным приложением, и оно попросту не умещается в одной базе кода. Возможно, лучше будет разбить ваше приложение на микросервисы. С каждым его уровнем качественнее справится специально выделенная команда. Для каждого конкретного сценария использования подойдут иные технологии. В некоторых таких сценариях может пригодиться и Django, но было бы нецелесообразно полностью разрабатывать такое приложение на Django (равно как и на любом другом отдельно фреймворке).
- Необходимо написать простейшее приложение, в котором не требуется работать с базой данных, выполнять операции с файлами или делать что-либо хоть немного сложное.
Для таких ситуаций лучше подойдут микрофреймворки. Один из наиболее популярных микрофреймворков – Flask, как и Django, он написан на Python. Подобные микрофреймворки доступны и в рамках других технологий, напр. Slim в PHP, Apache Spark в Java, Express.js в Node.js, т.д. - Вы хотите сами написать все с нуля и знаете, что делаете.
- Вы или ваши коллеги совершенно не знакомы с Django/Python, и у вас нет времени и ресурсов на наработку необходимых навыков.
Наилучшее решение в последнем случае – работать с тем, в чем вы лучше всего разбираетесь. Если берешься за новую технологию или фреймворк, то шансы напортачить возрастают многократно.
Причины использовать Django
Фреймворк Django написан на Python:
Знаю, вам это известно.
Поэтому воспользуюсь случаем и подчеркну некоторые ключевые достоинства Django, которые он унаследовал от Python. Буду краток.
Python – один из самых популярных и быстрорастущих языков программирования в мире.
Изучить Python действительно очень просто. Обычно современные разработчики учат первым именно этот язык.
Вышесказанное совершенно не означает, что этот язык – только для начинающих. Python используется и в ультрасовременных технологиях. Python активно применяется в технологическом стеке многих компаний-гигантов, в том числе, Google.
Язык Python отлично подходит для разработки инструментов веб-скрапинга.
Он хорошо взаимодействует с другими языками.
Разработка на Python не означает, что вы будете вынуждены все и вся писать только на Python.
Вы вполне сможете пользоваться библиотеками для многих других языков, в том числе, C/C++/Java.
Python портируемый, его удобно читать.
Python даже может работать на JVM. Познакомьтесь с Jython.
Python широко используется в таких востребованных технологиях как Большие Данные и Машинное обучение.
Вы получаете доступ к огромной библиотеке PyPI.
У Django “Все включено”
Некоторые считают такое обстоятельство “минусом”, а другие – «плюсом». Каждая сторона права по-своему, и я в некоторой степени согласен с обеими.
Это минус, поскольку в такой ситуации фреймворк превращается в монолит.
Я считаю, что, если вам требуются эти возможности, приводящие к формированию монолита, то вам так или иначе придется воспользоваться какой-то другой библиотекой (или написать ее самостоятельно).
Почему бы в таком случае не воспользоваться инструментом, в котором все это уже есть, проверено в боях, функционирует на крупнейших сайтах, активно разрабатывается и обеспечено поддержкой сообщества?
Если вам не требуется большинства возможностей, предлагаемых в Django, то лучше остановиться на каком-нибудь микрофреймворке.
Не изобретать велосипед – вы помните? Потратьте ваше время на то, что действительно важно, а Django пусть сделает все остальное.
Django Admin
Хотя, я и упомянул этот элемент в предыдущем разделе, он заслуживает более пристального внимания. Во многих фреймворках, в частности, Laravel, Yii, т.д., предпринимались попытки упростить работу с админкой. Мне доводилось разрабатывать множество проектов в разных фреймворках, но ни один из них и близко не сравнится с Django по удобству работы с панелью администратора.
Некоторые считают, что Django Admin недостаточно гибок, и для подстройки любой его части под свои нужды требуется приложить массу усилий. На первых порах работы с Django я склонен был с этим соглашаться, но со временем, разобравшись во фреймворке, разубедился в этом. Да, там присутствует своя кривая обучения, но ни секунды, что вы ей уделите, не будет потрачено зря.
На самом деле, Django Admin очень хорошо структурирован. В некоторых моих проектах я использовал админку Django «как есть», а в других полностью заменял ее собственными шаблонами, которые разрабатывал с нуля. В любом случае, на это потребовалось не больше времени, чем на разработку с любым другим известным мне фреймворком.
Основной плюс? Вы получаете «из коробки» права доступа и аутентификацию. На разработку всего этого с нуля у вас ушли бы недели (или, как минимум, несколько дней).
Принцип DRY (Не Повторяйся)
Мне известно множество фреймворков, сторонники которых утверждают, что те действительно соответствуют принципу “DRY”. Я работал с многими такими фреймворками, но ни в одном из них принцип «DRY» не реализован как следует.
К сожалению, в большинстве фреймворков принципу “DRY” просто не уделяют достаточного внимания. На мой взгляд, если вы пишете приложение, которое собираетесь регулярно обновлять (а это можно сказать о большинстве современных приложений), то вы должны следовать принципу DRY во избежание проблем.
Так, в Laravel приходится писать валидацию для каждой процедуры отдельно. Такова же ситуация и с большинством других фреймворков. Чтобы ваш код соответствовал принципу DRY, нужно потрудиться. Сложно это отслеживать, особенно если вы работаете в команде.
В свою очередь, фреймворк Django спроектирован таким образом, что нарушить принцип DRY там обычно выходит только нарочно.
Так быть не должно, верно? Рассмотрим пример.
Вот как в Django устроена валидация и миграция базы данных
Создаем класс Model с требуемыми полями. Указываем все необходимые нам дополнительные валидации и ограничения.
Миграции генерируются единственной CLI-командой: `python manage.py makemigrations`.
Изменения вносятся в базу данных единственной CLI-командой: `python manage.py migrate`.
Валидации и ограничения автоматически проверяются при каждой CRUD-операции — идет ли речь о Django Admin или о Django REST Framework. Писать валидации заново вам не придется.
Тот же самый класс модели используется для генерации представлений Django Admin CRUD. Не требуется дописывать никаких собственных HTML/CSS.
Сравните эти условия с любым другим фреймворком – и, думаю, вам бы нигде не удалось сделать ничего подобного всего в несколько следующих строк кода:
Здесь речь не только о том, чтобы “не повторяться”. Такой подход уберегает вас от багов в перспективе. Все мы оказывались в ситуациях, когда довелось изменить что-то в одном месте, а в другом месте заменить забыли – и это выяснилось лишь после того, как у множества пользователей начались проблемы.
В Django, возвращаясь к вышеприведенному коду, если вам когда-нибудь придется заменить `max_length` поля на что-нибудь другое – просто сделайте это здесь. Изменение автоматически применится к валидации всех маршрутов и к базе данных.
Объектно-реляционное отображение в Django
Django предоставляет полнофункциональный механизм ORM «из коробки».
Я работал со множеством инструментов ORM в разных технологиях, в том числе, в Eloquent, greenDAO, Yii AR, т.д. Во всех из них простейшие запросы обрабатываются довольно хорошо, но рано или поздно мне приходилось писать те или иные запросы с нуля, поскольку механизм ORM не справлялся с конкретным практическим случаем.
С Django ORM в такие ситуации я пока не попадал. Он сработан настолько хорошо, что вы просто можете забыть, что работаете с запросами к базе данных. Именно таким и должно быть объектно-реляционное отображение. Ниже приведены некоторые примеры Django ORM:
Стремительная разработка
Этим любят похвастаться создатели практически любого веб-фреймворка, и, пожалуй, все они действительно правы – смотря какой смысл мы вкладываем в слово «стремительная».
Правда, с Django некоторые вещи делаются уморительно быстро. Вы уже видели, как легко мы смогли определить UI админки, таблицу базы данных и выполнить валидацию.
Это была всего лишь верхушка айсберга.
В принципе, стремительная разработка – это не фича как таковая, а лишь органичное следствие присутствующих в Django DRY, ORM, шаблонизатора и философии «все включено».
Безопасность фреймворка Django
Давайте признаем, иногда разработчики ленятся. Я – так точно. Время от времени я прокрастинирую, откладывая решение критически важных задач. Тут-то и могут возникнуть различные уязвимости.
Мне особенно нравится, что Django не идет на послабления по поводу безопасности, чтобы ускорить темп разработки. Функции безопасности активируются по умолчанию, поэтому совершенно не важно, ленивы вы или нет.
Опенсорс, отличная документация, огромное сообщество и пр.
Поскольку Django – опенсорсный и безумно популярный фреймворк, вокруг него сформировалось отзывчивое сообщество. Думаю, вы в курсе, каковы достоинства свободного ПО – так вот, все они присущи и Django.
Официальной документации Django более чем достаточно любому разработчику. Если застрянете – найти решение не составит труда.
У вас уже могло сложиться впечатление, что в Django создано множество собственных библиотек, поэтому, возможно, удивитесь, что специальной библиотеки для тестирования здесь не сделано. Нет, не подумайте, что фреймворк Django не поддерживает тестирование – поддерживает, еще как. Просто, следуя принципу «Не повторяйся» было бы бессмысленно разрабатывать библиотеку для тестирования, когда отличная библиотека такого рода уже есть в самом Python. Django отлично с ней взаимодействует. Кроме того, он очень хорошо сочетается и со сторонними библиотеками, например, pytest.
Современное состояние Django и другие популярные фреймворки
Итак, я по максимуму постарался осветить те проблемы, с которыми сталкивался при работе с другими фреймворками и сравнить эти фреймворки с Django. Поработав с Yii, CodeIgniter, WordPress, CS-Cart, Laravel, т.д., я пришел к выводу, что Django гораздо лучше любого из них.
Однако, это только мое мнение.
Если вам нравится статистика, то вот ежегодное исследование Stack Overflow, где Django фигурирует в числе самых излюбленных и востребованных фреймворков:
Кроме вышеупомянутого опыта работы с PHP, я также рапзрабатывал приложения под Android на Java, клиентские приложения на React.js. Во всех этих случаях я потратил изрядное количество времени на рефакторинг базы кода, подыскивая наилучшую архитектуру, через пару месяцев увязая в проблемах с масштабируемостью и вновь принимаясь за рефакторинг.
Недавно я переписал с Laravel на Django одно приложение, которое было у меня в продакшене более года. Мне удалось развернуть новую базу кода менее чем за 10 дней, написав для этого минимальное количество кода (говорю же: сложность уменьшается!) В обратном направлении подобная операция определенно заняла бы более месяца.
Если вы попытаетесь напрямую сравнивать другие фреймворки с Django, это вам ничего не даст.
Контроль производительности может показать, что фреймворк на Java быстрее Django. Вы можете хорошо разбираться в PHP, так что, возможно, разработка приложения на Django пойдет у вас быстрее, чем на знакомом вам PHP-фреймворке. В случае с совсем простым приложением настройка Django может показаться вам слегка утомительной – конечно, гораздо проще написать файл со скриптами. Результаты опросов могут разниться в зависимости от того, среди какой аудитории они проводились.
Однако, здесь мы рассуждаем не только о фреймворках, относящихся к другим технологиям. Даже если вы знакомы c Python, возможно, микрофреймворк Flask покажется вам более удобным и желательным. Придется задуматься, на котором из них остановиться.
Мой совет – просто не сравнивайте их.
Вывод
На мой взгляд, в Django удалось идеально сбалансировать производительность, архитектуру, уровень сложности при разработке, безопасность и масштабируемость.
Если вы начинаете писать проект с нуля – настоятельно рекомендую попробовать сделать его с Django.
11. Disqus
Django — один из самых значимых проектов, созданных с помощью Python. Он позволяет реализовывать комментарии и дискуссии на сайтах, анализировать аудиторию, активность, а также менять то, как отображается реклама для них.
Использование Disqus не только позволило команде быстрее создать сайт, но также стремительно масштабировать его. Сегодня разработчики используют и другие фреймворки, но Django остается выбором №1 благодаря отличному сообществу и готовым компонентам.
С помощью Django команда Disqus также создала Sentry — внутренний инструмент для отслеживания багов, отладки и исправления критических ошибок.
Создание API для Post
После базовой настройки можно приступать к созданию полноценного API для блога с эндпоинтами для постов, комментариев и категорий. Начнем с API для Post.
7. Quora
Quora — портал, на котором пользователи могут задавать и отвечать на вопросы. С активностью они приобретают рейтинг, который позволяет активнее привлекать ответы на свои вопросы.
Требования
У вас в системе должен быть установлен Python 3, желательно 3.8. Также понадобится опыт работы с REST API. Вы должны быть знакомы с реляционными базами данными, включая основные и внешние ключи, модели баз данных, миграции, а также отношения многие-к-одному и многие-ко-многим.
Наконец, потребуется опыт работы с Python и Django.
URL-паттерны
С моделью, сериализатором и набором представлений для User финальным шагом будет создание эндпоинтов (которые в Django называются URL-паттернами) для каждого представления.
В первую очередь добавьте следующее в blog/api/urls.py (этот файл тоже нужно создать):
Здесь импортируется функция path и также коллекция представлений приложения api .
Функция path создает элемент, который Django использует для показа страницы приложения. Для этого Django в первую очередь ищет нужный элемент с соответствующим URL (например, users/ ) для запрошенного пользователем. После этого он импортирует и вызывает соответствующее представление (то есть, UserList )
Последовательность указывает на целочисленное значение, которое является основным ключом ( pk ). Django захватывает эту часть URL и отправляет в представление в виде аргумента-ключевого слова.
Прежде чем можно будет взаимодействовать с этими URL-паттернами (и теми, которые будут созданы позже) их нужно добавить в проект. Добавьте следующее в blog/blog/urls.py:
В итоге класс модели Django сериализуется с помощью UserSerializaer . Он предоставляет данные представлениям UserList и UserDetail , доступ к которым можно получить с помощью паттернов users/ и users/ .
1. YouTube
Крупнейший видеохостинг — это часть компании Google, которая использует Python и Django во множестве своих проектов. YouTube — не исключение, ведь вся платформа написана с использованием этого фреймворка.
Изначально он создавался с помощью PHP, но по мере роста пришлось быстро перестраиваться, что и привело к тому, что разработчики присоединились к сообществу Django. И этот выбор был вполне оправдан, поскольку переход на новую технологию не только не остановил рост аудитории, но и привел к появлению новых особенностей.
Почему крупные компании выбирают Django?
При создании сайта чаще всего требуется стандартный набор компонентов:
- Инструменты для управления аутентификацией пользователя (создание аккаунта, логин и так далее).
- Панель управления своим аккаунтом.
- Загрузка и скачивание файлов и так далее.
Если эти задачи повторяются из раза в раз, почему бы не упростить их и не уменьшить стоимость разработки? Веб-фреймворки — это коллекции компонентов, которые и предназначены для этих целей.
Одним из таких фреймворков является Django, который неустанно набирает популярность и используется даже в крупных компаниях.
Django считается лучшим веб-фреймворком на Python. Он подходит для создания сайтов, работающих с базами данными.
Изучая следующие примеры, разберем основные достоинства использования этой платформы. Используйте их не только как примеры, но также и как источники вдохновения для собственных проектов.
4. Instagram
Instagram — одна из крупнейших социальных сетей в мире. Она позволяет публиковать фотографии и погружаться в жизни не только друзей, но и знаменитостей со всего мира. В первую очередь это мобильное приложение, но если говорить о веб-версии, то она была создана с помощью Django.
Изначально Python был ядром технологического стека приложения. Команда использовала несколько версий языка и в конце остановилась на Python 3.5.
Instagram обрабатывает большие объемы данных и взаимодействий пользователей. Использование Django упрощает это все и позволяет сосредоточиться на UI и UX.
Именно большое количество инструментов позволило сооснователям Instagram разработать первую версию приложения всего за две недели. Майк Кригер рассказывал, что им было легко стартовать с Django, ведь последний не требовал опыта и не предполагал широких возможностей в плане кастомизации.
Instagram начал быстро расти и компания искала новые технологии, чтобы задействовать их, но в итоге они приняли решение остаться с Python и Django.
Бывший глава разработки рассказал:
Мы смогли добраться до отметки в сотни миллионов пользователей с помощью Python и Django, поэтому решили продолжать в том же направлении. Одна из причин — наши инженеры действительно любят Python. Поэтому они и хотят работать у нас.
Более того Instagram использует Sentry для мониторинга и составления отчетов о багах. И все это происходит в реальном времени.
12. Washington Post
Изначально Django был создан для поддержки контентного приложения для Lawrence Journal-World, The Washington Post, The Guardian, The New York Post и других сайтов новостных изданий. Django работает быстро и отлично масштабируется, что позволяет обрабатывать запросы аудитории любого масштаба.
Модель Post
В blog/api/models.py создайте модель Post , которая наследуется от класса Model из Django и определите ее поля:
Типы полей соответствуют таковым в реляционных базах данные. Можете ознакомиться со страницей Models на официальном сайте фреймворка.
В этом случае пользователь может иметь много статей, но у поста может быть всего один владелец. Поле owner может быть использовано во фронтенд-приложении для получения пользователя и отображения его имени в качестве автора поста.
Аргумент related_name позволяет задать другое имя доступа к текущей модели ( posts ) вместо стандартного ( post_set ). Список постов будет добавлен в сериализатор User на следующем шаге для завершения отношения многие-к-одному.
Каждый раз при обновлении модели запускайте следующие команды для обновления базы данных:
Поскольку мы работаем с моделями Django, таким как User , посты можно изменить из административной панели Django, зарегистрировав ее в blog/api/admin.py:
Позже их можно будет создавать и через графическое представление API.
Также можно выбрать owner среди существующих пользователей. При создании поста в API пользователя выбирать не нужно. Owner будет задан автоматически на основе данных залогиненного пользователя. Это настроим в следующем шаге.
Почему веб-разработка на Django?
Когда у вас только появилась идея, нужно всего несколько минут, чтобы придать ей форму с помощью Django. Тот факт, что Django находится в свободном доступе, значительно упрощает процесс разработки и помогает разработчиков думать о дизайне и функциях.
Также это идеальный инструментов для стартапов. У Django есть множество преимуществ и недостатков, которые не были упомянуты в этом материале. Однако для проекта с дедлайном этот фреймворк подходит чуть ли не лучше всех. А для ускорения процесса разработки можно использовать собственные параметры.
API-сервисы позволяют приложениям общаться с другими приложения с помощью данных, передаваемых в формате JSON. Достаточно создать и использовать его данные из любого API-клиента или фронтенд-приложения.
Django REST Framework — это набор инструментов для создания REST API с помощью Django. В этом руководстве рассмотрим, как правильно его использовать. Создадим эндпоинты(точки доступа к ресурсам) для пользователей, постов в блоге, комментариев и категорий.
Также рассмотрим аутентификацию, чтобы только залогиненный пользователь мог изменять данные приложения.
Вот чему вы научитесь:
- Добавлять новые и существующие модели Django в API.
- Сериализовать модели с помощью встроенных сериализаторов для распространенных API-паттернов.
- Создавать представления и URL-паттерны.
- Создавать отношения многие-к-одному и многие-ко-многим.
- Аутентифицировать пользовательские действия.
- Использовать созданный API Django REST Framework.
15. Mozilla
Один из популярнейших браузеров, Mozilla, должен обрабатывать миллионы запросов каждый месяц. Учитывая это количество, нет ничего удивительного, что команда решила перейти с PHP + CakePHP на Python + Django. Сайт поддержки и дополнений Mozilla сегодня работают с помощью Django.
Представления для User
Есть несколько способов создавать представления в REST Framework Django. Чтобы получить возможность повторного использования кода и избегать повторений, используйте классовые представления.
REST Framework предоставляет несколько обобщенных представлений, основанных на классе APIView . Они представляют собой самые распространенные паттерны.
Например, ListAPIView используется для эндпоинтов с доступом только для чтения. Он предоставляет метод-обработчик get . ListCreateAPIView используется для эндпоинтов с разрешением чтения-записи, а также обработчики get и post .
Для создания эндпоинта только для чтения, который возвращал бы список пользователей, добавьте следующее в blog/api/views.py:
В первую очередь здесь импортируется generics коллекция представлений, а также модель User и UserSerialized из предыдущего шага. Представление UserList предоставляет доступ только для чтения (через get ) к списку пользователей, а UserDetails — к одному пользователю.
Названия представлений должны быть в следующем формате: List и Details для коллекции объектов и одного объекта соответственно.
Для каждого представления переменная queryset содержит коллекцию экземпляров модели, которую возвращает User.objects.all() . Значением serializer_class должно быть UserSerializer , который и сериализует данные модели User .
Пути к эндпоинтам будут настроены на следующем шаге.
Настройка проекта
Для создания нового API-проекта для начала создайте виртуальную среду Python в своей рабочей директории. Для этого запустите следующую команду в терминале:
В Windows это будет source env\Scripts\activate .
Не забывайте запускать все команды из этого руководства в виртуальной среде. Убедиться в том, что она активирована можно благодаря надписи ( env ) в начале строки приглашения к вводу в терминале.
Чтобы деактивировать среду, введите deactivate .
После этого установите Django и REST Framework в среду:
Создайте новый проект «blog» и новое приложение «api»:
Из корневой директории «blog» (там где находится файл «manage.py»), синхронизируйте базу данных. Это запустит миграции для admin , auth , contenttypes и sessions .
Вам также понадобится пользователь admin для взаимодействия с панелью управления Django и API. Из терминала запустите следующее:
Установите любой пароль (у него должно быть как минимум 8 символов). Если вы введете слишком простой пароль, то можете получить ошибку.
Для настройки, добавьте rest_framework и api в файл конфигурации (blog/blog/settings.py):
Добавление ApiConfig позволит добавлять параметры конфигурации в приложение. Другие настройки для этого руководства не потребуются.
Наконец, запустите локальный сервер с помощью команды python manage.py runserver .
Сериализатор для User
REST Framework Django использует сериализаторы, чтобы переводить наборы запросов и экземпляры моделей в JSON-данные. Сериализация также определяет, какие данные вернет API в ответ на запрос клиента.
Пользователи Django создаются из модели User , которая определена в django.contrib.auth . Для создания сериализатора для модели добавьте следующее в blog/api/serializers.py (файл нужно создать):
По примеру импортируйте модель User из Django вместе с набором сериализаторов из REST Framework Django.
Теперь создайте класс UserSerializer , который должен наследоваться от класса ModelSerializer .
Определите модель, которая должна ассоциироваться с сериализатором (model = User). Массив fields определяет, какие поля модели должны быть включены. Например, можно добавлять поля first_name и last_name .
Класс ModelSerializer генерирует поля сериализатора, которые основаны на соответствующих свойствах модели. Это значит, что не нужно вручную указывать все атрибуты для поля сериализации, поскольку они вытягиваются напрямую из модели.
Этот сериализатор также создает простые методы create() и update() . При необходимости их можно переписать.
Ознакомиться подробнее с работой ModelSerializer можно на официальном сайте.
14. Eventbrite
Eventbrite — популярная платформа для управления и продажи билетов на мероприятия. Изначально она была создана на чистом Python, но позже разработчики переключились на Django, чтобы справляться с ростом аудитории и объемом взаимодействия между ними.
2. Поиск Google
Google использует Python во множестве своих продуктов. Компания всегда видела потенциал этого языка и пыталась задействовать его как можно чаще. Так, Python в целом и Django в частности используются для главного проекта компании — поиска Google.
13. Bitbucket
Облачный Git-репозиторий привлек миллионы разработчиков в 2008 году. С 17 миллионами запросов и 6 млн репозиториев в год это одно из крупнейших веб-приложений на Django.
Команда Bitbucket выбрала Django по нескольким причинам: тысячи разработчиков в сообществе и готовые решение.
5. Reddit
Reddit — крупнейший в мире проект с элементами новостной ленты и социальной сети. Пользователи могут публиковать разные посты, комментировать их и оценивать посты других. Большая часть сайта выполнена с помощью Python.
10. The Onion
The Onion — еще один пример отличного сервиса, созданного с помощью Django. Это сатирическое издание, у которого есть онлайн-версия. Публикации, дизайн и все функции созданы с помощью Django и Python.
Сегодня это одна из самых известных и читаемых газет в мире.
Сериализатор Post
Чтобы добавить модель Post в API, нужно повторить шаги добавления модели User .
Сначала нужно сериализовать данные модели Post . В blog/api/serializers.py добавьте следующее:
Импортируйте модель Post из приложения api и создайте PostSerializer , который будет наследоваться от класса ModelSerializer . Задайте модель и поля, которые будут использоваться сериализатором.
ReadOnlyField — это класс, возвращающий данные без изменения. В этом случае он используется для возвращения поля username вместо стандартного id .
Дальше добавьте поле posts в UserSerializer . Отношение многие-к-одному между постами и пользователями определено моделью Post в прошлом шаге. Название поля ( posts ) должно быть равным аргументу related_field поля Post.owner . Замените posts на post_set (значение по умолчанию), если вы не задали значение related_field в прошлом шаге.
PrimaryKeyRelatedField представляет список публикаций в этом отношении многие-к-одному ( many=True указывает на то, что постов может быть больше чем один).
Если не задать read_only=True поле posts будет иметь права записи по умолчанию. Это значит, что будет возможность вручную задавать список статей, принадлежащих пользователю при его создании. Вряд ли это желаемое поведение.
Обратите внимание на то, что список posts — это, по сути, список id. Вместо этого можно возвращать список URL с помощью HyperLinkModelSerializer .
3. Dropbox
Один из крупнейших в мире сайтов для хранения данных, Dropbox, создал новый способ хранения данных — в облаке. Благодаря нему пользователи имеют возможность получать доступ к файлам из любого места (только находясь онлайн, конечно). Dropbox подходит для хранения документов, видео, изображений и других данных. И все это благодаря возможностям Python.
Фреймворк использовался для создания бэкенда и клиентской части, что позволило команде разработчиков выпустить продукт довольно быстро. С помощью Django разработчики добились того, что у пользователей есть возможность смотреть историю, синхронизировать аккаунт между устройствами и делиться своими файлами.
Создание API для пользователей
Теперь с пользователем «admin» можно переходить к созданию самого API. Это предоставит доступ только для чтения списку пользователей из списка API-эндпоинтов.
Читайте также: