Задать вопрос
  • Python, PIL, перенос текста

    @phasma
    margin = offset = 40
    for line in textwrap.wrap(text, width=40):
    draw.text((margin, offset), line, font=font, fill="#aa0000")
    offset += font.getsize(line)[1]


    stackoverflow.com/questions/8257147/wrap-text-in-pil
    Ответ написан
    Комментировать
  • Nginx + https + django = 400?

    @galaxy
    Сделал переадресацию сайта с 80 порта на 443

    Где вы ее сделали?
    В конфиге nginx, на первый взгляд, все ок.
    В iptables что ли ??
    Ответ написан
    7 комментариев
  • Как исправить ошибку nginx 403 forbidden?

    Murmurianez
    @Murmurianez
    JavaScript Developer
    Сейчас дам хреновый ответ, но он поможет двинуться в правильном направлении.

    В самом начале nginx.conf есть строчка user www-data;
    www-data это группа пользователей с чьими правами будет запускаться nginx.
    Хреновая часть ответа: чтобы не мучаться можно прописать: user your_root_user_name;
    Оно заработает, но это конечно не для продакшена, но для какого-нибудь тестового чтобы голову не морочить может быть и ОК. А по хорошему, конечно, сделайте нормальную группу пользователей с нормальным правами для запуска.
    Ответ написан
    2 комментария
  • Какие технологии/языки изучать?

    @TohirDev
    Вам лучше всего начать изучать js и все что связано с ним потому, что в последнее время веб сайты начали написать только в среде js используя фреймворки которые тоже написаны на js. Уделяйте внимание на react js, vue js а также angular js. На них очень много позиций и требований на рынке труда. Большие зарплаты именно на этих технологиях. Удачи
    Ответ написан
    3 комментария
  • Рассудите спор?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Беды бэкендера вас касаться не должны, вы свою работу сделали нормально, на сколько я могу судить. Если бэкендеру хочется использовать средства Django для генерации форм, он может либо убрать вашу вёрстку формы, либо использовать её для генерации в шаблонном коде. Похоже, что он просто не умеет работать с bootstrap-формами. И приём формы ajax-запросом - это не двойная работа, если бэк написан нормально.
    Ответ написан
    3 комментария
  • Как умножить в таблице два значения, полученный результат вывести отдельно?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Вы не написали о какой БД идёт речь.
    Некоторые поддерживают вычисляемые поля. Значение такого поля не хранится в БД, оно вычисляется в процессе запроса "ленивым" образом незаметно, а для SQL выглядит как обычное поле.

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

    Однако я вам рекомендую не поддаваться на все эти соблазны и не хранить никакого кода в БД. Если вы прямо в SQL-запросах каждый раз будете перемножать эти величины, когда это нужно, то ничем это решение не будет менее эффективным чем предыдущие два. Формула у вас не так сложна и вполне очевидна, чтобы не наворачивать лишних сущностей.

    Первое решение ищется по строке "%my_db% calculated fields"/
    Второе: "%my_db% trigger on update"
    Третье и гуглить не надо. Просто умножайте всегда.
    Ответ написан
    Комментировать
  • Как на Ubuntu поставить Python 3.7?

    warnabas
    @warnabas
    #apt update && apt upgrade -y
    Далее все зависимости ставим
    #apt install build-essential -y
    #apt install libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev -y

    Для пользователей дебиана надо поставить zlib.
    #apt install zlib1g -y
    Скачиваем архив, распаковываем его, конфигурируем и т.п.
    #cd /usr/src
    #wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
    #tar -xzvf Python-3.7.0.tgz
    #cd Python-3.7.0
    #./configure --enable-optimizations
    #make altinstall

    последнее чтобы не заменить ничего в /usr/bin
    дальше советуют venv поставить, он по умолчанию с версии пайтона 3.3 идет. следующую команду лучше делать где-то в проекте или где ты этот венв будешь размещать
    python3.7 -m venv DIR_NAME
    для активации венва
    source DIR_NAME/bin/activate
    потом можно проверить версию пайтона python --version
    Ответ написан
    Комментировать
  • Как разделить блок div на две части?

    hzzzzl
    @hzzzzl
    я почему-то думаю, что лучше всего текст в таблицу положить, ну и две колонки левая и правая

    Ответ написан
    1 комментарий
  • Как получить данные из блока div в который записываются из JS?

    hottabxp
    @hottabxp Куратор тега Python
    Сначала мы жили бедно, а потом нас обокрали..
    BeautifulSoup на YouTube вам не поможет(хотя можно получить страницу с помощью selenium, а дальше разбирать её с помощью BeautifulSoup - но это уже другая история)
    На страницах YouTube данных хранятся в Json. Их можно оттуда вырезать и работать с ними как с json. Можно попробовать банально искать с помощью питоновской функции find:
    (Да простят меня питонисты за данный код))
    Я не говорю что это правильно, и так нужно делать, но работает, и на том спасибо.
    import requests
    
    headers = {'user-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:72.0) Gecko/20100101 Firefox/72.0',
    			'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
    }
    url = 'https://www.youtube.com/watch?v=pSWOcXg703s'
    
    response = requests.get(url,headers=headers)
    html = response.text
    first_1 = html.find('og:title" content="')+19
    second_2 = html.find('">',first_1)
    title = html[first_1:second_2]
    
    first = html.find('videoViewCountRenderer')+72
    second = html.find('"}]}',first)
    views = html[first:second]
    
    first_ = html.find('likeStatus":"INDIFFERENT","tooltip"')+37
    second_ = html.find('"}},',first_)
    likes = html[first_:second_].replace(' ','').split('/')
    
    print(f'Название видео: {title}')
    print(f'Сейчас смотрят: {views}')
    print(f'Лайков: {likes[0]}')
    print(f'Дизлайков: {likes[1]}')

    На выходе:
    Название видео: Elon Musk Live: Bitcoin BTC Talk, BTC Mass Adoption & SpaceX update [April, 2020]
    Сейчас смотрят: 59 365
    Лайков: 2 542
    Дизлайков: 153
    Ответ написан
    5 комментариев
  • Как узнать короткое имя пользователя?

    sergiks
    @sergiks Куратор тега ВКонтакте
    ♬♬
    users.get()

    Или просто /id12345
    Где 12345 это id пользователя
    Ответ написан
    Комментировать
  • Как получить якорь URL?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Это часть URL не передаётся серверу в соответствии со стандартом HTTP. Костыль есть только один - получать её в javascript-коде и передавать ajax-запросом. Но лучше и правильнее вовсе избавиться от необходимости её передавать.
    Ответ написан
    Комментировать
  • Как получить местоположение по IP?

    Gomonov
    @Gomonov
    Не всё так просто, особенно с мобильным интернетом. Я, например, нахожусь в Брянске, и если сижу с мобилы, мой ip московский. Давно уже перевалили за 50% по мобильному трафику, поэтому в большинстве случаев geo по ip определяется не точно. Конечно в массштабах стран всё - ок.

    Если отвечать конкретно на Ваш вопрос, то базы maxmind в помощь. У них есть платные и бесплатные.
    Ответ написан
    Комментировать
  • Как получить местоположение по IP?

    deepblack
    @deepblack Куратор тега Django
    Используйте https://github.com/maxmind/GeoIP2-python
    Его можно локально использовать, без запросов к стороннему API
    spoiler
    >>> import geoip2.database
    >>>
    >>> # This creates a Reader object. You should use the same object
    >>> # across multiple requests as creation of it is expensive.
    >>> reader = geoip2.database.Reader('/path/to/GeoLite2-City.mmdb')
    >>>
    >>> # Replace "city" with the method corresponding to the database
    >>> # that you are using, e.g., "country".
    >>> response = reader.city('128.101.101.101')
    >>>
    >>> response.country.iso_code
    'US'
    >>> response.country.name
    'United States'
    >>> response.country.names['zh-CN']
    u'美国'
    >>>
    >>> response.subdivisions.most_specific.name
    'Minnesota'
    >>> response.subdivisions.most_specific.iso_code
    'MN'
    >>>
    >>> response.city.name
    'Minneapolis'
    >>>
    >>> response.postal.code
    '55455'
    >>>
    >>> response.location.latitude
    44.9733
    >>> response.location.longitude
    -93.2323
    >>> reader.close()


    Данный модуль встроен в Django https://docs.djangoproject.com/en/2.2/ref/contrib/...
    spoiler
    >>> from django.contrib.gis.geoip2 import GeoIP2
    >>> g = GeoIP2()
    >>> g.country('google.com')
    {'country_code': 'US', 'country_name': 'United States'}
    >>> g.city('72.14.207.99')
    {'city': 'Mountain View',
    'country_code': 'US',
    'country_name': 'United States',
    'dma_code': 807,
    'latitude': 37.419200897216797,
    'longitude': -122.05740356445312,
    'postal_code': '94043',
    'region': 'CA'}
    >>> g.lat_lon('salon.com')
    (39.0437, -77.4875)
    >>> g.lon_lat('uh.edu')
    (-95.4342, 29.834)
    >>> g.geos('24.124.1.80').wkt
    'POINT (-97 38)'
    Ответ написан
    1 комментарий