A POST API django-rest-framework.存储到模型后,调用 postgres 函数并发送电子邮



我的 API 调用有效并将数据存储到表中。 完成此操作后,我希望它在postgres中运行存储过程/函数。 在此之后,我希望发送一封发送网格电子邮件。

我的想法是我在views.py课上搞砸了。

代码如下:

urls.py

urlpatterns = [
url(
r'^$',
views.ProcList.as_view(),
name='proc-list'
),
...
]

views.py

class ProcList(generics.ListCreateAPIView):
queryset = Proc.objects.all()
serializer_class = ProcSerializer
#permission_classes = (IsAdminOrReadOnly,)
lookup_url_kwarg = 'proc_id'
q = Proc.store() 
if isNum(q[0][0]):
trans_id = int(q[0][0])
trans = Transaction.objects.get(trans_id=trans_id)
proc_id = trans.proc_id
proc = Proc.objects.get(proc_id=proc_id)
first_name = proc.first_name
pdf_name = str(proc.proc_u_id)
email = proc.email
if Event.objects.filter(channel='EMAIL', trans_id=trans_id).exists():
sendemail2(first_name, pdf_name, email)

Proc.Store()是包含postgres函数的模型。sendemail2(first_name, pdf_name, email)是发送 sendgrid 电子邮件的函数

我的问题是,如果单独运行或在python控制台中运行,Proc.Store()可以正常工作。 如果在例如python控制台中运行,sendemail2(first_name, pdf_name, email)也可以单独工作。 但是不知何故,我的类构建错误,因此它不会执行Proc.Storesendemail(...).

一个奇怪的效果是,当我保存某些内容并且服务器重新启动(或类似(时,它会运行这两个功能,但不是在我调用API之后。

您需要将特殊代码放在类的方法中。ListCreateAPIView上的文档指定了创建实例的post()方法。

所以你可以试试这个:

class ProcList(generics.ListCreateAPIView):
# same attributes
...
def post(self, request, *args, **kwargs):
resp = super().post(request, *args, **kwargs)
# here goes your custom code
q = Proc.store() 
if isNum(q[0][0]):
...
return resp

相关内容

  • 没有找到相关文章

最新更新