• Как одним выражением разбить массив на группы из n элементов в python?

    kivsiak
    @kivsiak
    software engineer
    >>> items, chunk = range(1,20), 3
    >>> zip(*[iter(items)]*chunk)
    [(1, 2, 3), (4, 5, 6), (7, 8, 9), (10, 11, 12), (13, 14, 15), (16, 17, 18)]
    Ответ написан
    Комментировать
  • Как отловить вирус на сайте Drupal 7?

    @SunHere
    Друпал сейчас часто ломают, да и уязвимостей у него хватает. Вполне возможно что вы чего-то пропускаете и именно через оставшийся 1 вирусный файл всё по новой возникает
    Ответ написан
    Комментировать
  • Как в Elasticsearch удалить документы соответствующие условию?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Попробуйте через обычного клиента (код не проверял, надергал из исходников, но должно работать)

    from elasticsearch import Elasticsearch, helpers
    
    es = Elasticsearch()
    
    def mybulk_delete(q, index, doc_type):
       res = helpers.scan(es,
                           query={"query": q},
                           index=index, doc_type= doc_type)
        for r in res:
           yield {"delete" : { "_index" : r["_index"], "_type" : r["_type"], "_id" : r["_id"] } }
    
    q = {"query":{"term":{"user":"kimchy"}}}
    k = (i for i in mybulk_delete(q,"myindex", "mytype"))
    helpers.bulk(es, k, refresh = True)
    Ответ написан
    3 комментария
  • Как наиболее точно сравнить две строки?

    adugin
    @adugin Куратор тега Python
    Пример решения с использованием стандартной библиотеки difflib:
    from difflib import get_close_matches as gcm
    
    model = 'A 170 Classic - 7/2004 - 85Kw'.upper()
    model_list = map(str.upper, [
        'A 170 CDI CAT ELEGANCE',
        'A 170 CDI CAT CLASSIC',
        'A 170 CDI CAT AVANTGARDE',
    ])
    
    result = gcm(model, model_list, n=1, cutoff=0.5)[0]
    
    print(result)  # => 'A 170 CDI CAT CLASSIC'

    Также посмотрите в сторону difflib.SequenceMatcher().ratio(), это имеет прямое отношение к cutoff в примере выше:
    from difflib import SequenceMatcher as SM
    
    s1 = 'A 170 Classic - 7/2004 - 85Kw'.upper()
    s2 = 'A 170 CDI CAT CLASSIC'.upper()
    
    SM(isjunk=None, a=s1, b=s2, autojunk=True).ratio()  # => 0.52

    Теория: Расстояние Левенштейна
    Ответ написан
    3 комментария
  • Как получить доменное имя и ip сервера, на котором исполняется скрипт?

    google_online
    @google_online
    My morning begins with coffee and Twitter.
    Сокетами.
    import socket
    myip = socket.gethostbyname_ex(socket.gethostname())[2]
    myname = socket.gethostname()
    print(myip, myname)
    Ответ написан
    Комментировать
  • Важно ли поддерживать зависимости в Питоне с помощью virtualenv и virtualenvwrapper?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Что вы имели ввиду под словами поддерживать зависимости?

    Давайте разберём код, который вы привели, скорее всего, это даст вам больше понимания того, что происходит и зачем оно надо.

    virtualenvwrapper - это инструмент для более удобной работы с python virtual environment
    Установка в систему. Это нужно сделать один раз:
    $ pip install virtualenvwrapper
    Установка домашней папки для virtualenvwrapper. Это нужно делать каждый раз, либо добавить в .bashrc / .profile файл, чтобы это выполнялось при запуске shell'а:
    $ export WORKON_HOME=~/Envs
    Выполняем virtualenvwrapper.sh, тем самым загружая в текущий shell-сеанс команды virtualenvwrapper (которые будут исполняться далее). Это нужно делать каждый раз, либо добавить в .bashrc / .profile файл, чтобы это выполнялось при запуске shell'а:
    $ source /usr/local/bin/virtualenvwrapper.sh
    Команда mkvirtualenv из virtualenvwrapper - создание виртуального окружения с именем my-venv. Это делается, собственно, только тогда, когда вы хотите создать новое виртуальное окружение:
    $ mkvirtualenv my-venv
    Команда workon из virtualenvwrapper - "активация" виртуального окружения с именем my-venv. Это нужно делать тогда, когда вы хотите "войти" в виртуальное окружение и работать в нём:
    $ workon my-venv
    Ответ написан
    5 комментариев
  • Как сделать сравнение со следующим элементом в массиве в духе python?

    Djaler
    @Djaler
    Сеньор-помидор
    [symbol for symbol, next_symbol in zip(inputArray, inputArray[1:]) if symbol == next_symbol]
    Ответ написан
    Комментировать
  • Получение данных на сервере python (socket)?

    leahch
    @leahch Куратор тега Linux
    3D специалист. Dолго, Dорого, Dерьмово.
    Вы биндитесь на порт 80, на котором, похоже, у вас уже работает web-сервер. Поэтому у вас bind вылетает с ошибкой. Или поменяйте номер порта в вашем скрипте, или остановите веб-сервер.
    И что значит "callback к к моему серверу"?!
    Если вы пытаетесь из существующего веб-сервера вызвать питоновский скрипт, то бинд вам совсем не нужен, а нужно что-то типа cgi/wsgi или proxy... Но чтобы сказать точнее, нужно знать, что из себя этот ваш веб-сервер представляет, и что у него за callback api.
    Ответ написан
    5 комментариев
  • Переход с постоянки на фриланс, стоит ли игра свеч?

    alexfilus
    @alexfilus
    Senior backend developer
    Я попробовал все варианты, остановился на удалённой работе с официальным оформлением.
    Для меня наиболее удобный вариант.
    Зарплата больше чем можно получать в офисе в моём городе, график более-менее свободный. общаться приходится только с ИТшниками.
    На фрилансе мне тяжело воспринимать многих клиентов, я часто подключал знакомых манагеров для написания ТЗ и общения с заказчиком, ибо мне проще было поделиться бюджетом, но оставить себе только программирование.
    По деньгам, прибыльнее всего фриланс, но очень нестабильно. Разброс от месяца к месяцу, получался более чем в 10 раз.
    В общем я выбрал спокойствие и интересный проект.
    Тут выше писали что проекты должны обязательно быть разнообразными чтобы расти. Соглашусь, что первые 2-3 года это важно. Потом надоедает.
    Ответ написан
    Комментировать
  • Как поделить строку в переменные?

    Astrohas
    @Astrohas
    Python/Django Developer
    a = "send abcde 0.2"
    send1, send2, *_ = a[4:].split()

    ну или еще хардкорно
    a = "send abcde 0.2"
    _, send1, send2, *_ = a.split()

    или даже так
    send1, send2 = a.split()[1:3]
    Ответ написан
    Комментировать
  • Как лучше создать версии сайта для разных городов в Django?

    Делать app для каждого города и копировать весь код, учитывая, что он одинаковый? нет смысла.

    Лучше рассмотреть проблему иначе. Начнём с зарегистрированных пользователей. Создайте модель City, обозначающую город. Также создайте custom user profile model под названием, скажем, Profile, которая привязана к User отношением one to one. В модели Profile добавьте внешний ключ на City.

    Наконец, реализуйте:
    • Выбор города (можно через AJAX)
    • Вывод на каждой странице сайта только той информации, что соответствует выбранному в request.user.profile.city городу.


    Если же поддержка города нужна и для анонимных пользователей (скорее всего это так), то стоит использовать переменную сессии в качестве дополнительного слоя. В одном из проектов у меня это делается так:

    1. Если есть переменная сессии, то используется она для фильтрации всего и вся
    2. Если её нет, но пользователь зарегистрирован - то берётся значение из БД и сохраняется в сессию, далее как в первом пункте
    3. Если и того нет - у меня запрещён доступ, так надо; ну а у вас пользователю (в вашем случае) надо предложить выбрать значение из списка.


    Таким образом и анонимусы поддерживаются, и при сбросе сессии у зарегистрированного юзера не теряется выбранный вариант.
    Ответ написан
    Комментировать
  • Как удалить соседний элемент?

    zoroda
    @zoroda
    Необычный Fullstack
    Используйте тэг
    ref
    :
    <tr v-for="row in data2" class="row body">
        <td>
            <button 
    ref="myButton"
    class="checkbox"
    @click="clrRow">x</button>
            <input type="text" v-model="row.wednesday_from">
            <input type="text" v-model="row.wednesday_to">
        </td>
    </tr>

    В скрипте можете обратиться к этому элементу:
    console.log(this.$refs.myButton.$parent.$children)
    Посмотрите в консоли, как добраться до нужных вам свойств.
    Впрочем, во Vue вам достаточно обнулить привязанную к `input` переменную.
    Дока на русском
    ref должны быть уникальными. Их можно генерить динамически, например:
    :ref="'buttonClr' + row.id"

    P.S.
    Что-то подобное делал у себя.
    Ответ написан
    7 комментариев
  • Vue.js. Почему при обновлении через Ajax, данные каждый раз переписываются, даже если они не изменились?

    kulakoff
    @kulakoff Куратор тега Vue.js
    Vue.js developing
    А имеет элемент it какой-то свой уникальный id? Если да, то может попробовать его использовать в v-bind:key. Похоже сейчас сюда постоянно попадает новый объект, что заставляет произвести полную перерисовку.
    Ответ написан
    3 комментария
  • Как импортировать настройки Django из самостоятельного скрипта?

    @marazmiki
    Укротитель питонов
    Рабочий (но неправильный) ответ — добавить директорию, в который лежат и apps, и standalone, в PYTHONPATH.
    Это делается двумя путями: или через переменную окружения PYTHONPATH при запуске из консоли:

    $ PYTHONPATH=. python standalone/syncaw.py

    либо добавить директорию прямо в скрипте:

    # syncraw.py
    import sys
    import os
    
    sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
    
    from apps.settings_local import *
    print(DEBUG)


    Правильный ответ — не делать так вообще. И отказываться от колхоза с settings_local
    Ответ написан
    3 комментария
  • Как импортировать настройки Django из самостоятельного скрипта?

    Astrohas
    @Astrohas
    Python/Django Developer
    import sys
    sys.path.append('..')
    from apps.settings_local import DATABASES
    Ответ написан
    2 комментария
  • Как делать Ajax запросы в vue.js?

    sfi0zy
    @sfi0zy Куратор тега JavaScript
    Creative frontend developer
    Как принято делать такие запросы в vue?

    Сейчас модно использовать fetch - codepen (только нужно подставлять полифилл для лучшей поддержки браузерами).

    Я правильно понимаю, что нужно создать метод загружающий данные и вызывать его в created, и затем с определенным интервалом вызывать этот же метод?

    Это было бы логично, да.
    Ответ написан
    4 комментария
  • Как делать Ajax запросы в vue.js?

    @tosha_lol_daaa
    Попробуйте использовать axios :)
    axios.get('/url').then((response) => this.data = response.data.response)
    .catch((error) => console.log(error.response.data));

    P.s: import axios from 'axios'; для использования
    Ответ написан
    Комментировать
  • Как запустить vue.js в Django?

    sim3x
    @sim3x
    Сменить тип скобок в вуе - он ведь такое умеет?

    В джанго темплейте
    https://docs.djangoproject.com/en/dev/ref/template...
    Ответ написан
    1 комментарий
  • Что такое асинхронный сокет?

    15432
    @15432
    Системный программист ^_^
    нет, эквивалентность многопоточности и асинхронного сокета отсутствует.

    попробую объяснить суть асинхронного сокета на простом примере.

    подходите вы к лотку купить минералки, а её нет, но продавщица сообщает, что скоро привезут.

    возможные варианты вашего ответа:
    1) "я подожду" - синхронный сокет, программа ожидает, пока не придёт сообщение.
    1.5) "долго не везут что-то, надоело ждать, ухожу" - синхронный сокет с таймаутом
    2) "ну ладно, я попозже загляну" - асинхронный сокет, программа не ждёт сообщения и занимается своими делами дальше
    2.5) "я вернулся, ну как, привезли? да? ну вот и отлично, забираю" - асинхронный сокет, очередная попытка приёма данных, на этот раз успешная
    3) "алё, Вован, я стою минералку жду, вернусь попозже, работай, не отвлекайся" - синхронный сокет + многопоточность. один поток ожидает приёма данных, другой поток работает
    3.5) "Вован, тут минералки ещё нет, ща вернусь" - многопоточность + асинхронные сокеты. несколько потоков работают одновременно, на приеме данных не блокируются
    Ответ написан
    2 комментария