Как я отключаю и повторно включаю консоль, входящую в систему Python?

Это потому, что в вашей модели Profile вы добавляете столбец user в качестве ForeignKey, который приводит к NOT NULL, так что выдает ошибку. Чтобы решить эту проблему, вам нужно изменить метод add_image примерно так:

@login_required
def add_image(request):
     form = ProfileImageForm()
     #form.user = request.user
     if request.method == "POST":
         form = ProfileImageForm(data=request.POST, files=request.FILES)
     if form.is_valid():
         form = form.save(commit=False) # change is here
         form.user=request.user.pk # change is here
         form.save()
         return redirect('userPage')
     else:
         return render(request, "users/user_image_form.html", {"form": form

Значение request.user.pk получить, если вы вошли в систему. Но если вы вошли в систему, вам нужно указать form.user = your_specified_id, какой идентификатор существует в таблице User. Если ваш случай таков, вы являетесь администратором, и вам нужно добавить изображение другим пользователям, так что вам нужно передать идентификатор пользователя в вашем методе add_image.

Добавить в ProfileImageForm.py добавить user в список полей

134
задан Piotr Dobrogost 22 August 2018 в 09:55
поделиться

8 ответов

Я нашел решение для этого:

logger = logging.getLogger('my-logger')
logger.propagate = False
# now if you use logger it will not log to console.

Это предотвратит ведение журнала из отправляется в верхний регистратор, который включает ведение журнала консоли.

183
ответ дан 23 November 2019 в 23:48
поделиться

Если Вы хотите, отключают определенный регистратор временно, вот то, что, сделал.

Журнал В качестве примера

2019-10-02 21:28:45,663 django.request PID: 8  Internal Server Error: /service_portal/get_all_sites

Код

django_request_logger = logging.getLogger('django.request')
django_request_logger.disabled = True
django_request_logger.disabled = False
0
ответ дан 23 November 2019 в 23:48
поделиться

Путем изменения одного уровня в "logging.config.dictConfig" Вы сможете взять целый уровень входа к новому уровню.

logging.config.dictConfig({
'version': 1,
'disable_existing_loggers': False,
'formatters': {
    'console': {
        'format': '%(name)-12s %(levelname)-8s %(message)s'
    },
    'file': {
        'format': '%(asctime)s %(name)-12s %(levelname)-8s %(message)s'
    }
},
'handlers': {
    'console': {
        'class': 'logging.StreamHandler',
        'formatter': 'console'
    },
#CHANGE below level from DEBUG to THE_LEVEL_YOU_WANT_TO_SWITCH_FOR
#if we jump from DEBUG to INFO
# we won't be able to see the DEBUG logs in our logging.log file
    'file': {
        'level': 'DEBUG',
        'class': 'logging.FileHandler',
        'formatter': 'file',
        'filename': 'logging.log'
    },
},
'loggers': {
    '': {
        'level': 'DEBUG',
        'handlers': ['console', 'file'],
        'propagate': False,
    },
}

})

0
ответ дан 23 November 2019 в 23:48
поделиться

Найденный изящным решением с помощью [1 110] декораторы , который решает следующую проблему: что, если Вы пишете модуль с несколькими функциями, каждым из них с несколькими сообщениями отладки, и Вы хотите отключить вход в систему всех функций, но тот Вы в настоящее время фокусируетесь на?

можно сделать это с помощью декораторов:

import logging, sys
logger = logging.getLogger()
logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)


def disable_debug_messages(func):
    def wrapper(*args, **kwargs):
        prev_state = logger.disabled
        logger.disabled = True
        result = func(*args, **kwargs)
        logger.disabled = prev_state
        return result
    return wrapper

Затем можно сделать:

@disable_debug_messages
def function_already_debugged():
    ...
    logger.debug("This message won't be showed because of the decorator")
    ...

def function_being_focused():
    ...
    logger.debug("This message will be showed")
    ...

, Даже если Вы звоните function_already_debugged из function_being_focused, сообщения отладки от function_already_debugged не будут, показал. Это гарантирует наблюдение только сообщений отладки от функции, на которой Вы фокусируетесь.

Hope это помогает!

0
ответ дан 23 November 2019 в 23:48
поделиться

Вы можете использовать:

logging.basicConfig(level=your_level)

где your_level является одним из следующих:

      'debug': logging.DEBUG,
      'info': logging.INFO,
      'warning': logging.WARNING,
      'error': logging.ERROR,
      'critical': logging.CRITICAL

Итак, если вы установите your_level на logging.CRITICAL , вы будут получать только критические сообщения, отправленные:

logging.critical('This is a critical error message')

Установка your_level на logging.DEBUG покажет все уровни ведения журнала.

Для получения дополнительных сведений ознакомьтесь с примерами ведения журнала .

Таким же образом, чтобы изменить уровень для каждого обработчика, используйте функцию Handler.setLevel () .

import logging
import logging.handlers

LOG_FILENAME = '/tmp/logging_rotatingfile_example.out'

# Set up a specific logger with our desired output level
my_logger = logging.getLogger('MyLogger')
my_logger.setLevel(logging.DEBUG)

# Add the log message handler to the logger
handler = logging.handlers.RotatingFileHandler(
          LOG_FILENAME, maxBytes=20, backupCount=5)

handler.setLevel(logging.CRITICAL)

my_logger.addHandler(handler)
66
ответ дан 23 November 2019 в 23:48
поделиться

Нет необходимости перенаправлять стандартный вывод. Вот лучший способ сделать это:

import logging
class MyLogHandler(logging.Handler):
    def emit(self, record):
        pass

logging.getLogger().addHandler(MyLogHandler())

Еще более простой способ:

logging.getLogger().setLevel(100)
10
ответ дан 23 November 2019 в 23:48
поделиться

Я не очень хорошо знаю модуль логирования, но я использую его так, как обычно хочу отключить только отладочные (или информационные) сообщения. Вы можете использовать Handler.setLevel() для установки уровня логирования на CRITICAL или выше.

Также, вы можете заменить sys.stderr и sys.stdout на файл, открытый для записи. См. http://docs.python.org/library/sys.html#sys. stdout. Но я бы не рекомендовал этого делать.

2
ответ дан 23 November 2019 в 23:48
поделиться

Я использую:

logger = logging.getLogger()
logger.disabled = True
... whatever you want ...
logger.disabled = False
91
ответ дан 23 November 2019 в 23:48
поделиться
Другие вопросы по тегам:

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