小编Noi*_*oiK的帖子

Django rest 框架:客户端中的自定义标头与单元测试不同

我有一个 Django Rest API,然后单独有一个使用这个 API 的客户端。

我使用客户端中的请求传递自定义标头:

r = requests.get(url, params=params, headers={'license': '12345'})
Run Code Online (Sandbox Code Playgroud)

然后在 API 中,在我的自定义权限中,我得到如下标题:

app_license = request.META['HTTP_LICENSE']
Run Code Online (Sandbox Code Playgroud)

我知道 django出于安全原因重写了自定义标头,所以它工作正常。

我的问题是当我在 Django rest API 中编写单元测试时:

response = self.client.get(self.url, params=params, headers={'license': '12345'})
Run Code Online (Sandbox Code Playgroud)

然后它提出:

KeyError: 'HTTP_LICENSE'
Run Code Online (Sandbox Code Playgroud)

但是如果我像这样更改代码,测试通过没有问题但消费者不起作用:

request.META['headers']['license']
Run Code Online (Sandbox Code Playgroud)

我可以检查是否有 'headers' 键,但我不想更改代码只是为了通过单元测试,它必须是编写符合现实的单元测试的某种方式,对吗?

我尝试使用:

from django.test import TestCase
Run Code Online (Sandbox Code Playgroud)

和:

from rest_framework.test import APITestCase
Run Code Online (Sandbox Code Playgroud)

两者结果相同。有什么解决办法吗?谢谢!

python django rest django-rest-framework

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

如何将对象添加到 AMP-HTML 中的 amp-state 数组?

我有一个名为 currentItem 的状态,其中包含 url、标题、描述...当我按下按钮时,currentItem 应保存在名为 myItems 的其他状态中。它将包含一个项目对象列表。

现在的问题是它总是显示最后一个项目,因此它会覆盖每个 currentItem 提交的整个列表。

我的州:

    <amp-state id="currentItem">
        <script type="application/json">
            {
                "url": "",
                "imageUrl": "",
                "title": "",
                "description": ""
            }
        </script>
    </amp-state>
    <amp-state id="myItems">
        <script type="application/json">
            []
        </script>
    </amp-state>
Run Code Online (Sandbox Code Playgroud)

列表定义:

<amp-list class="mt3"
          layout="fixed-height"
          height="0"
          [src]="myItems"
          [height]="myItems.length * 200"
          items="."
          binding="no">
<template type="amp-mustache">
...
</template>
Run Code Online (Sandbox Code Playgroud)

将 currentItem 添加到列表的操作:

<button type="button"
        on="tap:AMP.setState({ myItems: [currentItem]})">
Add
</button>
Run Code Online (Sandbox Code Playgroud)

我尝试使用 AMP.setState({ myItems: myItems.concat(currentItem)}) 但它崩溃了,也与 + 一起崩溃。我怎样才能做到这一点?

amp-html amp-bind amp-list

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