• Django AWS lambda альтернатива для Celery?

    inoise
    @inoise Куратор тега Amazon Web Services
    Solution Architect, AWS Certified, Serverless
    CloudWatch + lambda + SNS (или SES) (если почта). А вообще надо больше подробностей)
    Ответ написан
    5 комментариев
  • AWS отправка SMS?

    inoise
    @inoise Куратор тега Amazon Web Services
    Solution Architect, AWS Certified, Serverless
    Никаких нет. SNS имеет Free Tier первые 100 SMS в месяц, но только для US. пруф
    Ответ написан
    2 комментария
  • Django (RestFramework) + AWS Cognito?

    inoise
    @inoise Куратор тега Amazon Web Services
    Solution Architect, AWS Certified, Serverless
    Много букв, но!

    По Serverless:
    - никакого Django ибо в lambda сразу приезжает request, а роутинг делается на api gateway. это функциональное программирование считай
    - посмотри на Serverless Framework
    - boto3 классная вещь, но не забывай что это просто обертка к сервисам
    - zappa в помойку, она ничего на самом деле не умеет, а деплоит все бесконтрольно в твой аккаунт
    - проблемы будут если тебе нужно низкое latency ибо lambda имеет холодный старт (можно снизить через новую фичу)
    - 404 в API Gateway делается как ANY /{proxy+} -> lambda

    По Cognito:
    - выкинуть. Если нет готовности тратить дни и недели на то чтобы получить хоть что-то
    - погляди на Auth0
    Ответ написан
    3 комментария
  • MongoDb в Django?

    fox_12
    @fox_12 Куратор тега Django
    Расставляю биты, управляю заряженными частицами
    Цитата из документации по Django:
    Django officially supports the following databases:
    PostgreSQL
    MySQL
    Oracle
    SQLite

    Можно конечно и MongoDb прикрутить при желании - но смысл тогда вообще Django использовать?
    Ответ написан
    3 комментария
  • MongoDb в Django?

    @deliro
    1. Django начнёт официально поддерживать монгу только в 3 версии, и то непонятно, в какой именно и насколько хорошо. Т.к. async они тоже собираются завезти в 3 версию, но в коде 3.0a там им и не пахнет (например, асинхронным ORM)
    2. Монга немного упрощает разработку (хотя, с Django ORM и миграциями, я не вижу, как она упростит разработку), но сильно уменьшает качество продукта, особенно в неумелых руках. Например, у вас легко могут оказаться неконсистентные данные в бд, с которыми вам будет непонятно, что делать.

    Есть миллиард статей о том, как монга со временем испортила продукт. Хотя, есть такой же миллиард, где её восхваляют. Однако, очевидно, что реляционные БД дают тебе больше строгости и заставляют проектировать сущности лучше. С ними сложнее, но и сложнее отстрелить себе ноги.
    Ответ написан
    Комментировать
  • Как в Python сделать так чтоб было так больше 10 но меньше 15 и тогда будет вывод текста?

    @bogomazov_vadim
    Как в Python сделать так чтоб было так больше 10 но меньше 15 и тогда будет вывод текста?

    if 10 < val < 15:
        print('Вывод текста')
    Ответ написан
    Комментировать
  • Как связать две модели (формы) в DJANGO автоматически при создании?

    syschel
    @syschel
    freelance/python/django/backend
    Добавлю к Yura Khlyan,
    maniacus26, самое просто решение, создавать запрос с страницы обращения. Напр:
    obrashcenije/2 - страница с информацией об обращении
    obrashcenije/2/dodat_zapros - страница с созданием запроса к конкретному обращению.

    Тогда во вьюхе создания запроса, буде доступен парметр self.kwagrs['obr_id'], если урлу задать как-то так:

    что если нужно в саму форму передать объект(ид) обращения, можно в классе вьюхи через
    class ZaprosCreator(CreateView):
        form_class = ZaprosForm
    
        def get_initial(self):
            return {'obrashcenije': self.kwagrs['obr_id']}

    Или если используется простые виды через функции, то
    form = ZaprosForm(initial={'obrashcenije': self.kwagrs['obr_id']})

    В форме ловить
    class ZaprosForm(forms.ModelForm):
        ...
        def __init__(self, *args, **kwargs):
            super(ZaprosForm, self).__init__(*args, **kwargs)
            self.obrashcenije = kwargs.get('initial').get('obrashcenije', None)


    Ну и как вариант в форме не обрабатывать вообще обращение:
    class ZaprosForm(forms.ModelForm):
        class Meta:
            model = ZaprosModel
            exclude = ('obrashcenije',)

    А уже во вьюхе перед сохранением формы добавить

    class ZaprosView(CreateView):
        form_class = ZaprosForm
    
        def form_valid(self, form):
            obj = form.save(commit=False)
            obj.obrashcenije_id = self.kwagrs['obr_id']
            obj.save()
            return super(ZaprosView, self).form_valid(form)

    ПС. избегайте руских названий моделей/переменных/классов, даже транслитом
    Ответ написан
    Комментировать
  • Почему весь текст имейла в одну строку?

    По-умолчанию показывается HTML-часть письма, в HTML для переноса необходимо добавлять тег<br>. Если вы не хотите форматировать HTML - оставьте только текстовую часть письма.
    Ответ написан
    3 комментария
  • Как уменьшить размер изображения?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Django
    Седой и строгий
    Возвращать URL не оригинальной картинки, а её заранее пожатой версии.
    Ответ написан
    2 комментария
  • Как мне отсортировать кверисет?

    Melkij
    @Melkij
    PostgreSQL DBA
    Какой запрос идёт в базу в результате?
    Если не указано никакого order by - то порядок записей в результате запроса любой. В смысле действительно любой, СУБД может даже на каждый запрос возвращать данные в разном порядке и это именно то, что сказано в стандарте SQL.
    Ответ написан
    Комментировать
  • Как мне отсортировать кверисет?

    sim3x
    @sim3x
    П.С. Ответы: "добавить поле date_updated" или "переведи кверисет в лист и реверсни" - не подходят.

    Решения - нет
    Ответ написан
    Комментировать
  • Как перезагружать страницу с помощью JS?

    Pshkll
    @Pshkll
    <select id="dynamic-select">
        <option value="http://www.google.com/">Google</option>
        <option value="http://www.youtube.com/">YouTube</option>
        <option value="http://www.yandex.ru/">Yandex</option>
    </select>


    <script>
        $('#dynamic-select').bind('change', function () {
            var url = $(this).val();
            if (url != '') {
                window.location = url;
            }
            return false;
        });
    </script>


    Дополнительный ответ на дополнительный вопрос в комментариях, используя GET:

    <select id="dynamic-select">
        <option id="s1" value="test.html?s=s1">Google</option>
        <option id="s2" value="test2.html?s=s2">YouTube</option>
        <option id="s3" value="test3.html?s=s3">Yandex</option>
    </select>


    <script>
    $(document).ready(function () {
    
        $.urlParam = function(name){
            var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
            if (results==null){
               return null;
            }
            else{
               return results[1] || 0;
            }
        }
        var selected = $.urlParam('s');
        if (selected){
            $("#dynamic-select option[id="+selected+"]").prop("selected", "selected");
        }
    
        $('#dynamic-select').bind('change', function () {
            var url = $(this).val();
            if (url != '') {
                window.location = url;
            }
            return false;
        });
    
    });
    </script>
    Ответ написан
    4 комментария
  • Как изменить queryset для ModelChoiceField на форме?

    winordie
    @winordie
    Лучшая документация -- исходники
    Мне кажется проще всего при изменении поля site первой формы отправлять ajax запрос с выбранными site_id. Для BenefitForm сделать что то по типу:
    class BenefitForm(OscarBenefitForm):
        range = forms.ModelChoiceField()
        def __init__(self, *args, **kwargs):
            super(BenefitForm, self).__init__(*args, **kwargs)
            if hasattr(kwargs, 'site_ids'):
                self.fields['range'].queryset = Range.objects.filter(site__id__in=kwargs.get('site_ids'))
            else:
                self.fields['range'].queryset = Range.objects.all()

    В ответе получать отрендеренную форму и вставлять ее на страницу.

    Либо изначально получать все Range, а уже с помощью js отфильтровывать.
    Ответ написан
    1 комментарий
  • Как создать новую корзину?

    winordie
    @winordie
    Лучшая документация -- исходники
    Здесь видно, что при добавлении товара корзина берется из request.
    Здесь видно, что при оформлении заказа корзина снова берется из request.
    Здесь корзина в request добавляется.

    Вывод: именно в middleware надо реализовывать логику выбора текущей корзины.
    Ответ написан
  • Как сделать свой проект доступным для всех?

    @aol-nnov
    > Создать .gitignore(кстати, каки файлы туда внести?)
    https://github.com/github/gitignore

    думаю, найдешь по вкусу ;)
    Ответ написан
    Комментировать
  • Как сделать свой проект доступным для всех?

    Lancelote
    @Lancelote
    Django developer
    Привет. Ну в принципе да, все верно расписал. Если репозиторий не приватный, то любой сможет его склонировать с github и пощупать проект, зарепортить баги/предложения, сделать пул-реквест.

    Стоит добавить еще REAMDE.md или README.rst в корень и описать там коротко проект, дать ссылки на документацию и т.д. github будет отображать рендер содержимого на главной странице репозитория. Можно посмотреть на примере популярных репозиториев как другие оформляют.

    В .gitignore ручками прописываешь какие файлы/директории игнорировать гиту: https://git-scm.com/docs/gitignore Оно понимает регулярные выражения и все такое.
    Ответ написан
    Комментировать
  • Как добавить одно поле для продукта в админке?

    winordie
    @winordie
    Лучшая документация -- исходники
    Тогда я форкнул приложение

    Точно форкнул? В настройках добавил?
    from oscar import get_core_apps
    INSTALLED_APPS += get_core_apps([
        'path.to.local.folder.dashboard.catalogue',
    ])
    Ответ написан
    4 комментария
  • Как перевести несколько слов?

    Окай. Тебе нужно включить все настройки. Потом подключить {% load i18n %}. Потом выделить нужный текст {% trans "Product Information" %}. Дальге команда в терминале ./manage.py makemessages makemessages -l ru. Дальше ищешь папку в корне проекат locale/ru/LC_MESSAGES. В ней есть файл django.po. Открываешь увдишь такой текст
    ............
    #: minisite/apps/info/forms.py:21
    msgid "Product Information"
    msgstr ""
    ..............

    Сюда нужно ввести перевод -----> msgstr "ПЕРЕВОД СТРОКИ".
    Дальше нужно скомпилировать перевод ./manage.py compilemessages.
    Ну и еще нужно что бы на сайте был переключатель для языков.
    {% get_current_language as LANGUAGE_CODE %}
    {% get_available_languages as languages %}
    
    <html lang="{{LANGUAGE_CODE}}">
    {% for lang_code, lang_name in languages %}
        {% language lang_code %}
          {%if LANGUAGE_CODE != lang_code%}
           <a class="navbar-brand" href="#">{% trans 'Change language' %}</a>
          {%endif%}
        {% endlanguage %}
    {% endfor %}
    </html>
    Ответ написан
    4 комментария
  • Нужно сайт, не могу вспомнить название. Поможете?

    @throughtheether
    human after all
    Пришлось перерыть около 300 закладок, но, думаю, это он (переехал с pythonfasterway.uni.me).
    Ответ написан
    2 комментария