使用来自前端的 (post) 请求在后端触发 Django 脚本

using (post) request from frontend to trigger Django script on backend

Django(和全栈)的新手,感谢您的帮助!

Objective: 我的基本需求是能够让 React(或任何前端)communicate/trigger 来自前端的 django 脚本(并最终在脚本 运行s 之后将结果返回到前端)。我创建了以下代码来创建此实用程序,如果您有完全不同的方法来实现此功能 objective,请随时通知我,无论下面的代码如何。

方法: 我想我需要在 views.py 中构造 python 脚本,并在它收到 post/get 请求时触发它(因为每个视图都有一个 url),然后发送数据到请求的来源。

我尝试通过导入 django.views.decorators.http 来使用 @require_POST。根据我的理解,这意味着它只会 post 请求除外,并且 运行 如果触发器是 post 请求,但还没有让它工作(404 错误)

我也有一个通过 restapi_framework 工作的 django restapi(我需要它用于其他目的)并且我已经成功地向它发出了请求。如果对我有帮助,我很乐意使用 app/views 的这一部分。

(部分)我的代码: 我在前端使用 react/redux redux 工具包,所以这是我在 slice 中的 thunk(除非我写错了 thunk,请考虑这是对 url 的基本 post 请求):

export const postRequest = createAsyncThunk(
  'slice/postRequest',
  async post => {
    const response = await client.post('URL', {slice: post})
    return response.slice
  }
)

export const slice = createSlice({
  name:'slice',
  initialState,
  reducers:{
  //reducers
  }
});

这里是请求本身:

import React from 'react';
import {useDispatch} from 'react-redux';
import {postRequest} from './slice'

const Component = () => {
  const dispatch = useDispatch()
  dispatch(postRequest({data})

  return(null)
}

当我在我的网络浏览器中访问它时,url 工作,并且对 npx json-服务器的类似 POST 请求(thunk)产生 post .但是当我对 url 执行 POST 请求时(从下面三个视图中的任何一个),它被拒绝并抛出 404 错误。我的想法是我没有将其编程为接收 post 请求。

这里是view.py文件(有各种尝试和想法):

from django.http import HttpResponse
from django.views.decorators.http import require_POST
from django.views.decorators.csrf import csrf_exempt

#this tests to make sure urls/views are set up correct, and going to the url I always see 'test'
def option1(request):
  return HttpResponse('test')

def option2(request):
  def test = response.POST
  return HttpResponse('hello', test)

@require_POST
@csrf_exempt
def option3(request):
  def test=response.POST
  def test2=request_response
  log.info(test, test2)
  return HttpResponse(test, test2)

有人知道如何帮助 React 与 Django 通信,以便我可以在需要时 运行 python 脚本吗?这是 React frontend/Django 后端背后的意图,但在对应用程序进行一些工作之后,我仍然失去了这个功能。感谢您的帮助!

更新 这是我的错误信息:

开发工具内部:

main.js:2 POST https://URL/ 404
main.js:2 dispatching 
{type: "slice/postRequest/rejected", payload: undefined, meta: {…}, error: {…}}
error: {message: "Unexpected token < in JSON at position 0"}
meta: {arg: {…}, requestId: "Pi3VssbXU5DMTMscafAYb", rejectedWithValue: false, requestStatus: "rejected", aborted: false, …}
payload: undefined
type: "slice/postRequest /rejected"

在日志上它只是说: [TIME] POST 请求 URL 有 404 N975

我成功了。

我必须使用 Api_view 装饰器,然后使用 if request.method = 'POST' 的条件逻辑:等等...在里面我可以导入外部模块(脚本)让它制作一个 return,然后将其放入 views.py 内的 return。如果我想让我的 return 涉及其余 api,显然我需要向其余 api 视图提出请求。

上面的代码远没有发挥作用。我在服务器上执行此操作,但不确定如何从服务器复制和粘贴:/ 很抱歉,我不能 post 代码来解释。不过其实并不太复杂。