отправка электронной почты из Django view - PullRequest
0 голосов
/ 12 мая 2019

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

У меня есть существующая функция для сохранения данных формы заказа, и я хотел просто добавить функцию электронной почты в то же представление.Когда я пытаюсь добавить его напрямую, я получаю сообщения об ошибках о несовместимых пробелах.Поэтому я создал новую функцию электронной почты чуть ниже нового представления заказа, но я не знаю, как передать некоторые параметры из одной функции в другую.

Это близко, но когда я вызываю функцию New_Order, она выдаетошибка для order_instance не определена.

Views.py

@login_required
def New_Order(request):
    if request.user.userprofile.shipment_access:
        if request.method == 'POST':
            form = OrderForm(request.POST)
            if form.is_valid():
                order_instance = form.save(commit=True)
                order_instance.save()
            return Order_Email()
        else:
            form = OrderForm()
        return render(request, 'app/New_Order.html', {'form': form})
    else: 
        raise PermissionDenied

def Order_Email():
    subject = "Part Order" + order_instance.id
    orderNum = order_instance.id
    from_email = settings.EMAIL_HOST_USER
    to_email = ['dummyemail@gmail.com']
    message = order_instance
    send_mail(subject=subject, from_email=from_email, recipient_list=to_email, message=message, fail_silently=False)
    return HttpResponseRedirect('/Orders')

Я в порядке либо с одной комбинированной функцией, либо с двумя функциями и передачей параметров от одной к следующей.Если есть причина, по которой я не могу добавить шаги в одну функцию, вы можете объяснить, почему?Я все еще учусь, и я уверен, что что-то упускаю в этом отношении.

Спасибо Макс

Ответы [ 2 ]

1 голос
/ 12 мая 2019

добавить аргумент к Order_Email:

def Order_Email(order_instance):

и передать значение при вызове функции:

return Order_Email(order_instance)

, чтобы ваш код был таким:

@login_required
def New_Order(request):
    if request.user.userprofile.shipment_access:
        if request.method == 'POST':
            form = OrderForm(request.POST)
            if form.is_valid():
                order_instance = form.save(commit=True)
                order_instance.save()
            return Order_Email(order_instance)
        else:
            form = OrderForm()
        return render(request, 'app/New_Order.html', {'form': form})
    else: 
        raise PermissionDenied

def Order_Email(order_instance):
    subject = "Part Order" + order_instance.id
    orderNum = order_instance.id
    from_email = settings.EMAIL_HOST_USER
    to_email = ['dummyemail@gmail.com']
    message = order_instance
    send_mail(subject=subject, from_email=from_email, recipient_list=to_email, message=message, fail_silently=False)
    return HttpResponseRedirect('/Orders')
0 голосов
/ 12 мая 2019

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

        if form.is_valid():
            order_instance = form.save(commit=True)
            order_instance.save()
            return Order_Email(order_instance)
...

def Order_Email(order_instance):
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...