33

我需要使用 sencha 和 django 创建一个安全的 restFUL api。我对python相当陌生。到目前为止,我能够使用基本身份验证从 sencha 向服务器发送请求,如下所示

 new Ext.data.Store({
   proxy: {
     type: "ajax",
      headers: {
       "Authorization": "Basic asdjksdfsksf="
    }
   }
 })  

在 php/apache 中,我可以使用下面的代码轻松访问这些标头

$headers = apache_request_headers();
print_r($headers);

如何在python中做到这一点?

4

5 回答 5

56

request.META您可以使用字典在视图中访问它们。

如果您想要 Authorization 标头,您可以这样做request.META['HTTP_AUTHORIZATION']

如果您正在从头开始创建一个 RESTful API,您可能想看看使用sweetpie

于 2012-05-16T06:47:54.163 回答
9

您可以使用

request.META['HTTP_AUTHORIZATION']

而有时

request.META['Authorization']

能够帮助。

于 2018-11-09T13:36:55.077 回答
8

从 django 2.2HttpRequest.headers开始,添加了允许对请求标头的简单访问。所以现在您还可以使用get()函数获取身份验证标头request.headers

request.headers.get('Authorization')

这将为您提供价值代币价值。

Bearer eyJ0eYourToken...

https://docs.djangoproject.com/en/2.2/ref/request-response/#django.http.HttpRequest.headers

于 2019-10-08T15:13:02.177 回答
0

HttpRequest.headers

Django 2.2 中的新功能。

 if 'Authorization' in request.headers: # Authorization header exists
      #do something here
      pass
 
 else: # Authorization header not exists
     #do something here
     pass 

另请阅读Django 官方文档

于 2020-07-13T05:59:07.843 回答
0

对于 2.2 之前的 django 旧版本,您需要使用 META 键以下列方式访问标头。首先检查密钥授权标头密钥是否存在始终很重要,以防万一它未发布,否则您将遇到不存在的密钥错误。

if not ('HTTP_AUTHORIZATION' in request.META.keys()):

    return HttpResponse('NO AUTH HEADER PROVIDED')

elif (request.META['HTTP_AUTHORIZATION'] == 'Bearer YourAuthorizationKey123':

    # Validation passed - Proceed with whatever else you want to do
于 2021-10-13T22:49:35.987 回答