Задать вопрос
  • CMS на базе Yii2?

    webinar
    @webinar Куратор тега Yii
    Учим yii: https://youtu.be/-WRMlGHLgRg
    1. Перебрал все магазины на yii2 - все ужасно. Либо крайне не универсально, либо крайне медленно работает.
    2. Не стоит искать cms на yii, надо писать cms на yii
    3. Если нужен хороший магазин на базе framework - есть shop-script, на базе их же framework webasyst. Как cms - намного лучше всего написанyого на yii (имею в виду opensource cms магазинов), как framework - барахло полное. Если надо именно на yii, см. пункт2
    4. Если нужна модульная структура, то не надо искать cms, надо искать набор готовых модулей, совместив которые, получите cms. Модульная структура удобна, и в этом кроется ответ на вопрос "почему нет готовых CMS для магазинов на yii". Они есть, но в виде модулей. Отдельно RBAC, отдельно авторизация, отдельно nestedsets для категорий, отдельно яндекс касса и т.д. Просто совместите их, натяните одинаковый дизайн и все.

    PS: не буду говорить от Вашего имени, но когда я задавался этим вопросом ситуация была в том, что я знал азы yii, но не мог написать магазин. Тогда я задумался, а может взять готовый и моих азов хватит его дорабатывать и видоизменять? Путь в деградацию и гавнокод. Лечится чтением документации и глубоким разбором кода framework, а так же практикой. Теперь я смотрю на проекты типа eximuscommerce и понимаю, что быстрее напишу сам, чем заставлю правильно работать это.
    Ответ написан
    8 комментариев
  • CMS на базе Yii2?

    еще есть easyiicms.com но автор что-то давно ничего не обновлял
    Ответ написан
    1 комментарий
  • Как правильно разработать CRM-систему с нуля с архитектурной точки зрения?

    DmitriyEntelis
    @DmitriyEntelis
    Думаю за деньги
    1) На сколько верным было решением использовать node.js и mongo?

    Вопрос во многом холиварный. CRM это по определению много-много реляционных данных. Хранить это в любом nosql - я лично считаю очень плохой идеей. Особенно когда через полгодика пойдут change request`ы и выяснится что вещи которые в реляционке делаются за пару минут в nosql могут потребовать изменения архитектуры хранения и занять человеко-недели.

    3) Сайтов у компании - масса, большая часть которых - лэндинги на чистых html с php-скриптом на почту. Все заказы ссылаются на единый gmail-ящик. Можно ли грабить эти данные из ящика, чтобы отправлять их в облако?

    Можно. Но с учетом того что доставка email вообще говоря не гарантирована - завязывать один из ключевых бизнес процессов на это выглядит мягко говоря странно. По хорошему - сделать в вашей CRM, API наружу для формирования заказов и переписать все сайты для работы с ним.
    * Странно что Ваш программист не может ответить на этот вопрос с закрытыми глазами

    4) Какие существуют удобные облачные сервисы, которые предоставляют API для node.js?

    Я рискну предположить что ЛПР где то услышал про облака и ему понравилось. На полном серьезе отдавать весь бизнес контент во внешний сервис - это надо или полным идеалистом быть, или просто не понимать о чем речь идет. Только свои железные сервера, только физическое резервирование.

    5) Какова примерная стоимость подобного проекта в $ ?

    Смотря где вы находитесь, насколько легально все это оформляете
    В Мск приличного разработчика сейчас можно найти за 100-120 т.р. net, в регионах на 40-60 net (от региона зависит).
    Сколько их нужно - без ТЗ сказать нереально, но думаю что оценка снизу это 3-4 разработчика
    +тимлид 100% +project manager 100% +аналитик на старте +дизайнер по желанию +devops на аутсорсе итд

    PS Без обид, но ищите грамотного CTO который это все организует. Это в любом случае длинный проект, так что можно и в штат найти человека.
    Ответ написан
  • Как правильно разработать CRM-систему с нуля с архитектурной точки зрения?

    @GeraldIstar
    Frontend
    Не могу ответить на все вопросы, но на мой взгляд если используете python - берите django. Он более предназначен для крупных проектов.
    Node.js - более ориентирован на микросервисную архитектуру. Если умеете ее готовить - то ради бога, но целиком на ноде делать думаю не стоит. Монгу стоит использовать только в случае если вы действительно понимаете отличия РСУБД от mongo.
    3) Думаю это не проблема.
    4) API для облачных серверов - а там какая разница, что за язык будет? Разве что наличие уже подготовленной либы.
    5) Больше 1 миллиона точно.
    Ответ написан
    1 комментарий
  • Как разобраться с конструкторами?

    1) Box catBox;   // объявили переменную с типом Box и именем catBox (просто объявили, в ней ничего нет)
    2) new Box();     // создали новый объект типа Box (и бросили)
    3) catBox = new Box();    // создали новый объект типа Box и сказали, что с ним можно пообщаться используя 3) переменную catBox
    4) Box catBox = new Box(); // объявили переменную и сразу с ней связали объект
    Ответ написан
    Комментировать
  • Как поменять имя приложения и модель на русский в админке Django?

    zigen
    @zigen
    1. In apps.py:

    from django.apps import AppConfig
    
    class FacesetConfig(AppConfig):
        name = 'faceset'
        verbose_name = "Что-то твое на русском на родном"


    2. models.py

    class Timetables(models.Model):
        name = models.CharField(u'time', max_length=30)
    
        class Meta:
            verbose_name = 'Что-то твое на русском на родном'
            verbose_name_plural = 'Что-то твое на русском на родном'
    
        def __str__(self):
            return self.name
    Ответ написан
    2 комментария
  • Как обуздать Django messages?

    winordie
    @winordie
    Лучшая документация -- исходники
    Давайте посмотрим как работает framework messages.

    https://github.com/django/django/blob/master/djang...
    def messages(request):
        return {
            'messages': get_messages(request),
            'DEFAULT_MESSAGE_LEVELS': DEFAULT_LEVELS,
        }
    ...
    def get_messages(request):
        if hasattr(request, '_messages'):
            return request._messages
        else:
            return []

    Так messages попадают на страницу. Т.е. они берутся из request._messages. Как же они туда попадают?

    https://github.com/django/django/blob/master/djang...
    class MessageMiddleware(MiddlewareMixin):
        def process_request(self, request):
            request._messages = default_storage(request)
    ...
    def default_storage(request):
        return import_string(settings.MESSAGE_STORAGE)(request)
    ...
    MESSAGE_STORAGE = 'django.contrib.messages.storage.fallback.FallbackStorage'

    Значит в request._messages у нас лежит FallbackStorage(request)

    Перейдем к нашему коду
    messages.error(request, 'Ваш диапазон дат занят для данного объекта.')

    Что тут происходит? Посмотрим:
    https://github.com/django/django/blob/master/djang...
    def error(request, message, extra_tags='', fail_silently=False):
        add_message(request, constants.ERROR, message, extra_tags=extra_tags,
                    fail_silently=fail_silently)
    ...
    def add_message(request, level, message, extra_tags='', fail_silently=False):
        if not isinstance(request, HttpRequest):
            raise TypeError("add_message() argument must be an HttpRequest object, "
                            "not '%s'." % request.__class__.__name__)
        if hasattr(request, '_messages'):
            return request._messages.add(level, message, extra_tags)  # *** THIS ***
        if not fail_silently:
            raise MessageFailure('You cannot add messages without installing '
                        'django.contrib.messages.middleware.MessageMiddleware')

    Ага, вызывается метод add знакомого нам объекта FallbackStorage.
    Ему передается в качестве параметров:
    - level = constants.ERROR = 40
    - message = 'Ваш диапазон дат занят для данного объекта.'
    - extra_tags = ''

    Посмотрим на этот метод
    https://github.com/django/django/blob/master/djang...
    def add(self, level, message, extra_tags=''):
            if not message:
                return
            level = int(level)
            if level < self.level:
                return
            # Add the message.
            self.added_new = True
            message = Message(level, message, extra_tags=extra_tags)
            self._queued_messages.append(message)
    ...
    def _get_level(self):
            if not hasattr(self, '_level'):
                self._level = getattr(settings, 'MESSAGE_LEVEL', constants.INFO)
            return self._level

    Из этого кода можно сделать вывод что сообщение попадает в очередь сообщений если его уровень более или равен тому который задан в settings.MESSAGE_LEVEL (по умолчанию = contants.INFO = 20)

    Таким образом чтобы добавлялись только наши сообщения необходимо:
    1) в settings.py установить
    # settings.py
    ...
    MY_SUPER_ERROR = 80
    MESSAGE_LEVEL = MY_SUPER_ERROR
    ...

    2) Во вью писать
    if not available_cars:
            carstoshow = None
            messages.add_message(request, settings.MY_SUPER_ERROR, 'Ваш диапазон дат занят для данного объекта.')
            return redirect('car_detail', pk=car_used_id)
    Ответ написан
    1 комментарий
  • Как реализовать загрузку файлов на сервер в Django?

    zigen
    @zigen
    From docs:

    # In forms.py...
    from django import forms
    
    class UploadFileForm(forms.Form):
        title = forms.CharField(max_length=50)
        file = forms.FileField()


    Обрабатываем форму:

    from django.http import HttpResponseRedirect
    from django.shortcuts import render
    from .forms import UploadFileForm
    
    def upload_file(request):
        if request.method == 'POST':
            form = UploadFileForm(request.POST, request.FILES)
            if form.is_valid():
                form.save()
                return HttpResponseRedirect('/success/url/')
           return render(request, 'upload.html', {'form': form})
        else:
            form = UploadFileForm()
        return render(request, 'upload.html', {'form': form})
    Ответ написан
    2 комментария
  • Какую админку выбрать для Django?

    aRegius
    @aRegius
    Python Enthusiast
    Привет.

    Конкретно какую - на этот вопрос ответа у меня нет по причине, созвучной вашей.

    Но, посмотрите, может эта информация поможет каким-либо образом:
    1. Здесь можно посмотреть описание и сравнение Админок.
    2. Гринфилды (авторы небезызвестной Two Scoops...) среди более популярных отмечают django-grappelli, django-suit и django-admin-bootstrapped.

    Чем смог, как говорится...
    Ответ написан
    4 комментария
  • Django, регистрация пользователя. Как реализовать?

    gordon_shamway
    @gordon_shamway
    class UserRegistrationForm(forms.ModelForm):
        password = forms.CharField(label='Password', widget=forms.PasswordInput)
        password2 = forms.CharField(label='Repeat password', widget=forms.PasswordInput)
    
        class Meta:
            model = User
            fields = ('username', 'first_name', 'email')
    
        def clean_password2(self):
            cd = self.cleaned_data
            if cd['password'] != cd['password2']:
                raise forms.ValidationError('Passwords don\'t match.')
            return cd['password2']

    def register(request):
        if request.method == 'POST':
            user_form = UserRegistrationForm(request.POST)
    
            if user_form.is_valid():
                # Create a new user object but avoid saving it yet
                new_user = user_form.save(commit=False)
                # Set the chosen password
                new_user.set_password(user_form.cleaned_data['password'])
                # Save the User object
                new_user.save()
                profile = Profile.objects.create(user=new_user)
               
                return redirect('/account/login/')
        else:
            user_form = UserRegistrationForm()
        return render(request, 'account/register.html', {'user_form': user_form})

    class Profile(models.Model):
        user = models.OneToOneField(settings.AUTH_USER_MODEL)
        position_lat = models.DecimalField(decimal_places=8, max_digits=10, verbose_name="Широта")
        position_long = models.DecimalField(decimal_places=8, max_digits=10, verbose_name="Довгота")
        def __str__(self):
            return 'Profile for user {}'.format(self.user.username)
    Ответ написан
    Комментировать
  • Чем производить контроль траффика на Linux-шлюзе?

    insiki
    @insiki
    broken pipe
    Squid.
    Ответ написан
    Комментировать
  • Зачем использовать pandas и numpy для анализа данных?

    @asd111
    Python используется потому что его можно потом встроить в рабочее приложение. Так делает гугл, яндекс и др.
    Numpy и т.п. библиотеки написаны на С поэтому они не такие медленные как кажется.
    Там где не хватает скорости python библиотек написанных на С, используется С++ а не SQL.
    SQL подходит для некоторых задач, но нарисовать график с помощью SQL нельзя, а с помощью тех же python библиотек возможно. В анализе данных часто строят графики, считают векторные и т.п. произведения, на SQL такое писать неудобно.
    Если не используется SQL или python, то используют обычно wolfram mathematica или mathcad и т.п. математические программы где удобно считать матрицы, векторы, производные и удобно строить графики.
    С помощью python пишут софт, в котором используется результат анализа данных, поэтому и саму обработку данных пишут на python(или на С++).
    Для python есть большие machine learning библиотеки наподобие google tensor flow https://www.tensorflow.org/ что опять же говорит о том, что данный язык является стандартом для написания прикладных приложений, связанных с machine learning, так же как SQL является стандартом для работы с БД.
    Ответ написан
    2 комментария
  • Windows forms, только учусь?

    EreminD
    @EreminD
    Кое-что умею
    В данном случае, самое простое - это вот так:
    private void button1_Click(object sender, EventArgs e)
            {
                conpoezdb.Open();
                SqlDataAdapter SDA = new SqlDataAdapter("INSERT INTO train(number,place, count, data, time)VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "')", conpoezdb);
                SDA.SelectCommand.ExecuteNonQuery();
                conpoezdb.Close();
                MessageBox.Show("saved");
                updateView();
            }
    
    private void button4_Click(object sender, EventArgs e)
            {
                updateView();
            }
    
    private void updateView()
            {
                conpoezdb.Open();
                SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM train", conpoezdb);
                DataTable data = new DataTable();
                SDA.Fill(data);
                dataGridView1.DataSource = data;
                conpoezdb.Close();
            }


    В общем, логику обновления datagridview выносим в отдельный метод и дергаем его по нажатию на view и/или по нажатию на save

    UPD: ну это при условии, что вам нужна кнопка view
    UPD1: вот так вот, если без кнопуи view
    private void button1_Click(object sender, EventArgs e)
            {
                conpoezdb.Open();
    
                //пишем в бд
                SqlDataAdapter SDA = new SqlDataAdapter("INSERT INTO train(number,place, count, data, time)VALUES ('" + textBox1.Text + "', '" + textBox2.Text + "','" + textBox3.Text + "','" + textBox4.Text + "','" + textBox5.Text + "')", conpoezdb);
                SDA.SelectCommand.ExecuteNonQuery();
    
                 //запрашиваем по новой
                SqlDataAdapter SDA = new SqlDataAdapter("SELECT * FROM train", conpoezdb);
                conpoezdb.Close();
    
                DataTable data = new DataTable();
                SDA.Fill(data);
                dataGridView1.DataSource = data;
    
                MessageBox.Show("saved");
            }
    Ответ написан
    Комментировать
  • С помощью чего реализовать календарную ленту в Qt?

    @tugo
    1. Найти уже готовое, например https://www.kdab.com/kd-chart/
    2. Встроить QWebView, в нем выполнять JQuery код, реализующий вашу диаграмму. Гуглите "gantt chart jquery"
    3. Сделать самому. Разрабатываемый класс будет наследником QWidget и состоять из других виджетов (QLabel, QCombobox и т.д.). Настраиваете размещение этих виджетов, их внешний вид (у стандартных виджетов можно сильно менять внеший вид - мама не узнает) и поведение.
    Ответ написан
    Комментировать
  • Как получить количество продуктов из foreign key django?

    @deliro
    vendor.product_set.count()

    Когда ты создаёшь FK(Vendor) для модели Product, Django создаёт обратную связь (менеджер) для модели Vendor, имя по-умолчанию - имямодели_set. Изменяется переопределением related_name. Например:
    class Product(models.Model):
        vendor = models.ForeignKey(Vendor, related_name='products')

    При таком коде ты сможешь обращаться к продуктам так:
    some_vendor.products.all()
    Раз это менеджер, для него доступны все те же действия, что и для стандартного (objects):
    some_vendor.products.filter(key=value)
    some_vendor.products.create(your=params)  # Создаст продукт с уже заполненым полем vendor=some_vendor


    Следует отметить, что если у модели два FK на одну модель, то related_name переопределить придётся, иначе появляется двусмысленность:
    class Message(Model):
        sender = ForeignKey(User)
        recipient = ForeignKey(User)
        text = TextField()

    При таком коде, если ты хочешь получить, например, сообщения, которые отправил/получил user, совершенно неясно, что нужно писать, поэтому нужно либо отключить обратную связь (related_name='+'), либо предоставить её:
    class Message(Model):
        sender = ForeignKey(User, related_name='sent_messages')
        recipient = ForeignKey(User, related_name='received_messages')
        text = TextField()
    Ответ написан
    4 комментария
  • Как зарабатывают разработчики на бесплатных framework`ах?

    Denormalization
    @Denormalization
    Взять тот же Laravel:
    - Как минимум 3 сопутсвующих ПЛАТНЫХ проекта (forge, spark, envoyer).
    - Конференции с нехилым ценником.
    - Консультации
    - Не уверен, но возможно laracasts что-то отстегивает.

    И так же у многих крупных OpenSource проектов. Заработок идет на enterprise решениях на основе их проекта. (Та же платная поддержка).

    Некоторые (на вскидку не вспомню) OpenSource проекты получают финансированние от крупных организаций (Google, Yahoo, Microsoft, IBM).
    Ответ написан
    Комментировать
  • На чем писать кроссплатформенное GUI приложение?

    aparusov
    @aparusov
    Разработчик ПО, предприниматель
    Да, C++ на порядок сложнее по сравнению Java и С#, хотя Qt многое упрощает.

    Для кроссплатформенных офисных приложений хороша Java, - GUI на JavaFX или Swing, но не SWT (в нем много косяков, которые отнимают много времени). Если лучше знаешь C#, то на нем (язык посовременнее, фреймворк попроще будет) и сразу в MonoDevelop (так-как нужна кроссплатформенность).

    С серверной частью (если трехзвенка) важно определиться на чем она должна работать (в какой ОС). Если тоже кроссплатформенная, то лучше все на java делать и разобраться с серверными технологиями Java: Spring или Servlet-контейнер или даже сервер Java EE. Использовать ORM (Hibernate, например). Но с этим стеком Java придется повозиться, - порог вхождения высокий, зато потом открываются богатые возможности (независимые от ОС! ).
    Ответ написан
    Комментировать
  • Как вывести новости на страницу используя Django Template?

    По итогам обсуждения в комментариях к вопросу дать содержательный ответ не представляется возможным. Варианты:
    1) Займитесь Python и Django, разберитесь, как это всё работает.
    2) Найдите специалиста, который вам это сделает.
    Ответ написан
    Комментировать
  • На чем писать кроссплатформенное GUI приложение?

    sfi0zy
    @sfi0zy
    Creative frontend developer
    Для C# есть mono - свободный вариант .NET Framework (не то, чтобы во всем соответствовал ему, но работать можно). Работает, соответственно, и на Linux и на MacOS и на Windows. В местной IDE (MonoDevelop) можно создавать GUI в стиле drag&drop, как в старые времена на уроках информатики....

    От себя хочу добавить мысль о такой штуке как Vala. Если вы не слышали, это такой язык (я бы сказал смесь C-C#-Javascript), есть сравнение c C# для быстрого перехода на нее, удобная работа с GTK+ - окошки, кнопочки - все, что нужно делается просто и быстро, и, чтобы совсем не горевать, все это транслируется в чистый си. Соответственно собирается под любую платформу, где будет работать GTK+.
    Ответ написан
    2 комментария
  • Как правильно хранить настройки в django проекте?

    sim3x
    @sim3x
    разнести настройки "по категориям"
    Никогда такой надобности не было

    settings1.py
    foo='bar'

    settings.py
    from settings1.py import *

    зависимости от environment, например, db.py разный для prod\dev\test


    myprog
    ├── manage.py
    └── myprog
        ├── __init__.py
        ├── settings
        │   ├── __init__.py
        │   ├── global.py
        │   └── settings_test.py
        ├── urls.py
        └── wsgi.py


    __init__.py
    import os
    
    if os.environ['test']:
        from settings_test.py import *


    global.py/main.py/...
    # common settings for all env types

    settings_test.py
    from global.py import *
    
    foo='buzz'
    Ответ написан
    Комментировать