使用Django Rest Framework构建的后端Json在前端使用React进行了某种定义

黄若瑟

我目前正在尝试通过构建一个简单的待办应用程序来学习Django Rest Framework和React.js的集成,前者用于后端,后者用于前端。

views.py

from rest_framework import viewsets
from . import models
from .serializers import ToDoSerializer, ToDoContainerSerializer

class ToDoContainerViewSet(viewsets.ModelViewSet):

    queryset = models.ToDoContainer.objects.all().order_by('created')
    serializer_class = ToDoContainerSerializer

serializers.py

from rest_framework.serializers import HyperlinkedModelSerializer
from . import models as todo_model
from rest_framework.serializers import ReadOnlyField

class ToDoContainerSerializer(HyperlinkedModelSerializer):
    created_by = ReadOnlyField(source='created_by.id')

    class Meta:
        model = todo_model.ToDoContainer
        fields = (
            'url', 'id',
            'created_by',
            'todos_name',
            'todos_important',
            'todos_items_count',
        )
        extra_kwargs = {
            'url': {
                'view_name': 'todos:todocontainer-detail',
            },
        }

models.py

from django.db import models
from core.models import TimeStampedModel
from django.core.validators import MinValueValidator, MaxValueValidator

class ToDoContainer(TimeStampedModel):

    created_by = models.ForeignKey(
        user_model.User, on_delete=models.CASCADE, related_name="todo_container")
    todos_name = models.CharField(max_length=50)
    todos_important = models.BooleanField(default=False)

    def todos_items_count(self):
        todo_items = len(self.todo.all())
        return int(todo_items)

    def __str__(self):
        return str(self.todos_name)

我像上面那样构建视图,序列化器,模型,并且看起来像下面这样正确地生成了api。 所有api

我试图通过使用像下面这样的axios模块来将上面的json前端。

import React from 'react';
import axios from 'axios';
import ToDoCard from './ToDoCard';

class ToDoLists extends React.Component {
    state = {
        isLoading: true,
        toDos: []
    };
    getToDos = async () => {
        const { results } = await axios.get("/backend/todos-api/todo_container.json");
        console.log(results) //Errors here, 'results' is undefined
        this.setState({ toDos: results, isLoading: false })
    }
    componentDidMount() {
        this.getToDos();
    }
    render() {
        const { isLoading, toDos } = this.state;
        return (<section className="container">
            {isLoading ? (
                <div className="loader">
                    <span className="loader__text">Loading...</span>
                </div>
            ) : (
                    <div className="toDos">
                        {
                            toDos.map(toDo => {
                                return <ToDoCard
                                    key={toDo.id}
                                    id={toDo.id}
                                    todos_name={toDo.todos_name}
                                    todos_important={toDo.todos_important}
                                />
                            })
                        }
                    </div>
                )
            }
        </section>)
    }
}

export default ToDoLists;

但是'axios.get(“ / backend / todos-api / todo_container.json”);中的'结果';' 是不确定的,尽管后端看起来像下面这样。

django结果

[04/Jan/2021 20:38:07] "GET /backend/todos-api/todo_container.json HTTP/1.1" 200 372

我还设置了如下设置,并尝试了'axios.get(“ / backend / todos-api / todo_container /”);' 但是结果是一样的。“结果”是不确定的,后端看起来还不错。

settings.py

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10,
    'DEFAULT_RENDERER_CLASSES': (
        'rest_framework.renderers.JSONRenderer',
        'rest_framework.renderers.BrowsableAPIRenderer'
    ),
    'DEFAULT_PARSER_CLASSES': (
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.FormParser',
        'rest_framework.parsers.MultiPartParser'
    )
}

CORS_ORIGIN_WHITELIST = (
    'https://localhost:3000',
    'https://127.0.0.1:3000',
)

django结果

[04/Jan/2021 20:32:13] "GET /backend/todos-api/todo_container/ HTTP/1.1" 200 364

我应该怎么做才能解决这个问题?

费利克斯·埃克洛夫(FelixEklöf)

我相信您应该在网址中添加append?format=json而不是.json除非您将URL更改为专门的“ .json”。但是,您200从两个方面都得到回应很奇怪

 "/backend/todos-api/todo_container.json" 

"/backend/todos-api/todo_container/" 

