小编Ian*_*ice的帖子

Django - 收到来自外部网站的流请求

Django如何用于从外部API获取数据,由用户请求触发,并在请求周期中直接将其流回,而无需(或使用渐进/最小)内存使用?

背景

作为与外部托管的微服务连接的短期解决方案,需要将用户可访问性(基于Django应用程序的身份验证系统)限制为未经身份验证的API.以前的开发人员在Javascript中暴露了这些外部IP,我们需要一个解决方案来让他们脱离公众的视线.

要求

  • 我们不一定会使用请求库,并且可以使用任何其他库,如果它可以帮助加快响应时间.
  • 来自外部API的响应可能有点大(5-10MB)并且能够缩短请求周期(通过Ajax> Django>外部API> Django>用户的用户请求)是至关重要的.

这可能吗?如果是这样,你能建议一个方法吗?

from django.shortcuts import Http404, HttpResponse
import requests

def api_gateway_portal(request, path=''):
    # Determine whether to grant access

    # If so, fetch and return data
    r = requests.get('http://some.ip.address/%s?api_key=12345678901234567890' % (path,))

    # Return as JSON 
    response = HttpResponse(r.content, content_type='application/json')
    response['Content-Length'] = len(r.content)

    return response
Run Code Online (Sandbox Code Playgroud)

请注意 - 我完全清楚这是一个糟糕的长期解决方案,但在完成新的外部身份验证系统之前,必须进行短期的演示.

python django python-requests

4
推荐指数
1
解决办法
1305
查看次数

如果表单无效,更改 Django CBV 响应的状态代码

使用 Django 的基于类的视图,如果表单无效,如何在返回响应时将状态代码设置为 400?从功能角度来看,这很容易,但无论表单有效性如何,CBV 都会响应 200 状态。

class CRMContactsAdd(CreateView):

    model = models.Contact
    fields = ['name','job_title','phone_number','email_address','notes']
    template_name = 'crm/add_contact.html'

    def get_success_url(self):
        return reverse('CRM-list')+"?show_modal_url="+reverse('CRM-contacts',args=())

    def get_context_data(self, **kwargs):
        cd = super(CRMContactsAdd,self).get_context_data(**kwargs)
        cd['company'] = get_object_or_404(models.Company,pk=self.kwargs['pk'])
        cd['title'] = "Add contact to %s" % (cd['company'].name)
        return cd

    def form_valid(self, form):
        contact = form.save(commit=False)
        contact.company = get_object_or_404(models.Company,pk=self.kwargs['pk'])
        return super(CRMContactsAdd,self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

我想要这样做的原因是,我可以轻松地使用状态代码来说明是否使用模式窗口中的表单重新加载顶级窗口或使用提交表单的响应更新模式。

django django-class-based-views

2
推荐指数
1
解决办法
918
查看次数

在 Python virtualenv 中查找每个编译模块的大小?

我继承了一个臃肿的 Django 项目,该项目通过 Heroku 部署,其中包含许多大型库(包括 numpy、scipy 等)。看来以前的开发人员冻结了他的整个虚拟环境,我正在尽我所能修剪未使用的依赖项。

在需要安装 MatPlotlib 之后,Heroku 给了我一个错误,即 slug 大小太大。该库本身就超过 50MB。

remote: -----> Compressing...
remote:  !     Compiled slug size: 321M is too large (max is 300M).
remote:  !     See: http://devcenter.heroku.com/articles/slug-size
Run Code Online (Sandbox Code Playgroud)

为了让这个应用程序更新新功能,我想 grep 这个应用程序中每个依赖项的大小,以便我可以制作一个优先级列表来调查实际使用的那些。

如何循环浏览我的requirements.txt文件中的依赖列表并查看每个模块的编译大小?

python django heroku virtualenv

2
推荐指数
1
解决办法
1319
查看次数