• Как обработать дополнительная данные в serializers/views?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    По-хорошему, надо раскидать на 2 разных эндпоинта.
    Но если писать при таких и только таких запросах, то:

    class Items(APIView):
        ...
        def post(self, request):
            data = request.data.copy()
            if data:
                catalog = False
                if 'catalog' in data[0].keys():
                    catalog_id = data[0]['catalog']
                    del data[0]
                    if Catalog.objects.filter(id=catalog_id):
                        catalog = Catalog.objects.get(id=catalog_id)
                if not catalog:
                    catalog = Catalog.objects.order_by('-created')[0]
                response_data = []
                for item_data in data:
                    item_serializer = ItemSerializer(item_data)
                    if item_serializer.is_valid():
                        item_serializer.save(catalog=catalog)
                         response_data.append({
                             'success': True, 
                             'item': item_serializer.data
                         })
                    else:
                        response_data.append({
                             'success': False, 
                             'errors': item_serializer.errors
                        })
                # returning success answer with response_data


    P.S. Писал в слепую.
    Охх... Молодежь, попривыкли всё тупо по сериалайзерам раскидать и назвать это работой, backend - это писать логику.
    Ответ написан
    Комментировать
  • Как сделать скролл в div рабочим?

    @gh0sty Автор вопроса
    Веб-разработчик. Пишу под Python Django.
    Окей. Покапался, поудивлялся что в пенах работает, понял что проблема в плагине для смены скролла.
    Всем пасибки!
    Ответ написан
  • Отдельный слайдер для каждого элемента внутри модального окна?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Ставь какой-нибудь litebox плагин с поддержкой галерей.
    Ответ написан
  • Как сделать лучше фронт часть?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    О боже)))
    Дай линкам слева какой-нибудь href. По href-у реинитай слайдер. Но если у тебя будет 22 пункта, в каждом хотя бы 5 картинок и каждая весом мегабайт (что норма для 80% экрана fullhd) - только они будут весить 110мб. Это, учитывая 4g - куева туча времени загрузки. Ajax, бро, ajax...
    Ответ написан
    2 комментария
  • Как сделать голосование на лендинге?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    На чем лендинг стоит уточняйте. А то я вам щас распишу структуру MVC Django.
    Ответ написан
    4 комментария
  • Как отменить flex для одного элемента?

    @gh0sty Автор вопроса
    Веб-разработчик. Пишу под Python Django.
    Окей это было адски. Я просто положил болт, так как такое меню возможно только вне flex и вынес блок.
    Так выглядит код:
    <div class="col-12 col-md-10 offset-md-1 d-flex justify-content-between align-items-center">
        <a href="/" class="text-decoration-none">
           ...
        </a>
        <div class="btn-group dropdown ml-2 mr-auto d-inline-flex">
            ...
        </div>
        <!-- Переключатель -->
        <button class="navbar-toggler ml-auto d-block d-md-none" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
            <span class="navbar-toggler-icon"></span>
        </button>
        <!-- Для десктопов -->
        <div class="d-none d-md-inline-flex align-items-center">
           ...
        </div>
    </div>
    <!-- Для мобилок -->
    <div class="collapse navbar-collapse d-md-none" id="navbarSupportedContent">
        <ul class="d-block d-md-none navbar-nav mr-3">
            ...
        </ul>
    </div>
    Ответ написан
  • Есть способ быстро сравнить одно изображение со множеством других изображений?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Генерь hash и не парься. Он уникален и думаю можно найти быстрый генератор, а поиск подобных - быстрый. В hash-функцию можно засунуть любые стандартизированные, нормированные данные.
    Ответ написан
    Комментировать
  • Как настроить smtp почту в Django?

    @gh0sty Автор вопроса
    Веб-разработчик. Пишу под Python Django.
    Причина - закрытые исходящие порты. Но я даж постфикс поставил, думая, что моя ошибка)
    Ответ написан
    Комментировать
  • Python+Mysql возникает ошибка?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    У тебя выше не тот запрос показан. inser и Firfox
    Но так пишет - проверь синтакс для
    ,Firefox', "{'e', 'i'}")

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

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Надо запоминать в кукисах/сессии откуда он перешел, чтоб не сделать возврат к чужой странице. Или просто history.back();
    Ответ написан
  • Как из таблицы сделать JSON?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Пробегайся по tbody tr и закидывай в словарь. Первый тег jQuery - поэтому, наверняка поймешь, что это each и push для готового словаря.

    UPD:
    Увидел, что все печально - поэтому ня:

    var json_table = [];
    $('#print-table tbody tr').slice(2).each(function() {
        var tds = $(this).children('td');
        json_table.push({
            name: tds[0].text(),
            rank: tds[1].text(),
            phone: tds[2].text(),
        });
    });

    Чет тип того, отдебажишь там, писал в слепую.
    Ответ написан
  • Как сделать добавление атрибута только определенным ссылкам с помощью jquery?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    $("#gg99 a").each(function() {
        if ($(this).find('img').length) {
            $(this).data('fancybox', 'gallery');
        }
    });


    Если ты о "внутри" по DOM, а не по url.
    Ответ написан
  • Как вывести измененный список из функции?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Параметры не передал + дай нам нормальное форматирование.
    def func(*nums):
        ret = []
        for num in nums:
            ret.append('#' * num)
        return ret
    inp = [2, 10, 3, 5] # your input
    res = func(inp)

    *name - в аргументах функции - это передавать сколько угодно неименованных элементов.
    'some_string' * 5 - повтори мне 'some_string' 5 раз
    или как чел выше:
    inp = [2, 10, 3, 5] # your input
    res = ['#' * n for n in inp] # генератор массивов или list-генератор

    Это типо: Эй, Python! Ты чет обленился. Закинь-ка мне столько же значений в массив, сколько в исходном массивчике, и сразу передавай мне значения из него + не забудь закинуть все в переменную res.
    Ответ написан
    Комментировать
  • Как работает данный скрипт?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Не сильно шарю в js - но это типа примитивного ООП. Крч ты по let family = marry... временно создаешь 2 объекта у которых есть параметры name (но так-то это словарики). Далее ты первому объекту (словарю) устанавливаешь атрибут husband ссылающийся на весь объект (словарик) woman, и наоборот - во второй строчке функции. И возвращаешь father: первый объект (словарь) с записями name: John, wife: {...} и второй объект (словарь) с записями name: Ann, husband: {...}. И совмещаешь 2 объекта (словаря) в один объект (словарь) в переменной family. И теперь чтобы избежать рекурсии - я предположу, что в js присваивание - то же самое что и ссылка на объект.
    И у тебя выйдет:
    family = {
        father: {
            name: 'John',
            wife: // ссылка на объекто-словарь Ann-ы
        },
        mother: {
            name: 'Ann',
            husband: // ссылка на объекто-словарь John-а
        }
    }


    Хз как там с ООП в js, поэтому везде и указал словарь (мейби оно так и работает)
    Ответ написан
    6 комментариев
  • Как добавить/скрыть классы при нажатии?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Js. Я использую JQuery. Тут 2 варианта - первый статический, второй динамический. На какой сам... Крч вот второй (на глаз):
    $('.navigation li a').on('click', function(e) {
        //e.preventDefault(); - раскомментировать, если не хочешь менять хеш
        $('#content section').removeClass('active-content'); // чистим все секции от класса active-content
        $('#content section ' + e.href).addClass('active-content'); // если не выкатит, попробуй $(e).attr('href') и чекни значения, есть ли там #
    });
    Ответ написан
    Комментировать
  • Можно ли сделать временную переменную для сессии Django?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Встроенного варианта нет, только для всей сессии.

    Решение:
    Просто закинь в request.session['weather_expires'] = (DateTime Object). Тип запиши когда он истекает (timezone.now() + timedelta(1) # 1 день), и лезь в middleware. Просто установи свой middleware класс, закинь дефолтный код из документации и если timezone.now > weather_expires - удаляй оба ключа.

    Не сцы, эт ez.
    Ответ написан
  • Как добавить фильтры или поиск в каждый столбец в таблице?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    О чел... Это адовая тема для JQuery, js, там по всем записям надо проходиться, чекать их, и заново отрисовывать. А потом представить, что у тебя 10к этих записей и олдовая пекарня у юзверя, начать плакать. Пройти 5 стадий депрессии и найти какой-нибудь плагин. Если не найдешь - делать как логику. А лучше только и плагин и логику. Тип возврат json-ом уже готовых записей. У меня похожая ситуация была)))
    Ответ написан
  • Как объединить текст и переменную в имя переменной?

    @gh0sty
    Веб-разработчик. Пишу под Python Django.
    Зачем в одну строчку? Я бы посоветовал просто закинуть все question в массив (или как их там в js называют) и просто брать от порядкового номера.
    Ответ написан
    1 комментарий
  • Как грамотно совместить кэширование и переадресацию www, https для nginx?

    @gh0sty Автор вопроса
    Веб-разработчик. Пишу под Python Django.
    Через час поиска нашел:
    expires 1d;
    Это надо закинуть в медиа и статик location. Сорри за свою глупость, не шарю за nginx)) Так и так - это неплохой конфиг для новичков под uwsgi и django.
    Ответ написан
  • Как устранить ошибку "relation does not exist" в Django?

    @gh0sty Автор вопроса
    Веб-разработчик. Пишу под Python Django.
    Окей я разобрался.
    Краткий гайд по менеджменту большого количества полей, на примере библиотеки Django modeltranslation. Все происходит на сервере и на PostgreSQL. Причина: "tables can have at most 1600 columns" и "row is too big: size ..., maximum size 8160"
    1. Для начала создаем все наши поля на перевод у меня их около 400.
    2. Считаем количество нужных языков + 1, у меня это 6. Почему? Modeltranslation оставляет оригинальное поле, чтоб быстро к нему обращаться на уже смененном языке. Т.е. динамическая удобная фича)
    3. 400 * 6 = 2400 полей по итогу.
    4. Эти 2400 делим примерно на 600-800 (если charfield max_length=200). На моем примере - хватило 5.
    5. Разбиваем наш models и translation на 5 (вычислено выше) приложений. Это по 600 переводных строк, у меня, т.е. 100 обычных строк (+- 10).
    6. Создаем базы под эти приложения (ну это не нуждается в пояснении, create + grant).
    7. Создаем в settings ручные роуты, я их так называю. Пример:

      DATABASES = {
          'default': {  # Сюда будут записываться другие приложения, оставить "default"!!!
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't2': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t2',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't3': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t3',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't4': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t4',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          },
          't5': {
                  'ENGINE': 'django.db.backends.postgresql_psycopg2',
                  'NAME': 'db_t5',
                  'USER': 'username',
                  'PASSWORD': 'pass',
                  'HOST': 'localhost',
                  'PORT': '',
          }
      }


    8. Записываем их все в приложения. НО!!! закомментируем.
    9. В папках migrations в каждом приложении перевода удаляем все, кроме кеша и _init_.
    10. Проводим на всяк случай makemigrations и migrations без параметров для остальных приложений, чтобы удостовериться что все будет записано правильно.
    11. Далее раскомментируем в settings самое первое приложение. И применяем:

      manage.py makemigrations <название приложения перевода>
      manage.py migratе <название приложения перевода> --database=t<номер базы>
      manage.py migratе
      manage.py runserver <параметры>
      *Создаем тестовый экземпляр*
      manage.py update_translation_fields

      И проводим этот набор операций один за одним для каждого приложения.


    Это делается, чтобы не было бредовых ошибок. Уж поверьте их может быть море. Если что-то не получается пересоздаем базы данных (желательно с новым именем), чистим migrations и начинаем сначала. Если что-то явно не получается - гуглим ошибку. Тут основная часть всей дичи, которая может вам встретиться.
    Ответ написан
    Комментировать