我想知道如何在 Django 中传递一些上下文数据来响应。
我有这个端点:
/api/facebook/user/
返回这样的数据:
HTTP 200 OK
Allow: GET, POST, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"facebook_account_id": "176890406129409",
"first_name": "Ivan",
"last_name": "K",
"token_status": "active",
"facebook_access_token": 1
},
{
"facebook_account_id": "123123123",
"first_name": "Ivan",
"last_name": "FFFF",
"token_status": null,
"facebook_access_token": null
},
{
"facebook_account_id": "123123",
"first_name": "Test",
"last_name": "test",
"token_status": null,
"facebook_access_token": null
}
]
这是我的列表序列化器:
class FacebookUserListSerializer(ModelSerializer):
token_status = SerializerMethodField()
class Meta:
model = FacebookUser
fields = ["facebook_account_id", "first_name", "last_name", "token_status", "facebook_access_token"]
def get_token_status(self, obj):
try:
facebook_token = obj.facebook_access_token
if facebook_token:
return "active" if facebook_token.is_active else "inactive"
except FacebookToken.DoesNotExist:
return None
这是我的列表视图:
def list(self, request, *args, **kwargs):
response = super().list(request, *args, **kwargs)
data = response.data
inactive_accounts = sum(1 for account in data if account.get("token_status") == "inactive")
accounts_without_token = sum(1 for account in data if account.get("token_status") is None)
context = {"inactive_accounts": inactive_accounts, "accounts_without_token": accounts_without_token} # Is this the correct way of passing context data to a response?
response.context_data = context
return response
在列表视图中,在“上下文”变量中,我试图将数据传递到前端,但我确信我这样做是错误的,我必须首先将其转换为 JSON,或者将其放在其他地方。
所以问题是 - 在哪里(序列化器、列表方法或其他地方?)以及我应该如何根据 REST 约定放置此 context 数据,以便可以在前端访问数据而无需迭代列表项?
你可以这样做:
context = {
"inactive_accounts": inactive_accounts,
"accounts_without_token": accounts_without_token
}
response['context'] = context
但在前端,您必须使用链式密钥来获取这些值,例如
data.context.inactive_accounts
或者您可以直接将密钥添加到响应中,而无需定义单独的上下文。
response['inactive_accounts']= inactive_accounts
response['accounts_without_token']= accounts_without_token
然后在前端你可以直接用相关的key来获取
data.inactive_accounts
data
是您在前端定义的变量名称并存储 api 调用的响应