django 从视图中调用外部 api

django calling external api from view

我正在尝试从基于 class 的视图调用外部 api。 目前我有以下调用 API 的视图。但是目前我只是用 api(username, password) 调用 API 并且它 returns 数据但不保存它。

如何将视图中模型窗体中使用的模型也传递给api函数,以便它可以将返回的数据保存给相关用户。 (即我需要在 CBV 中覆盖什么方法)。

另外什么是在 django 中调用外部 api 的最佳方法(从表单完成启动)。目前 API 往返需要 5 -10 秒,目前它的设置方式会延迟下一页加载该数量。

class SupplierOnlineAccountView(CreateView):
    form_class = SupplierOnlineAccountForm
    template_name = 'standard_form.html'
    success_url = '../contacting'

    def form_valid(self, form):
        username = form.cleaned_data.get('username')
        password = form.cleaned_data.get('password')
        api(username, password)
        return super().form_valid(form)

型号:

class EUser(models.Model):
    username = models.CharField(max_length=255, null=True)
    password = models.CharField(max_length=255, null=True)
    address = models.ForeignKey(Address, null=True)
    temp_user = models.CharField(max_length=255, null=True)
    user = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, default=None)
    title = models.CharField(max_length=10)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
def form_valid(self, form):
    username = form.cleaned_data.get('username')
    password = form.cleaned_data.get('password')
    self.object = form.save()
    api(username, password,self.object)
    return super().form_valid(form)

您必须将标题、first_name、last_name 字段更改为 blank=True,以便您可以在 api 调用之前保存,然后传递保存的模型。

API的等待时间问题,这是典型的queue的异步任务,比如celery。您保存表单,然后将任务卸载到 queue,它在另一个线程(或进程或机器)上运行。那么django就不用等到apireturns,就发送response了。