Задать вопрос
  • С чего начать изучение веб разработки на Python, человеку абсолютно не знакомому с backend?

    @Masterme
    Работа с веб отличается от работы с не-веб одной простой вещью:
    - сервер (апач, нжинкс и т.п.) получает запрос (а запрос - это строка) от браузера,
    - сервер обращается к приложению, передавая ему эту строку как аргумент,
    - приложение возвращает результат (тоже строку),
    - сервер отдаёт полученную строку в браузер.
    Конкретно для питона такое подключение скрипта к веб-серверу решается с помощью WSGI.
    Как это сделать. В настройках веб-сервера вы указываете документ_рут вашего приложения и скрипт с колбэком. Конфигурация для апача:
    <VirtualHost *:80>
         ServerName mysite
         DocumentRoot /var/sites/mysite/public
         WSGIScriptAlias / /var/sites/mysite/script.wsgi
     </VirtualHost>

    Колбэк - это функция в глобальном неймспейсе, называющаяся всегда application. Выглядит она примерно так:

    def application(environ, start_response):
        status = '200 OK' 
        output = 'Hello World!'
    
        response_headers = [('Content-type', 'text/plain'), ('Content-Length', str(len(output)))]
        start_response(status, response_headers)
    
        return [output]

    Когда апач получит запрос - он через wsgi запустит функцию application, а полученный от неё результат выдаст в ответ на запрос.

    Это всё, что нужно для понимания, как обрабатывать http-запросы из питона. Всякие джанги работают на этом же механизме.

    Теперь неочевидный нюанс. Дело в том, что обычно апач в нормальном состоянии отдаёт статику как статику. А если подключить к нему wsgi - то wsgi начнёт перехватывать и запросы к статике тоже. В джанго такая ситуация решается через жопу (что доказывает, что джангодрочеры - альтернативномыслящие), а именно: предлагается создать поддомен для статики и раздавать её сервером без wsgi, нжиниксом каким-нибудь, либо отдавать статику скриптом. Оба варианта, мягко говоря, спорные. Я считаю намного лучше и гибче третий вариант:
    <VirtualHost *:80>
         ServerName mysite
         DocumentRoot /var/sites/mysite/public
         RewriteEngine on
         RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
         RewriteRule (.*) /index.py/$1 [L,QSA,PT]
         WSGIScriptAlias /index.py /var/sites/mysite/script.wsgi
      </VirtualHost>

    (Обсуждается здесь.)
    Ответ написан
    20 комментариев
  • Нужен совет по направлению развития начинающего программиста?

    @Kup9_NpS
    Шесть месяцев назад я нашёл в Интернете книжку "Dive into Python". Странная книжка, толстая, да ещё на не русском языке. Усердно прочитал её, методично и вдумываясь, но таки ничего и не понял. Но что-то не отпускало меня - я пошёл на python.org и стал изучать стандартную библиотеку, старательно, скурпулёзно, от корки до корки. Гугля примеры кода, я наткнулся на пост в блоге одного гуру, где было написано про PEP8. То, что рассказывал этот умудрённый опытом кодер, настолько впечатлило меня, что я словно в припадке безумия бросился зубрить эту конвенцию по написанию питоньего кода. У меня тряслись руки, по телу прокатывали волны возбуждения, я, можно сказать, бился в экстазе всё это время - и теперь могу процитировать наизусть любой пункт, даже если меня разбудить посреди глубокой ночи.
    Новые знания окрыляли меня, я бросился писать (что бы вы подумали?) очередную имиджборду. Я не писал раньше имиджборд, эта была моей первой. По пути пришлось освоить азы вёрстки на html и css, но там всё оказалось совсем не сложно.
    Я плавно двигался вперёд, наращивая функционал. И знаете что? Я упёрся в недостаток производительности. Ну, так мне показалось. Я делал замеры, устранял места с тяжёлым кодом. Тысячи раз запускал ab, но так и не сумел перейти порог в 300 запросов в секунду. Я как-то ожидал большего и был немного разочарован.
    Гугл, снова гугл. Десятки статей и тем на форуме... Довольно быстро я заметил, что люди часто пишут про какие-то "асинхронные веб-сервера". Часто встречались названия Tornado и Gevent. Я прочитал про них подробнее - и был просто ошеломлён. Как мне это раньше не приходило в голову?! Это же, это просто гениально, чёрт меня побери!
    Исходники в ведро, всё переписать! Меня переполняло новое знание, поток мыслей ровно ложился в строчки кода. Я просто не мог остановиться. Чашка кофе... Ещё чашка... Мой небольшой кусочек софта приобретал кристалльную чистоту, я смертельно устал, но продолжал в умилении полировать его зудящими руками, нанося последние штрихи.
    Пять тысяч. Я получил производительность в пять тысяч запросов в секунду. В ту ночь я так и не смог заснуть.
    Наиувлекательнейший мир хай-лоада открылся передо мной. Позже я изучил ещё много классных вещей типа сверхбыстрых асинхронных key-value-хранилищ, или, например, такого необычного подхода к обработке данных, как map-reduce.
    Это уже был другой я, новый, обновлённый. С незашоренным взглядом, с жаждой новых знаний и незнакомых концепций. Я летел вперёд, оставляя за спиной ступень за ступенью.
    За пол-года я сменил несколько мест работы, и моя зарплата взлетела до умопомрачительных сумм. Сотни замечательных мест открыли передо мной свои двери. Любые, самые изысканные девушки проявляли просто чудеса изобретательности, чтобы находиться рядом со мной.
    А ещё, я никогда не забуду тот момент, когда на одной из конференций я впервые в жизни поймал на себе завистливый взгляд. Это был взгляд какого-то сливающегося с толпой неудачника, взгляд преисполненный ненависти, презрения и желчного вожделения, направленного на мой Олимп. Наверное, он всю свою никчёмную жизнь писал на каком-нибудь си-шарпе или там на джаве, проводя долгие дни в одиночестве. И теперь начинал подсознательно догадываться, что долгие годы безуспешно пытался построить замок из навоза.
    Ответ написан
    2 комментария
  • Нужен совет по направлению развития начинающего программиста?

    @wittyrider
    systemd есть людей
    Учите и то и другое, потом сделайте выбор и углубляйтесь в чем то одном.

    p.s. Ваш мозг способен изучать намного больше чем вы себя представляете, поэтому смело начните изучать оба, только тогда вы можете оценит достоинства и недостатки оба языка и сделать выбор, а полученные знание в другом ЯП идет вам в пользу.

    P.S. Не слушайте тех кто предлагает изучать "какой то язык" при этом заявляет что все остальные языки УГ.
    Ответ написан
    Комментировать
  • Нужен совет по направлению развития начинающего программиста?

    @dmitryKovalskiy
    программист средней руки
    За полтора месяца я выучил свой первый язык – Python
    А я выучил C++ за 21 день
    Но так, как я не планирую оставаться фронтенд разработчиком, то дальше хочу изучить javascript
    Вообще противоречите сами себе.
    По сути вопроса - очередной вопрос "Что делать дальше?". Выучите 1 платформу хорошо. Знаете Python? Доучите Django и разберитесь с вебом. Если будете хреново знать Python и PHP - не нужны будете никому. Если хорошо разберетесь с одним стеком технологий - надежды появятся. У вас только ни слова про математическую и алгоритмическую базу. Разберитесь с архитектурой программных продуктов, паттернами. SQL и нормальными формами базы данных. Чтобы пойти стажером - вы должны уметь красиво протащить данные от БД до клиента и красиво отрисовать их.
    Ответ написан
    Комментировать