繁体   English   中英

请求 django 令牌消息:“设置”object 没有属性“项目”

[英]request django token msg: 'set' object has no attribute 'items'

我正在尝试从 Django 身份验证中获取令牌。 但我收到以下错误:

Exception type: <class 'AttributeError'> msg: 'set' object has no attribute 'items'

我的测试代码片段如下所示:

import os
import requests
import json
from dotenv import load_dotenv
load_dotenv()

BASE_DEV_URL = "http://127.0.0.1:4000"


def login(url=(BASE_DEV_URL + "/api/user/token")):

    headers = {
        'accept: application/json',
        'accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Content-Type:' 'application/x-www-form-urlencoded',
        }

    try:
        payload = {"email": os.getenv('TEST_USER_NAME'), "password": os.getenv('TEST_USER_PASSWORD')}
        print(payload)
        res = requests.post(url, data=json.dumps(payload), headers=headers)
        print(f'####### {type(res)}')
    except Exception as e:
        return f'Exception type: {type(e)} msg: {e}'

    return res


response = login()

print(response)

但是,当我使用 swagger 和 curl 命令对其进行测试时,它工作正常 curl 看起来像这样

curl -X 'POST' \
  'http://127.0.0.1:4000/api/user/token/' \
  -H 'accept: application/json' \
  -H 'Content-Type: application/x-www-form-urlencoded' \
  -H 'X-CSRFTOKEN: T7wW385wMiYDERJU2yWvqGorrbKjtb9zhWqlAkAlE30QKgP7DoQMbc7MnQT3UAti' \
  -d 'email=test%40example.com&password=123XVW174'

任何想法如何使它工作。 我不确定,但这可能是因为被序列化了。 我经常使用请求库,从未遇到过这样的错误。 将不胜感激任何可以解决它的建议。

你的标题应该是一个字典,而不是一个集合,所以:

headers = {
    'accept': 'application/json',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'Content-Type': 'application/x-www-form-urlencoded',
}

我最终从中间件中禁用了 crfs。

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

我的标头和请求如下所示:

headers = {
        'accept': 'application/json',
        'Content-Type': 'application/x-www-form-urlencoded',
        'multipart': 'form-data',
    }

payload = {"email": os.getenv('TEST_USER_NAME'), "password": os.getenv('TEST_USER_PASSWORD')}

 res = requests.post(url, data=payload, headers=headers)

它最终给了我响应 200 和正确的数据。 但是,我想知道如何正确生成用于测试的 crf 令牌

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM