По вашему мнению, имя аргумента: post_pk
:
@login_required
def comment_create(request, post_pk):
# ...
, но в шаблонах URL вы используете только pk
:
path('post_detail/<int:pk>/comment_create/',views.comment_create, name='comment_create')
. переименуйте любой из двух, но переименование параметра в urls.py
приведет к обновлению всех {% url ... %}
для этого представления, так что вполне вероятно, что переименование параметра в представлении приведет к меньшему редактированию: [ 1110]
@login_required
def comment_create(request, pk):
if request.method == 'POST':
post = get_object_or_404(Post, pk=pk)
content = request.POST.get('content')
com_user = request.user
if not content:
messages.info(request, 'Write please')
return redirect('post_detail', pk)
Comment.objects.create(post=post, comment_user=com_user, comment_content=content)
return redirect('post_detatil', pk)
Обратите внимание, что обычно извлечение и проверка данных выполняется с помощью Form
, а не самого представления.
Если Ваш Регистратор является членом экземпляра вместо помех, Регистратор должен быть получен каждый раз, когда новый объект создается. Хотя эти издержки, вероятно, незначительны, но это - один недостаток.
С точки зрения дизайна Регистраторы не являются действительно свойством объекта, так как они обычно - метаинформация о Вашей системе, а не бизнес-информации в самой системе. A Logger
не действительно часть чего-то как a Car
возразите таким же образом Engine
или a Transmission
. Связь Регистраторов к объектам как участники (в большинстве случаев) не имеет смысла семантически больше, чем что-нибудь.
Азиды существенного различия от Суперкласса, регистрирующегося с именем подкласса, конечно, то, что у Вас будет тот Logger
объект на члена Вашего класса. В зависимости от того, сколько классов используют вход, это может быть огромной суммой Регистраторов, таким образом, чрезмерное увеличение размера памяти может быть проблемой.
Плюс с абстрактной точки зрения, регистратор действительно принадлежит классу и может быть совместно использован всеми экземплярами, а не каждым экземпляром, нуждающимся в его собственной частной копии, таким образом, имеет смысл объявлять это как статичное. Зеркальное отражение вопроса вокруг, какие преимущества это имеет к созданию его нестатичный? (Способность передать getClass()
в getLogger()
звоните вместо того, чтобы передать в постоянном классе, единственная вещь, о которой я могу думать, и это - такая крошечная вещь).
Другой, вероятно, незначительный довод "против": потраченная впустую память, особенно когда у Вас есть много экземпляров, каждого с его собственным регистратором
Попытайтесь отладить ошибку, где Вы видите сообщение, сгенерированное SuperClass
класс, когда ошибка действительно зарегистрирована SubClass
класс. Я видел несколько ситуаций, где разработчики создают a LoggingUtils
класс, который генерирует сообщения, которые обычно копируют вещи, которые уже испеклись - в платформой журналирования.
Единственная реальная ситуация я вижу использование общего экземпляра входа, является чем-то как свободное городское население Apache регистратор HttpClient httpclient.wire
который совместно используется несколькими классами для входа содержания запросов и ответов, отправленных через клиент. Эта конкретная ситуация с входом не регистрирует информацию для фактической реализации пакета, это регистрирует информацию о целой http "транзакции".