Django сигнализирует, что @receiver POST_SAVE не работает в PROD (хорошо в DEV)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Django сигнализирует, что @receiver POST_SAVE не работает в PROD (хорошо в DEV)

Сообщение Anonymous »

С ума сойти...
На разработчике мои сигналы (для отправки оповещения по почте) работают для всех сохранений (создание + обновление) и удалений.
Но < strong>в prod только действие удаления отправляет электронное письмо. Я не сразу заметил, что сигналы удаления работают, поэтому потратил много времени на поиск проблемы, вызванной брандмауэром (блокировка исходящей электронной почты).
Сохранение после публикации< /p>

Код: Выделить всё

@receiver(post_save, sender=Navette)
def alerte(sender, instance, created, **kwargs):
ref = instance.ref
user = instance.user.username

if created:
alert(pour=['tintin@gmail.com'],
sujet=f'Nouvelle navette pour la référence {ref} créé par {user}')
else:
alert(pour=['tintin@gmail.com'],
sujet=f'Mise à jour de la navette pour la référence {ref} par {user}')
Удалить сообщение

Код: Выделить всё

@receiver(post_delete, sender=Navette)
def alerte(sender, instance, **kwargs):
ref = instance.ref
user = instance.user
alert(pour=['tintin@gmail.com'],
sujet=f'La navette pour la référence {ref} a été supprimée par {user}')
только для информации: alert.py

Код: Выделить всё

def alert(**kwargs):

#ref = kwargs.get('ref', 'noref')
de = kwargs.get('de', 'toto@gmail.com')
pour = kwargs.get('pour', 'tintin@gmail.com')
sujet = kwargs.get('sujet', 'Sujet Général')
contenu = kwargs.get('contenu', 'cf. objet du mail')
fichier = kwargs.get('fichier', '')

host = 'smtp.gmail.com'
port = 465
user = settings.EMAIL_HOST_USER
passw = settings.EMAIL_HOST_PASSWORD

msg = EmailMessage()
msg['Subject'] = sujet
msg['From'] = de
msg['To'] = pour
msg.set_content('HTML uniquement')

msg.add_alternative(contenu, subtype='html')

with smtplib.SMTP_SSL(host, port) as smtp:
smtp.login(user, passw)
smtp.send_message(msg)
Как уже говорилось почти везде, я объявил свое приложение не только с его именем в settings.py: 'navette.apps.NavetteConfig', и зарегистрировал конфигурацию приложения в его __init__ -> default_app_config = 'navette.apps.ActivityAppConfig' даже если я думал, что слышал, что в DJANGO 3 это больше не нужно.
Наконец, вот мой файл apps.py для этого приложения

Код: Выделить всё

from django.apps import AppConfig

class NavetteConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'navette'

def ready(self):
import navette.signals
Есть идеи?
ИЗМЕНИТЬ
navette.views

Код: Выделить всё

@login_required
def NavetteCreateView(request):
form = NavetteDetailForm(request.POST)
if request.method == 'POST':
form = NavetteDetailForm(request.POST)
if form.is_valid():
form.save()
navette_ref = form.cleaned_data.get('ref')
logr.debug(f'{navette_ref} - enregistrée')
messages.success(
request, f'La navette {navette_ref} a bien
été créée.')
return redirect('/navettes')
else:
form = NavetteDetailForm()

context = {'form': form, 'title': 'Nouvelle Navette'}
return render(request, 'navette/navette_form.html',
context)
Я проверил form_valid -> True

Подробнее здесь: https://stackoverflow.com/questions/739 ... -ok-on-dev
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»