我的 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.Store
和sendemail(...)
.
一个奇怪的效果是,当我保存某些内容并且服务器重新启动(或类似(时,它会运行这两个功能,但不是在我调用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