在 Django 中向用户返回响应后发送电子邮件
Send email after returning response to user in django
我想向新用户发送验证邮件。但是由于连接速度慢,发送电子邮件需要很长时间,用户会看到 CONNECTION TIMED OUT
错误。我想 return 回复用户,然后发送电子邮件。我已经尝试 StreamingHttpResponse
并使用 yield
。但它 return 得到了令人毛骨悚然的反应,而不是我想要的反应。
我更喜欢使用 function view
来完成它,但如果我必须使用 class view
也没有问题。我该怎么办?
from django.shortcuts import render
from django.http import HttpRequest
def sign_up (request: HttpResponse):
method = request.method
if method == 'GET':
# checking cookies
return render(request, "template name", context)
if method == 'POST':
# validating data
if unvalid_data:
return render(request, "template name", context)
# saving data
return render(request, "template name", context)
# sending email
感谢 NeuronQ in this question 我得到了这个想法并且它正在运行:
# myclass.py
from django.http import HttpResponse
__all__ = ['do_after_render']
class do_after_response (HttpResponse):
def __init__(self, do_after, content=b'', do_after_args=[], *args, **kwargs):
self.do_after = do_after
self.do_after_args = do_after_args
super().__init__(content=content, *args, **kwargs)
def close(self):
super().close()
self.do_after(*self.do_after_args)
def do_after_render (do_after, request, template_name, context=None, do_after_args=[], content_type=None, status=None, using=None):
content = render_to_string(template_name, context, request, using=using)
return do_after_response(do_after=do_after, content=content, do_after_args=do_after_args, content_type=content_type, status=status)
# views.py
from .myclass import *
from django.shortcuts import render
from django.http import HttpRequest
def send_mail (some_args, some_other_args):
# sending email
def sign_up (request: HttpResponse):
method = request.method
if method == 'GET':
# checking cookies
return render(request, "template name", context)
if method == 'POST':
# validating data
if unvalid_data:
return render(request, "template name", context)
# saving data
do_after_args = [some_args, some_other_args]
return do_after_render(send_mail, request, "template name", context, do_after_args)
我想向新用户发送验证邮件。但是由于连接速度慢,发送电子邮件需要很长时间,用户会看到 CONNECTION TIMED OUT
错误。我想 return 回复用户,然后发送电子邮件。我已经尝试 StreamingHttpResponse
并使用 yield
。但它 return 得到了令人毛骨悚然的反应,而不是我想要的反应。
我更喜欢使用 function view
来完成它,但如果我必须使用 class view
也没有问题。我该怎么办?
from django.shortcuts import render
from django.http import HttpRequest
def sign_up (request: HttpResponse):
method = request.method
if method == 'GET':
# checking cookies
return render(request, "template name", context)
if method == 'POST':
# validating data
if unvalid_data:
return render(request, "template name", context)
# saving data
return render(request, "template name", context)
# sending email
感谢 NeuronQ in this question 我得到了这个想法并且它正在运行:
# myclass.py
from django.http import HttpResponse
__all__ = ['do_after_render']
class do_after_response (HttpResponse):
def __init__(self, do_after, content=b'', do_after_args=[], *args, **kwargs):
self.do_after = do_after
self.do_after_args = do_after_args
super().__init__(content=content, *args, **kwargs)
def close(self):
super().close()
self.do_after(*self.do_after_args)
def do_after_render (do_after, request, template_name, context=None, do_after_args=[], content_type=None, status=None, using=None):
content = render_to_string(template_name, context, request, using=using)
return do_after_response(do_after=do_after, content=content, do_after_args=do_after_args, content_type=content_type, status=status)
# views.py
from .myclass import *
from django.shortcuts import render
from django.http import HttpRequest
def send_mail (some_args, some_other_args):
# sending email
def sign_up (request: HttpResponse):
method = request.method
if method == 'GET':
# checking cookies
return render(request, "template name", context)
if method == 'POST':
# validating data
if unvalid_data:
return render(request, "template name", context)
# saving data
do_after_args = [some_args, some_other_args]
return do_after_render(send_mail, request, "template name", context, do_after_args)