您可以发布您的urls.py吗?

还要尝试更改为,因为要解results压缩对象,所以我认为axios响应中没有命名的字段,但是data实际的json是:

const { data } = await axios.get("/backend/todos-api/todo_container/");

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Django Rest Framework-如何以某种方式获取json响应,以便更容易在前端访问?

来自分类Dev

使用Django REST Framework作为Django的身份验证后端

来自分类Dev

使用 Django Rest Framework 的自定义 JSON 回调

来自分类Dev

使用 Django 创建 REST API

来自分类Dev

如何使用MariaDB运行dockerized Django REST Framework后端?

来自分类Dev

如何使用Django Rest Framework删除对象

来自分类Dev

使用Django REST Framework的Solr搜索结果

来自分类Dev

使用Django Rest Framework设置iOS Restkit

来自分类Dev

Django REST Framework-CurrentUserDefault使用

来自分类Dev

如何使用Django Rest Framework更新OneToOneField

来自分类Dev

使用Django Rest Framework自动引用嵌套

来自分类Dev

Django Rest Framework,使用多个模型查询

来自分类Dev

使用 django-rest-framework 的密码哈希?

来自分类Dev

如何使用Django REST Framework构建嵌套路由?

来自分类Dev

如何使用Django执行JSON REST调用

来自分类Dev

如何使用 Postman 对 Django REST Framework 进行身份验证

来自分类Dev

使用 Django Rest Framework 进行 JWT 令牌认证

来自分类Dev

如何仅使用django后端并通过django-rest-framework发布

来自分类Dev

如何仅使用django后端并通过django-rest-framework发布

来自分类Dev

在REST框架中使用Django消息框架

来自分类Dev

django rest框架-使用视图集

来自分类Dev

无法使用Django REST发布OneToOneField

来自分类Dev

将jQuery与Django Rest API配合使用

来自分类Dev

使用Django Rest框架实现MVC模式

来自分类Dev

使用Django REST框架获取嵌套对象

来自分类Dev

使用Django REST框架ListCreateAPIView上传文件

来自分类Dev

无法使用Django REST发布OneToOneField

来自分类Dev

将jQuery与Django Rest API配合使用

来自分类Dev

Django REST框架:使用OneToOneField无法获取

Related 相关文章

  1. 1

    Django Rest Framework-如何以某种方式获取json响应,以便更容易在前端访问?

  2. 2

    使用Django REST Framework作为Django的身份验证后端

  3. 3

    使用 Django Rest Framework 的自定义 JSON 回调

  4. 4

    使用 Django 创建 REST API

  5. 5

    如何使用MariaDB运行dockerized Django REST Framework后端?

  6. 6

    如何使用Django Rest Framework删除对象

  7. 7

    使用Django REST Framework的Solr搜索结果

  8. 8

    使用Django Rest Framework设置iOS Restkit

  9. 9

    Django REST Framework-CurrentUserDefault使用

  10. 10

    如何使用Django Rest Framework更新OneToOneField

  11. 11

    使用Django Rest Framework自动引用嵌套

  12. 12

    Django Rest Framework,使用多个模型查询

  13. 13

    使用 django-rest-framework 的密码哈希?

  14. 14

    如何使用Django REST Framework构建嵌套路由?

  15. 15

    如何使用Django执行JSON REST调用

  16. 16

    如何使用 Postman 对 Django REST Framework 进行身份验证

  17. 17

    使用 Django Rest Framework 进行 JWT 令牌认证

  18. 18

    如何仅使用django后端并通过django-rest-framework发布

  19. 19

    如何仅使用django后端并通过django-rest-framework发布

  20. 20

    在REST框架中使用Django消息框架

  21. 21

    django rest框架-使用视图集

  22. 22

    无法使用Django REST发布OneToOneField

  23. 23

    将jQuery与Django Rest API配合使用

  24. 24

    使用Django Rest框架实现MVC模式

  25. 25

    使用Django REST框架获取嵌套对象

  26. 26

    使用Django REST框架ListCreateAPIView上传文件

  27. 27

    无法使用Django REST发布OneToOneField

  28. 28

    将jQuery与Django Rest API配合使用

  29. 29

    Django REST框架:使用OneToOneField无法获取

热门标签

归档