django - 如何在 django 中间件中执行内容协商?
问题描述
假设我有一个自定义Django Middleware
,如果不返回 rest_framework,则检查请求标头具有 jwt 令牌Response
。,
middleware.py
@staticmethod
def process_view(request, view_func, view_args, view_kwargs):
try:
jwt_token = request.headers["token"]
except KeyError:
response = Response(status=status.HTTP_403_FORBIDDEN)
return response
但我收到了类似的错误
.accepted_renderer 未在响应上设置
如何在这里执行内容协商?
解决方案
我认为您使用的是DRF 的Response
class。
你应该使用Django 的HttpResponse
类,
# middleware.py
from django.http.response import HttpResponse
@staticmethod
def process_view(request, view_func, view_args, view_kwargs):
try:
jwt_token = request.headers["token"]
except KeyError:
response = HttpResponse(status=403)
return response
更新-1
我不确定这种方法是好是坏,但效果很好。
创建一个虚拟视图,该视图返回DRF Response
并使用它来返回响应。
from rest_framework.response import Response
from rest_framework.decorators import api_view
@api_view()
def custom_view(request):
return Response(status=403)
class Foo(...):
@staticmethod
def process_view(request, view_func, view_args, view_kwargs):
try:
jwt_token = request.headers["token"]
except KeyError:
return custom_view(request)
推荐阅读
- linux-kernel - 从 DMA 地址 (dma_addr_t) 获取 PFN?
- mysql - 优化 DISTINCT 。在 mysql 从一个大的 Mysql 表中
- c# - 列表中最后检查的更改复选框的索引
- vue.js - 在Vue中初始化一个对象数组
- c# - 在计算 DateTimes 之间的持续时间时安全处理夏令时(或任何其他理论上的非常量偏移)
- java - 在测试中在哪里使用 ajax 方法?如何检查我可以在哪里使用它们?
- php - 在 WooCommerce 中向产品类别和标签添加 2 个自定义字段,但代码会发出通知
- mysql - 搜索特定文档名称时如何提取空值
- ruby-on-rails - 如何从 Rails 的下拉列表中设置值?
- forms - PowerApps - 如何创建一个表单,用户可以在其中编辑或删除已提交的行