• Как установить pillow-simd?

    ruchej
    @ruchej Автор вопроса
    Конструктор мебели. Пишу макросы для К3-Мебель
    Для установки библиотеки pillow-simd под ubuntu, надо установить следующее

    sudo apt-get install libtiff5-dev libjpeg8-dev zlib1g-dev \
        libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev libfribidi-dev \
        tcl8.6-dev tk8.6-dev python-tk
    Ответ написан
    Комментировать
  • Как загрузить несколько файлов из формы в DJANGO?

    ruchej
    @ruchej Автор вопроса
    Конструктор мебели. Пишу макросы для К3-Мебель
    Принял такое решение данной задачи. За основу был взять пример из документации.
    Суть решения.
    Есть две модели: одна это поля для формы связи, вторая хранение файлов.
    В файле forms.py пишем класс на основе модели contact. Добавляем поле files со свойствами мультизагрузки.
    В представлении получаем список файлов files = request.FILES.getlist('files'). После проверки правильности заполнения формы if form.is_valid() сохраняем содержимое в базу и получаем id этой записи id = form.save().pk. Далее получаем объект contact согласно полученному id - contact = Contact.objects.get(pk=id). Для этого объекта, циклом записываем полученные файлы fl = Files(contact=contact, file = f).
    models.py
    from django.db import models
    
    
    class Contact(models.Model):
    
        name = models.CharField(max_length=50, verbose_name='Имя')
        phone = models.CharField(max_length=50, verbose_name='Телефон')
        email = models.EmailField(max_length=50, blank=True, verbose_name='email')
        body = models.TextField(verbose_name='Текст сообщения')
    
        class Meta:
            verbose_name = "Контакт"
            verbose_name_plural = "Контакты"
    
        def __str__(self):
            return "{} {}".format(self.name, self.phone)
    
    
    
    class Files(models.Model):
    
        file = models.FileField(upload_to='contact', blank=True, null=True, verbose_name='Файл')
        contact = models.ForeignKey(Contact, blank=True, null=True, on_delete=models.CASCADE)
    
        class Meta:
            verbose_name = "Файлы"
            verbose_name_plural = "Файлы"
    
        def __str__(self):
            return self.file.name

    view.py
    from django.views.generic.edit import FormView
    from .forms import ContactForm
    from .models import Contact, Files
    import pdb # pdb.set_trace()
    
    class ContactView(FormView):
        form_class = ContactForm
        template_name = 'contact.html'
        success_url = '#' # адрес страницы успеха отправки формы
    
        def post(self, request, *args, **kwargs):
            form_class = self.get_form_class()
            form = self.get_form(form_class)
            files = request.FILES.getlist('files')
            if form.is_valid():
                id = form.save().pk
                contact = Contact.objects.get(pk=id)
                if files:
                    for f in files:
                        fl = Files(contact=contact, file = f)
                        fl.save()
                return self.form_valid(form)
            else:
                return self.form_invalid(form)

    forms.py
    from django import forms
    
    from .models import Contact
    
    
    class ContactForm(forms.ModelForm):
    
        files = forms.FileField(widget=forms.ClearableFileInput(attrs={'multiple': True}), required=False)
    
        class Meta:
            model = Contact
            fields = ('name', 'phone', 'email', 'body')

    Ответ написан
  • Как отобрать посты по статусу?

    ruchej
    @ruchej Автор вопроса
    Конструктор мебели. Пишу макросы для К3-Мебель
    На данный момент нашёл такое решение.
    Изменил во view.py строку
    Post.published.all()
    на
    Post.published.filter(rubric__status="published")
    Надеюсь это верное решение. По крайней мере, результат тот, что ожидал.
    Решение нашёл в документации по django

    Для сортировки по полю из другой модели, используйте синтаксис аналогичный тому, который используется при фильтрации по полям связанной модели. То есть, название поля, далее два нижних подчеркивания (__), и имя поля в новой модели, и так далее. Например:

    Entry.objects.order_by('blog__name', 'headline')
    Ответ написан
    Комментировать
  • Как настроить VDS используя только nginx?

    ruchej
    @ruchej Автор вопроса
    Конструктор мебели. Пишу макросы для К3-Мебель
    Мне подсказали ресурс, где есть не плохие описания по настройки VDS.
    Вот одна из страниц с описанием настройки фаервола.
    Но тут автор отключает в CentOS firewalld и использует привычную ему iptables.
    И приводит скрипт для iptables. Сделал такой скрипт и закрыл себе доступ по ssh.
    Я решил оставить firewalld. Поменял порт для ssh, отключил службу dhcpv6-client, по рекомендациям (правда не знаю зачем отключать). Включил службу http, что бы сайт работал. До этого по IP страница была не доступна.
    Но вот хотел спросить. На данной странице автор использует iptables и применяет свои правила, что бы ничего лишнего не нагружало сервер. А вопрос такой: если я оставляю firewalld, то как сделать такие же настройки, что бы сервер был максимально защищён?
    Ответ написан
    Комментировать
  • Как в django сверстать письмо?

    ruchej
    @ruchej
    Конструктор мебели. Пишу макросы для К3-Мебель
    Подскажите, как быть со стилями? Стили тоже в шаблон интегрировать, а не хранить в css?
    Ответ написан
    Комментировать
  • Как в django определить, что запрос ajax XMLHttpRequest?

    ruchej
    @ruchej Автор вопроса
    Конструктор мебели. Пишу макросы для К3-Мебель
    Так как ajax запрос делал на javascript, а не на jQuery, то надо было руками дописать в заголовок запроса нужный атрибут, что бы django определил request.is_ajax()
    fetch('http://127.0.0.1:8000/main/katalog/5/', {
                  method: 'GET',
                  headers: {'X-Requested-With': 'XMLHttpRequest'}});
    Ответ написан
    Комментировать
  • Как работать с объектом модели в шаблоне?

    ruchej
    @ruchej Автор вопроса
    Конструктор мебели. Пишу макросы для К3-Мебель
    Всех благодарю!
    Хороший был совет данные готовить в методе модели.
    В models.py модели FurnitureProduct добавил метод
    def get_images_path(self):
            im_path = []
            imobj = Images.objects.filter(furnproduct_id=self.pk)
            if imobj:
                for obj in imobj:
                    im_path.append(obj.imagepath.url)
            return im_path

    И в шаблоне получаю список значений методом: {{ product.get_images_path }}
    Я новичок, мне и в голову такое не пришло.
    Ответ написан
    Комментировать
  • Как назначать тип содержания меню?

    ruchej
    @ruchej Автор вопроса
    Конструктор мебели. Пишу макросы для К3-Мебель
    Благодарю за помощь.
    Пока решил пойти следующим способом.
    Т.к. макет сайта и его содержимое должны изначально прорабатываться, то и разделы меню должны изначально определены. Например, имеем главные меню: главная, каталог, интересное, о компании.
    Для меню "каталог" я сделал так.
    Создана модель Catalog. В неё заносятся каталоги товара с подкаталогами. Тут использовал mptt. В результате могу получить каталог Кухни с подкаталогами: пластик, шпон и т.д.
    При создании макета страницы, к меню "Каталог" я подключаю списки дерева из модели Catalog используя mptt. Ссылки на каждый раздел каталога это id в БД. Далее уже через вьюшку обрабатываю эти ссылки, как в уроке официальной документации.
    Так всё-таки проще, к тому же админка это не конструктор сайта, как джумла.

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