如何在django中间件中执行内容协商?

时间:2019-06-20 05:12:59

标签: django django-rest-framework python-3.6 django-middleware django-2.2

假设我有一个自定义Django Middleware,如果未返回rest_framework Response,则该请求的请求标头具有jwt令牌。

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未在响应上设置

如何在此处执行内容协商?

1 个答案:

答案 0 :(得分:0)

我认为您正在使用DRF's Response class

您应该将Django's HttpResponse class用作

{% extends "blog/base.html" %}
{% load crispy_forms_tags %}
{% block content %}
  <div class="content-section">
    <form enctype="multipart/form-data method="POST">
      {% csrf_token %}
      <fieldset class="form-group">
        <legend class="border-bottom mb-4">ブログ投稿</legend>
        {{ form|crispy }}
      </fieldset>
      <div class="form-group">
        <button class="btn btn-outline-info" type="submit">投稿</button>
      </div>
    </form>
  </div>
{% endblock content %}



UPDATE-1

我不确定此方法是否 ,但是效果很好。 / p>

创建一个虚拟视图,该视图返回 # 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 ,并使用它返回响应。

DRF Response