Python Django-在API视图上设置CSRF令牌

Python Django-在API视图上设置CSRF令牌,python,django,api,csrf-token,Python,Django,Api,Csrf Token,我正在创建一个API端点来接收数据,并根据所述数据创建模型对象。我目前有两个API视图——一个发送数据,另一个接收数据——但实际上,我将使用脚本来发送数据,而不是视图。我正在处理在本地主机上接收数据的视图,这就是为什么我现在有一个发送数据的主机 我目前面临的问题是将数据发送到API端点的函数。我的POST请求返回时出现403错误,它显示禁止(未设置CSRF cookie.):/reports/swipe/data。为了解决这个问题,我尝试添加一个CSRF cookie,但是我对API端点非常陌生

我正在创建一个API端点来接收数据,并根据所述数据创建模型对象。我目前有两个API视图——一个发送数据,另一个接收数据——但实际上,我将使用脚本来发送数据,而不是视图。我正在处理在本地主机上接收数据的视图,这就是为什么我现在有一个发送数据的主机

我目前面临的问题是将数据发送到API端点的函数。我的POST请求返回时出现403错误,它显示
禁止(未设置CSRF cookie.):/reports/swipe/data
。为了解决这个问题,我尝试添加一个CSRF cookie,但是我对API端点非常陌生,并且遇到了一些问题。我尝试过使用
@csrf\u emption
和添加
verify=False
,但还没有成功。我还花了几个小时在网上搜索有帮助的资源。下面是我的部分代码。我很感激人们能提供的任何建议

views.py:

from datetime import datetime, timedelta, date, time
import time
import datetime
import json
import os
from django.shortcuts import render
from swipe.models import MyModel
import requests
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse


def receive_data(request):
        """
        we need the primary keys of the id rows in case they send us the same data twice
        or we don't even run it and need to run it on new data every time

        get primary key of each row in the original query to have that sent to us as well
        create --> update | create
        """

        if request.method == 'POST':
            bb_data = request.POST.get('data', '')

            for entry in bb_data:
                print(entry)
                new_swipe = MyModel.objects.create(
                    eventtransactions_id= int(entry['eventtransactions_id']),
                    customer_lastname= entry['customer_lastname'],
                    customer_firstname= entry['customer_firstname'],
                    birthdate= datetime.datetime.strptime(entry['birthdate'], '%m-%d-%Y'),
                    customer_gender= entry['customer_gender'],
                )
                print("ENTRY CREATED") #for testing
@csrf_exempt
def send_data(request):

    API_ENDPOINT = "http://127.0.0.1:8000/my_api"

    for x in range(3):
        bb_dict = {
            'eventtransactions_id': 0000111,
            'customer_gender': 'F',
            'customer_firstname': 'Jan',
            'customer_lastname': 'Smith',
            'birthdate': datetime.datetime(2000, 2, 10, 10, 23, 40, 123443),
            }

    json_bb_dict = json.dumps(bb_dict, default=str)
    requests.post(API_ENDPOINT, data=json_bb_dict, verify=False)
    return HttpResponse("Test")

url.py

from django.conf.urls import include, url
from swipe.views import receive_data, send_data

urlpatterns = [
    url(r'^data', receive_data, name='data_import'),
    url(r'^test', send_data, name='data_export'),
]


您已经添加了@csrf\u decorator来发送\u数据函数,但您的错误文本提到了/reports/swipe/data url,这将导致接收\u数据函数。考虑将@ CSRFY豁添加到接收数据功能(假设您不关心CSRF注入)

< P>您添加了@ CSRFY豁免装饰器到SDENDATA DATA函数,但是您的错误文本提到/报告/擦除/数据URL,这导致了接收数据功能。考虑将@ CSRFY豁免添加到接收数据功能(假设您不关心CSRF注入)