Как я могу передать переменную React в представление Django?

Я использую Django и React для проекта, который использует API Trello. Я создал функции в django views.py, которые будут получать доски, списки и карточки пользователя. Проблема в том, что для получения списка мне нужно, чтобы пользователь выбрал доску, потому что конечная точка списка требует id доски (и так далее). Я могу показать доски пользователя на моей странице react и хранить id доски в переменной в Index.js (в папке pages), но у меня нет идеи, как я могу отправить id выбранной доски в views.py, чтобы использовать api Trello в соответствии с выбранной пользователем доской. Вот мой код.

Django views.py:

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 HttpResponse(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 HttpResponse(cards)

React Index.js:

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;

В принципе, когда пользователь выбирает доску, я хочу отправить id в функцию get_lists. Возможно ли это сделать?

Вид

def get_lists(request):
   print(request.query_params['id_list']) # 'id_list being the variable you want to pass from the front end

это устанавливает, что мы ожидаем параметр от фронтального запроса get. Не забудьте добавить try catch вокруг него... потому что если этот query_param не существует, это приведет к ошибке.

Нет в FE... при выполнении запроса установите параметр запроса 'id_list = '


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 запроса, как

http://127.0.0.1:8000/lists/?id_list=3&another_param=2..

протестируйте бэкенд с помощью postman или smthn перед интеграцией... чтобы убедиться в правильности url и прочего.

Вернуться на верх