Как к переходу контрольного числа в Django (django-администратор)?

TL; DR Я обнаружил, что это проблема с некоторым облачным программным обеспечением, которое моя работа предоставляет под названием Cylance. Он определяет, что Meteor представляет собой вредоносный эксплойт, и убивает процесс всякий раз, когда я пытаюсь запустить команду.

Этапы отладки Чтобы выяснить, почему этот процесс был убит, я пошел на консоль macOS и запустил команду meteor create ~/myApp, процесс с именем CylanceSvc зарегистрировал сообщение «Слишком много запрошенные группы (65). Может вызвать проблемы с производительностью, когда задействованы сетевые каталоги. " Тогда следующая запись была:

Process:terminated path:/{user}/.meteor/packages/meteor-tool/.1.8.0_2.cty1uc.prsil++os.osx.x86_64+web.browser+web.browser.legacy+web.cordova/mt-os.osx.x86_64/dev_bundle/bin/node pid: violation:None occurences:1 SHA:

Когда я открыл программу Cylance, она упомянула, что она успешно заблокировала эксплойт. Я думаю, пришло время поговорить с ИТ. Я надеюсь, что это поможет кому-то еще прийти сюда.

8
задан 6 revs, 3 users 52% 3 August 2009 в 12:30
поделиться

3 ответа

def clean_status(self):
    status = self.cleaned_data.get('status')
    if status == 'pending':
        if self.instance and self.instance.status == 'activated':
            raise forms.ValidationError('You cannot change activated to pending')

    return status

This method is to be added in a Form subclass. Its name is clean_FIELD_NAME.

cleaned_data contains previous values. New value is stored in self.instance.

Alternatively, validate() method can be added to a forms.Field subclass. See Django documentation.

10
ответ дан 5 December 2019 в 08:25
поделиться

Вы можете сделать это в замещенном методе save , Следует помнить, что экземпляры модели Django не являются фактическими объектами базы данных, они просто получают свои значения оттуда при загрузке. Таким образом, вы можете легко вернуться к базе данных перед сохранением текущего объекта, чтобы получить существующие значения.

def save(self, *args, **kwargs):
    if self.status == 'pending':
         old_instance = MyClass.objects.get(pk=self.pk)
         if old_instance.status == 'activated':
              raise SomeError
     super(MyModel, self).save(*args, **kwargs)

В настоящее время нет другого хорошего способа вернуть пользователю сообщение об ошибке, кроме создания исключения. В настоящее время разрабатывается проект Google Summer of Code, чтобы включить «проверку модели», но он будет готов через несколько месяцев.

Если вы хотите сделать что-то подобное в админке, лучший способ - определить пользовательский ModelForm с переопределенным методом clean () . Тем не мение, на этот раз, поскольку это форма, у вас уже есть доступ к старым значениям без повторного нажатия db. Еще одно преимущество заключается в том, что вы можете вернуть пользователю ошибку проверки формы.

class MyModelForm(forms.ModelForm):

     class Meta:
          model = MyModel

    def clean_status(self):
        status = self.cleaned_data.get('status', '')
        if status == 'pending':
             if self.instance and self.instance.status == 'activated':
                  raise forms.ValidationError(
                      'You cannot change activated to pending'
                  )
         return status

 class MyModelAdmin(forms.ModelAdmin):
     form = MyModelForm
     model = MyModel
9
ответ дан 5 December 2019 в 08:25
поделиться

Разве это не подходящее место для использования сигналов вместо переопределения метода сохранения? Перехватить сохранение перед фиксацией, проверить текущее значение в базе данных и либо переслать сохранение, либо отклонить его?

Теперь я не уверен, блокирует ли сигнал запрос на сохранение или это происходит асинхронно, так что не стесняйтесь отклонить этот ответ, если сигнал не может быть использован для предотвращения сохранения при проверке.

Я против переопределения встроенных методов, если есть другой встроенный инструмент, который работает так же хорошо.

0
ответ дан 5 December 2019 в 08:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: