首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何向Django视图发送React变量?

如何向Django视图发送React变量?
EN

Stack Overflow用户
提问于 2022-01-18 18:59:07
回答 1查看 279关注 0票数 1

我使用Django并对一个使用Trello的API的项目作出反应。我在django views.py中创建了一些函数,可以获得用户的板、列表和卡片。问题是,要获得一个列表,我需要用户选择一个板,因为列表的端点需要一个板id (等等)。我可以在我的react页面上显示用户的板,并在Index.js中的一个变量( pages文件夹)上存储板的id,但是我不知道如何根据用户选择的面板将选定的板id发送到views.py来使用Trello的api。这是我的密码。

Django views.py:

代码语言:javascript
运行
复制
from rest_framework.decorators import api_view
from rest_framework.response import Response
from dotenv import load_dotenv
from treegia.settings import TRELLO_URL
import os
import requests

load_dotenv()
TRELLO_KEY = os.getenv('TRELLO_KEY')
TRELLO_TOKEN = os.getenv('TRELLO_TOKEN')


@api_view(['GET'])
def get_boards(request):
    if request.method == 'GET':
        board_endpoint = TRELLO_URL+'members/me/boards'
        jsonObj = {'fields':'name,id', 'key':TRELLO_KEY, 'token':TRELLO_TOKEN}        
        boards = requests.get(board_endpoint, json=jsonObj).json()
        return Response(boards)


@api_view(['GET'])
def get_lists(request):
    if request.method == 'GET':
        list_endpoint = TRELLO_URL+ 'boards/' + id_board + '/lists'
        jsonObj = {'fields':'name,id', 'id':id_board, 'key':TRELLO_KEY, 'token':TRELLO_TOKEN}
        lists = requests.get(list_endpoint, json=jsonObj).json()
        return Response(lists)


@api_view(['GET'])
def get_cards(request):
    if request.method == 'GET':
        card_endpoint = TRELLO_URL+ 'lists/' + id_list + '/cards'
        jsonObj = {'fields':'name,id', 'id':id_list, 'key':TRELLO_KEY, 'token':TRELLO_TOKEN}        
        cards = requests.get(card_endpoint, json=jsonObj).json()
        return Response(cards)

React Index.js:

代码语言:javascript
运行
复制
import React from 'react';
import Navbar from '../components/Navbar';
import '../styles/index.css'

const Index = () => {
    const [boards, setBoards] = React.useState([]);
    const [boardId, setBoardId] = React.useState([]);

    const [lists, setLists] = React.useState([]);
    const [listId, setListId] = React.useState([]);



    React.useEffect(() => {
        getBoards();
    }, []);

    React.useEffect(() => {
        getLists();
    }, []);


    async function getBoards() {
        await fetch('http://localhost:8000/boards/')
            .then(resp => resp.json())
            .then(data => {
                console.log(data);
                if(data) setBoards(data);
            })
    }

    async function getLists() {
        await fetch('http://127.0.0.1:8000/lists/')
            .then(resp => resp.json())
            .then(data => {
                console.log(data);
                if(data) setLists(data);
            })
    }


    return (
        <div id='index-page'>
            <Navbar />
                <div className='boards'>
                    <h1>Your boards</h1>
                    <div className='boards-container'>
                    {boards.map(board => (
                            <button key={board.id} onClick={() => {
                                setBoardId(board.id)
                            }}>{board.name}</button>
                            ))}
                            </div>
                </div>

                <div className='lists'>
                    <h1>Your lists</h1>
                    <div className='lists-container'>
                    {lists.map(list => (
                            <button key={list.id} onClick={() => {
                                setListId(list.id)
                            }}>{list.name}</button>
                            ))}
                            </div>
                </div>
            {boardId ? <p>{boardId}</p> : ''}
            {listId ? <p>{listId}</p> : ''}
        </div>
    );
}


export default Index;

基本上,当用户选择一个板时,我将向get_lists函数发送什么id。这有可能做到吗?

EN

回答 1

Stack Overflow用户

发布于 2022-01-19 10:02:54

在视野中

代码语言:javascript
运行
复制
def get_lists(request):
   print(request.query_params['id_list']) # 'id_list being the variable you want to pass from the front end

这将设置我们期望从前端获取请求的参数。记住在it..cos周围添加一个query_param,如果这个query_param不存在,它就会抛出和错误。

非在有限元..。在发出请求时,设置请求参数'id_list =‘

代码语言:javascript
运行
复制
var url = new URL('http://127.0.0.1:8000/lists')

var params = {id_list:'3'} // or whatever the params

url.search = new URLSearchParams(params).toString();

fetch(url);

本质上,您可以将查询参数添加到请求url中,如

代码语言:javascript
运行
复制
http://127.0.0.1:8000/lists/?id_list=3&another_param=2..

在integration..to之前使用postman或smthn测试后端,确保正确的url和其他内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70761019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档