'NoneType' 对象不可订阅。错误在哪里?使用带管道的 Django 应用程序

'NoneType' object is not subscriptable. Where is the error? Used Django App with Pipeline

TypeError: 'NoneType' object is not subscriptable if
request['user_type']=='driver' and not Driver.objects.filter(user_id =
user.id): TypeError: 'NoneType' object is not subscriptable ```
def create_user_by_type(backend , user , request, response , *args, **kwargs):
    if backend.name == 'facebook':
        avatar = 'http://graph.facebook.com/%s/picture?type=large' % response['id']
    if request['user_type'] == 'driver' and not Driver.objects.filter(user_id = user.id):
        Driver.objects.create(user_id=user.id,avatar=avatar)
    elif not Customer.objects.filter(user_id=user.id):
        Customer.objects.create(user_id=user.id, avatar=avatar)

错误最有可能出现在请求 ['user_type'] == 'driver' 中,因为如果我从代码中删除它,它就会起作用。

我正在发送来自 POSTMAN 的请求

我通过参数检查user_type

使用了来自 https://python-social-auth.readthedocs.io/en/latest/pipeline.html

的管道

如果一切都正确,哪里会出错?

问题一定出在变量request中存储的对象上。

您在一个函数中获得了 request 的值,该函数应该 return 一个复杂的对象,它是可订阅的并且有一个名为 'user type' 的字段。显然,它没有 return 这个对象,而只是 returned None,可能是因为 i/o-error 或无效参数。

无论您使用什么函数来获取请求,我建议检查它是否有效以及它到底是什么 returns。

更新create_user_by_type:

def create_user_by_type(backend, user, response, *args, **kwargs):
    request = backend.strategy.request_data()

    if backend.name == 'facebook':
        avatar = 'http://graph.facebook.com/%s/picture?type=large' % response['id']
    if request['user_type'] == 'driver' and not Driver.objects.filter(user_id = user.id):
        Driver.objects.create(user_id=user.id,avatar=avatar)
    elif not Customer.objects.filter(user_id=user.id):
        Customer.objects.create(user_id=user.id, avatar=avatar)