• Что такое webhook?

    Negezor
    @Negezor
    Senior Shaurma Developer
    Webhook — механизм оповещения системы о событиях.

    Допустим есть определённый сервис который должен оповещать о событиях когда они происходят.
    Как вариант постоянно запрашивать новые данные на сервере, минус будет скорее в скорости получения данных если на сервере например стоит задержка на получения новых оповещений.
    А вот webhook исправляет этот недочёт, когда происходит событие он запрашивает адрес сайта с параметрами, например example.com/webhook/notification и передаёт в теле POST запроса JSON (зачастую) и там будут свежие данные.

    Простой пример можно посмотреть: создание бота для telegram на webhooks.
    Ответ написан
    4 комментария
  • Зачем нужна сериализация?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Предположим, есть у вас сложная иерархия классов, в каждом из которых с десяток полей. Некоторые поля ссылаются на объекты других классов или, того хуже, содержат коллекции объектов. При использовании сериализатора, вам достаточно одной строки для сохранения словаря, содержащего объекты из этой иерархии, в файл:
    pickle.dump(some_dict, some_fh)
    А если будете писать код для ручного сохранения всего этого изобилия в файл, то у вас либо получится объёмный, сложный и глючный код, либо ещё одна версия pickle.
    Ответ написан
    Комментировать
  • Зачем нужна сериализация?

    Assargin
    @Assargin
    Перед ответом смотрю наличие ✔ в ваших вопросах
    Сериализация:
    • это обобщённый процесс для структур языка программирования.
    • нужна для любого взаимодействия в системе, выходящего за рамки передачи данных в текущем скрипте: даже если вам кажется, что она не используется - это не так, она всё равно используется под капотом.

    Сериализация гарантирует (для поддерживаемых структур данных), что после процесса сериализации/десериализации вы получите те же самые структуры данных.

    Не будь её, вам бы понадобилось вручную создавать свои протоколы и методы перевода данных в вид, пригодный для передачи куда-либо.
    Ну и, модуль pickle - это встроенная реализация сериализации, но в то же время - одна из многих. Вы можете использовать, например, json, или yaml. Что угодно, что переведёт обычные структуры данных в пригодную для передачи форму (строку, байтовая строка) и вернёт (десериализует) обратно.
    Ответ написан
    7 комментариев
  • Как правильно расставить индексы в БД?

    @Vampiro
    В общем случае, принципы построения индексов достаточно просты: индекс (кроме первичного) строится для ускорения запросов. Причем если есть WHERE по двум полям, то будет взят индекс, содержащий оба этих поля (если есть) и не важно сколько их там еще.

    Другими словами, один индекс по полям «A, B, C» будет более «полезен» для запроса, содержащего некие условия по полям A и B, чем два отдельных индекса по полям «A» и «B».

    Фактически, индексы A,B,C и A,C,D будут одинаковы в части поиска по полю «А». При поиске по полям А,B будет взят первый индекс. При поиске по полям A, C — второй.

    В своей работе лично я стараюсь не плодить излишних индексов. Ведь если запросы по полям В, С будут выполняться крайне редко, а сама таблица будет модифицироваться достаточно активно — то построение еще одного индекса принесет приложению больше вреда, чем пользы.

    Не бойтесь добавлять слово EXPLAN в тело запроса и смотрите какие индексы он использует. Порой оптимизатор использует fullscan даже при наличии индексов.
    Ответ написан
    Комментировать
  • Django, как сделать скидку для товара?

    @AlexandrBirukov
    Можно в модели товара добавить поле скидки в процентах типа такого:
    sale = models.IntegerField('Скидка в процентах', blank=True, default=0)


    В этой же модели добавить метод получения этой скидки:
    def get_sale(self):
            '''Расчитать стоимость со скидкой'''
            price = int(self.price * (100 - self.sale) / 100)
            return price


    В шаблоне или корзине итоговую стоимость можно получать так:
    {{ product.get_sale }}
    Ответ написан
    1 комментарий
  • Как правильно вывести данные из из БД в Django?

    @vikholodov
    price лучше делать decimal или integer, гибкости больше будет, blank=False необязательно указывать.
    попробуйте заменить вьюху на
    def ServiceListView(request):
        serv_list= Service.objects.all().order_by('name')
        returnt render (request, 'services.html', {'serv_list':serv_list})

    в шаблоне:
    {% for serv in serv_list %}<td>{{ serv.name }}</td>{% endfor %}
    Ответ написан
    1 комментарий
  • Подгрузка контента Django?

    Я бы сделал следующим образом

    1) 1-ый вариант
    во вьюхах
    from django.core import serializers
    from .models import MyModel
    
    def my_view(request):
        if request.is_ajax():
            x = request.GET.get('value', 5)
            data = serializers.serialize('json', MyModel.objects.all()[:x] )   #тут по вкусу, можно все объекты, можно частями.
            return HttpResponse(data, content_type='application/json')
        else:
            return render(request, 'template.html')

    2) 2-ой вариант использовать Django-Rest-Framework

    И в шаблонах уже jQuery-Ajax, Angular и.т.п.

    Но я сам ещё совсем новичок в этом деле, поэтому могу ошибаться :)

    Update:
    Я нашёл вот такой вариант:

    $(window).scroll(function() {   
       if($(window).scrollTop() + $(window).height() == $(document).height()) {
           $.ajax({
                type: 'GET',
                url: '{% url 'app:json_view' %}', //Ссылка на вьюху
                dataType: "json",
                data: {'value': 10},  //Здесь можно передать данные в GET запросе, например сколько значений получить 
                success: function(data) {
                    // Ответ приходит в переменную data. Её и рендерим на страницу
                }
            }); 
      }
    });
    Ответ написан
    2 комментария