• Уместно ли гарантировать атомарность транзакции в моём случае?

    @pyHammer
    @register.simple_tag
    def get_brand():
        '''
        set brand name instead of 'Главная' in the navbar
        '''
        user_profile, _ = UserProfile.objects.get_or_create(user_id=1)
        return user_profile.brand
    Ответ написан
  • Я посмотрел видеоуроки по django, но везде делали сайты просто с текстом на пустой странице, а как сделать на странице интерфейс и дизайн?

    @soltanoffsu
    Backend python developer (Скорее делаю вид)
    Знаниями одного лишь HTML и CSS тут не обойтись. У джанги есть свой шаблонизатор (либо Jinja), который позволяет делать вкрапления в HTML, доставая какую-то логику из ваших файлов views.py. К слову, бизнес логику приложения приянто разделять от контроллеров, но для маленького проекта можно и во views.py писать.
    Вопрос очень обширный, могу лишь посоветовать канал на YouTube (Олег Молчанов). Автор очень доступно для новичков, показывает все на примерах.
    Ответ написан
  • Как сегодня писать сайты?

    php666
    @php666
    PHP-макака
    Чем более идиотский вопрос, тем активнее местные гуру пишут многокилометровые текста, вставляют картинки с архитектурой и рассказывают о индустрии сайтостроительства.

    А вопрос вопрошает вчерашний школьник.

    У программистов критического мышления просто нет.
    Ответ написан
  • Почему Django views 'не видит' файлы в директории проекта?

    Tomio
    @Tomio
    backend developer (python, php)
    Попробуйте заменить относительный путь к папке
    p_s = './static/csv_s/as_is/'
    path_start = os.path.dirname(p_s)
    p_f = './static/csv_s/to_be/'
    path_finish = os.path.dirname(p_f)

    на абсолютный
    cur_dir = os.path.dirname(os.path.abspath(__file__))
    path_start = '{}/static/csv_s/as_is/'.format(cur_dir)
    path_finish = '{}/static/csv_s/to_be/'.format(cur_dir)
    Ответ написан
  • Почему Django views 'не видит' файлы в директории проекта?

    @bacon
    Посмотрите как в settings.py вычислено BASE_DIR и как оно потом используется, приведите все свои пути к абсолютным, аналогичный способом.
    Ответ написан
  • Как выровнять кнопки по нижнему краю?

    nuffyweb
    @nuffyweb
    Блоку .card-body добавьте свойства:
    "display: flex;
    flex-direction: column;"
    А у блока с кнопками вместо "mb-auto": "mt-auto"

    вот так
    Ответ написан
  • Как запомнить классы, функции и методы в программировании и сэкономить время?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Не нужно заучивать, нужно запоминать что есть подобная функция где-то в этом пакете. При том, что производительность рядового программиста 5-8 строк в час, всегда есть время найти нужный функционал по ассоциации через поиск.
    Ответ написан
  • Вы в браузере набрали адрес сайта, нажали Enter. Расскажите максимально подробно о технических процессах происходящих далее?

    Deerenaros
    @Deerenaros
    Программист, математик, задрот и даже чуть инженер
    Действительно, уважаемый. Это слишком. Вряд ли я затрону все тонкости, но попробую наметить примерный путь:

    0) Пользователь вбивает в адресную строку браузера адрес сайта (нажимая клавиши на клавиатуре, которые замыкают определённую дорожку в матрице, по которой происходит определение нажатой клавиши, что через шину USB в какой-то момент передастся OS, где это поймает HID-драйвер и вызовет определённое прерывание, что OS передаст как событие/или_ещё_как в программу, которая вызовет соотвествующую функцию из API менеджера окон, которая изменит содержимое строки и в результате когда-то будет перерисован UI-элемент, а если нажат был Enter, то начнётся следующее).
    1) Браузер вытащит из input'а строку с запросом и посмотрит, похоже ли это на адрес. Если да, то добавит недостающие уточнения (например, http или file протокол, порт и подобные довольно стандартные вещи). Если нет - то скорее всего создаст запрос в поисковую систему, установленную по умолчанию (я более не буду опускаться до таких бессмысленных деталей, как вызовы API-функций, иначе я буду набирать это сообщение ОЧЕНЬ долго). В любом случае на выходе мы по сути получим URL, который надо загрузить. Протокол file:// мы рассматривать не будем, ftp далеко не везде есть, https:// на не хватит вечности, так что остановимся на http, который по сути есть tcp/ip по умолчанию на 80 порту с определённым форматом общения.
    2) Окей, url есть. Теперь нам нужен адрес, к которому обращаться. Так как http это tcp/ip - нам нужен ip адрес. Здесь нам помогают dns-сервера. Обычно, нормальный провайдер устанавливает у себя кэш-сервера dns, которые не обращаются по стопицот раз за vk.com к ответственному серверу com-зоны. Давайте не будем отвлекаться на то, как происходит там общение, если что - вот (вики тем хороша, что часто содержит внизу релевантные ссылки). Скажу лишь то, что на выходе мы получаем ip адрес(а).
    3) Имея адрес мы можем запросить страницу. Собственно, всё что после первого слэша - это как-бы параметры для http-сервера: какую именно страницу запрашивать, он всё же не телепат. Конечно, можно было бы немного схитрить и отправить читать про tcp/ip, но ведь существует и shared-hosting. Ограничемся лишь его упоминанием. Собственно, по полученному адресу отправляется GET запрос, который и обрабатывает сервер, находящийся по полученному IP-адресу.
    4) Сервер же, получив адрес, начинает распарсивать строку, медленно вытягивая нужные данные из баз-данных и настроек, выполняются сотни скриптов, иногда делается ещё не одна сотня различных запросов на другие сервера (здесь и разного вида метрики и разного вида HADOOP и т.д.). Пройдя сквозь скрипты и темплейторы в самом конце мы получаем html-страницу, готовую к употреблению. Её-то сервер и отправит в ответе (после заголовков, конечно).
    5) Вот и началось самое интересное. Получив html страницу браузер начинает жутко надругаться над CPU, HDD и GPU, попутно сжирая тонны RAM и мусоря в swap. Виной всему нереальные для полного соблюдения стандарты от небезызвестной w3c.org. Для облегчения многие делают костыли, вроде webkit, а некоторые и вовсе забивают на него и пилят свой стандарт с преферансом и картёжницами (впрочем, в последнее время становиться лучше). Здесь снова начинаются сотни вызовов API ОС, windows manager'а и прочих библиотек, вроде boost, qt или libpng. В ходе работы в RAM строится макет, по которому потом строится нечто вроде PDF (тоже сильно векторный), что, потом, обрабатываясь быстрыми шейдерами на GPU, выдаётся на экран. Опять же, многое пропущено, но вряд ли кому-либо, кроме парня в свитере с оленями, действительно интересно, как работает GDI, DirectX или OpenGL.
    6) Ах да, мы же забыли про тысячи js-скриптов, миллионы картинок и анимации с котиками, а также о таких дополнительных плюшках, как flash-player или java-weblets. В кратце, что js, то и flash и java - это виртуалка, со специальной архитектурой. Они, виртуалки, конечно разные (хотя flash и js довольно похожи, ещё бы - ECMAScript один и тот же). JS - самый интегрированный внутрь браузера, он же и самый медленный чисто визуально (ибо последние два имеют доступ к быстрому GPU), хотя самый быстрый в попугаях. Второй постепенно вымирает и представляет из себя, так же как и третий специальную shared-библиотеку, о которой браузер как-нибудь узнал и которой скармливает специальное содержимое помечанное специальным тегом html. Третий уже почти умер и встречается лишь изредка или в каком-нибудь энтерпрайзед со страшным legacy-базой. Ну здесь из сылок разве только гугл. Ибо сколько всего - даже не сообразишь. Да и вообще, эта тема ещё скучнее GDI, DirectX и OpenGL и к свитеру с оленями требуются ещё очки с толстенными стёклами, дающие стопицот к терпению и задроству над матаном. Если в кратце, то в случае JS, всё что было загружено в память и не думает выгружаться и формирует этакое дерево - DOM, над которым с помощью специального API и происходят модификации. При этом, перед тем как исполниться, весь JS-код компилируется, в нативный для VM байт-код. То же самое в общем-то и со вторым и третьим, разве только они не имеют доступа к DOM и организовать его - дело тех ещё костылей. Ах да, забыл ещё про Silverlight (или как оно там пишется), который сдох, не успев родиться. Так же как и Java, жив в серьёзном энтерпрайзе, не поскупившийся не "дешёвую" поддержку MS.
    7) Ну... А дальше пользователь нажимает на нужную гиперссылку и всё по новой.

    За кадром остались такие костыли, как ajax, websockets и прочая асинхронная ересь. С ней всё в миллионы раз сложнее. И к очкам со свитером потребуется ещё и... а чёрт их знает, что они там ещё носят. Ну да ладно, я искренне завидую тем парням (и девушкам), которые разбираются во всей этой машине. Целиком. Ибо это лишь верхушка айсберга. Разбавленная не лучшей памятью и ужасным гуглом.

    P.S. Не бейте сильно за грамматические и синтаксические ошибки. Спеллчекер приказал долго жить, да и 5 утра как никак.

    UPDATE
    На хабр выложили неплохой перевод дающий некоторое представление, как браузер ругается над памятью и процессором. Хотя и весьма поверхностное,
    Ответ написан
  • Где можно найти человека который проверит код?

    @deliro
    Агрессивное программирование
    Значит, смотри. Просто так код никто проверять не будет, особенно тщательно. Но так как программисты — в основном закомплексованные люди с диким ЧСВ, им нужно вбрасывать так, чтобы они были несогласны, т.к. показать свою уникальность и важность — для них необходимость.

    * Создаёшь вопрос с посылом "я тут накидал код, он охуенен". В подпись ставишь "Senior bla-bla-bla developer", накидываешь в "О себе" кучу фейковых сертификатов, которые подтверждают то, какой ты умница и обязательно вставляешь, что у тебя есть вышка и что она просто необходима для того, чтобы быть настоящим хорошим программистом

    * Ждёшь несколько часов

    * Ловишь миллионы горячих пятых точек, с пеной у рта доказывающих свою правоту

    * Выделяешь объективные недочёты

    * PROFIT!
    Ответ написан
  • Почему coverage.py показывает 80% протестированного кода модели в Django проекте без единого теста?

    tumbler
    @tumbler Куратор тега Django
    бекенд-разработчик на python
    У Вас показаны покрытыми те строки, которые выполняются при импорте модуля. Объявление класса и класс-атрибутов. Вот отсюда и 80%.
    Ответ написан
  • Как избавиться от дублирования кода?

    @antonksa
    from django.views.generic import View, ListView, DetailView
    
    
    class AddUserPhoneToContextMixin(View):
        def get_context_data(self, **kwargs):
            '''
            Add phone number to context data
            '''
            ctx = super().get_context_data(**kwargs)
            try:
                user = User.objects.get(pk=1)
                ctx['phone_number'] = user.userprofile.phone_number
            finally:
                return ctx
    
    
    class ItemListView(AddUserPhoneToContextMixin, ListView):
        model = Item
        paginate_by = 9
    
    
    class ItemDetailView(AddUserPhoneToContextMixin, DetailView):
        model = Item


    Только не очень понятно почему только pk=1, что будет если его нет, и почему в try-except вы обернули попытку доступа к userprofile. Еще считается, что except без указания конкретных классов обрабатываемых исключений это bad practice. В таком случае вы теряете контроль над пониманием, какое конкретно исключение произошло - то ли коннект в базе оборвался, то ли юзер не существует, то ли поля такого нет у его профиля.

    Хорошая практика - это указывать конкретно что бы обрабатываете:
    try:
        phone_number = user.userprofile.phonenumber
    except UserProfile.DoesNotExists:
        raise NotFound('Warning! User profile did not created!')
    Ответ написан
  • Какой язык программирования изучать в свободное время?

    dollar
    @dollar
    Какой-то конкретной цели, объясняющей для чего мне это надо, пока что нет.

    - Скажите пожалуйста, куда мне отсюда идти?
    - А куда ты хочешь попасть? - ответил Кот.
    - Мне все равно... - сказала Алиса.
    - Тогда все равно куда и идти, - заметил Кот.
    - ...только бы попасть куда-нибудь, - пояснила Алиса.
    - Куда-нибудь ты обязательно попадешь, - сказал Кот. - Нужно только достаточно долго идти.

    Льюис Кэрролл
    Ответ написан
  • Что такое REST и RESTful api?

    @private_tm
    JAVA dev
    Одно и тоже. По факту обычный текстовый проток запросов ответов

    запрос
    https://toster.ru/?question="Как тебя зовут?"

    ответ в формате json
    name: "Вася"

    ПС: рановато ребенку 5-ти лет такое знать))
    ПС ПС не так прочитал))
    Ответ написан
  • Стоит ли изучать django?

    aRegius
    @aRegius
    Python Enthusiast
    1. Конечно стоит. Python - прекрасный язык, Django - самый востребованный на рынке фреймворк (заметьте, я не говорю "самый лучший", поскольку есть и другие достойные фреймворки в копилке Python и у них есть свои приверженцы, и это, конечно, вопрос личных предпочтений). Одним словом, у вас в руках отличнейший инструмент для получения удовольствия от работы и построения карьеры.
    2. Вопрос возраста выкиньте за ненадобностью. В качестве одного из примеров
    почитайте-ка историю Алексея Ситникова.
    3. Занимайтесь самостоятельно. В ваших реалиях вам необходимо так спланировать свое время, чтобы максимально полезно использовать каждую свободную минуту. Это вопрос, в том числе, самодисциплины, и он "пинками извне" не решается - тут уж ваша личная ответственность перед самим собой.
    4. Вам "кровь из носу" нужен английский язык.
    5. Не распыляйте усилия. Выберите один-два источника и занимайтесь. Лучше меньше - но лучше.
    6. На вкус и цвет, как говорится... На мой взгляд, лучшая книга для качественного старта в Django - книга его основателей. НО! Это если с английским у вас совсем туго. В противном случае, ВОТ ОБНОВЛЕННОЕ издание этой же книги 2016 года. Была в свободном доступе.
    7. Совсем не лишним будет изучение (хотя бы на базовом уровне понимания что к чему) front-end инструментов - HTML, CSS, JavaScript.
    8. Что еще вам понадобится для устройства на работу.
    9. "Конкуренция", "толпы специалистов" и прочие "страшилки" - учитесь, работайте, не останавливайтесь в развитии и все будет ок. Стремитесь стать лучшим в том, что вы делаете. А иначе зачем и для чего?
    10. Будет трудно, будут сомнения, будут лень и отчаяние. Ну так и чудес не бывает. Как говорил великий Томас Эдисон: "Гений — это один процент вдохновения и девяносто девять процентов пота".

    Но, как это сейчас в тренде: "Вы держитесь, вам всего доброго, хорошего настроения и здоровья!" :)
    Ответ написан
  • Как передавать в сигналы значение модели User?

    @JonGalt
    Я у себя в проекте использую вот такую схему создания профайла при создании юзера:
    from django.db.models.signals import post_save
    from django.dispatch import receiver
    
    
    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        ...
    
    
        @receiver(post_save, sender=User)
        def create_user_profile(sender, instance, created, **kwargs):
            if created:
                Profile.objects.create(user=instance)
    
        @receiver(post_save, sender=User)
        def save_user_profile(sender, instance, **kwargs):
            instance.profile.save()
    
        def __str__(self):
            return self.user


    class Meta:
    verbose_name_plural = u'User profiles'
    Ответ написан
  • Как набить руку на Python разработку и сисадминистрирование за 2 месяца?

    ri_gilfanov
    @ri_gilfanov
    Web- and desktop-developer
    Веб-разработка и администрирование сетевых ресурсов более востребованы, поэтому я бы рекомендовал изучить следующее:
    • основы и стандартная библиотека Python -- навык лучше прокачивается написанием скриптов и программ для решения неучебных задач. И если основной навык миддла -- это гуглить (полу)готовые решения, то основной навык джуна -- уметь писать свои "велосипеды". Разработчик, который по-максимуму использует и полагается на готовое -- столь же неэффективен, как и предпочитающий использовать готовое по-минимуму;
    • веб-фреймворк Django -- пилите небольшой проект, получаете общие представления о веб-разработке и практику ООП, но о Python этот веб-фреймворк расскажет мало, делает слишком много работы за программиста, а в его исходном коде можно заплутать, так и не поняв как он работает;
    • система контроля версий Git -- обязательно для разработчика и желательно для сисадмина;
    • wsgi-сервер uWSGI (или Gunicorn) -- см. ниже;
    • http-сервер Nginx -- см. ниже;
    • GNU/Linux -- пробуете развернуть проект с использованием предыдущих двух пунктов;
    • веб-фреймворк Flask -- просто пощупайте или сделайте ещё один небольшой веб-проект, по исходникам этого веб-фреймворка проще понять как работают другие веб-фреймворки и как писать поддерживаемый код, к тому же на Flask часто пилят всякие API / бэкенды;

    Настольные приложения и мобильная разработка на Python кажется менее развита и менее востребована, но когда-нибудь можете пощупать:
    • Python GTK+ 3 (или PySide2) -- Python обёртки над GUI инструментариями для разработки настольных приложений;
    • Kivy -- фреймворк преимущественно для мобильной разработки.

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