【问题标题】:Attribute Error : 'Request' object has no attribute 'headers'- Django属性错误:“请求”对象没有属性“标题”-Django
【发布时间】:2019-08-07 09:05:34
【问题描述】:

我正在使用 django 1.11 版本和 django rest framework for rest api 我在 React Native 的 HTTP 标头中使用 fetch 传递令牌值

但是当我试图在 django 视图文件中检索令牌值时,它给了我错误

在 react Native 中,我将令牌值传递如下

fetch(url,{
  method: 'get',
  headers : new Headers({
    'token':'token',
    'Content-Type': 'application/json'

  })
})

我 django rest APi 我正在尝试获取令牌值,如下所示

 def get(self,request,**kwargs):
        token = request.headers['token']
        queryset=models.Schedule.objects.filter()
        serializer_class= RepScheduleSerializer(queryset,many=True)
        return Response(serializer_class.data)

但它给了我错误 请求对象没有属性头

我想在函数中获取token值

【问题讨论】:

    标签: react-native django-rest-framework


    【解决方案1】:

    请求的标头存储在request.META dictionary [Django-doc] 中。因此,您应该将代码更改为:

    def get(self,request,**kwargs):
            token = request.META['HTTP_TOKEN']
            queryset = models.Schedule.objects.all()
            serializer_class = RepScheduleSerializer(queryset,many=True)
            return Response(serializer_class.data)

    然而,现在你不使用这个令牌做任何事情。因此,您可能需要更改逻辑。

    请注意,密钥是经过预处理的:

    除了CONTENT_LENGTHCONTENT_TYPE,如上所述,请求中的任何 HTTP 标头都通过将所有字符转换为大写、用下划线替换任何连字符并添加HTTP_ 前缀 到名称。因此,例如,名为 X-Bender 的标头将映射到元键 HTTP_X_BENDER

    开始,就有request.headers dictionary-like object [Django-doc],它允许不区分大小写的查找。但是,根据错误消息,您不要使用

    【讨论】:

    • 这没有用当我打印请求时它给了我错误键错误 u'token'。META 值没有令牌键
    • @Nidhi:你确定请求是由 ract-native 请求触发的,而不是由另一个请求触发的吗?
    • @Nidhi:等等,令牌在服务器端是大写的。
    • @Nidhi:你可能应该寻找HTTP_TOKEN
    • 是的,我得到了它在 HTTP_TOKEN 上的值 感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-24
    • 2021-09-17
    • 2019-02-27
    相关资源
    最近更新 更多