【问题标题】:Get Error for Python Django Rest Framework Code获取 Python Django Rest 框架代码的错误
【发布时间】:2020-03-19 15:15:23
【问题描述】:

我是 Python 中的 Django 新手。我有一个名为“corr_end”的python Django项目,其中有一个名为“send_values”的应用程序

我编写了一个序列化程序,试图使 get/put/post/delete 方法可用并通过 Postman 测试工作。

当我尝试 get 方法时,它在 Postman 中不起作用并给我一个错误。

感谢您对此提供的任何帮助。谢谢。

网址:http://127.0.0.1:8000/values/dinos

来自终端的错误:

来自终端的错误:

内部服务器错误:/values/dinos TypeError: __init__() 接受 1 个位置参数,但给出了 2 个 [19/Mar/2020 07:02:00] "GET /values/dinos HTTP/1.1" 500 63860

回溯(最近一次通话最后一次): 文件“[redacted]/anaconda3/envs/chipseq/lib/python3.6/site-packages/django/core/handlers/exception.py”,第 34 行,在内部 响应 = get_response(请求) _get_response 中的文件“[redacted]/anaconda3/envs/chipseq/lib/python3.6/site-packages/django/core/handlers/base.py”,第 115 行 response = self.process_exception_by_middleware(e, request) _get_response 中的文件“[redacted]/anaconda3/envs/chipseq/lib/python3.6/site-packages/django/core/handlers/base.py”,第 113 行 response = Wrapped_callback(request, *callback_args, **callback_kwargs)

我在 send_values 目录下创建了一个 Python 包“api”,其中 send_values_api.py 包含序列化程序。

from rest_framework.exceptions import ValidationError
from rest_framework.serializers import ModelSerializer
from rest_framework.viewsets import ModelViewSet
from ..models import Dinosaur

class DinoSerializer(ModelSerializer):
    class Meta:
        model = Dinosaur
        fields = ['name', 'age', 'species']

    def validate(self, userData):
        if not userData['name']:
            print('name is required')
            return ValidationError
        return userData

    def create(self, userData):
        newDinosaur = Dinosaur.objects.create(**userData)
        newDinosaur.save()
        return newDinosaur

    def update(self, existingDinosaur, userData):
        fields = ['name', 'age', 'species']
        for i in fields:
            fieldValue = userData.get(i, getattr(existingDinosaur, i))
            setattr(existingDinosaur, i, fieldValue)
        existingDinosaur.save()
        return existingDinosaur

class DinoViewSet(ModelViewSet):
    serializer_class = DinoSerializer
    http_method_names = ['get', 'post', 'put', 'delete', 'options']
    queryset = Dinosaur.objects.all()

models.py 文件:

from django.db import models
from django.utils import timezone

# Create your models here.
class Correlations(models.Model):
    message = models.CharField(max_length=100)
    score = models.TextField()
    executed = models.CharField(max_length=100)
    created_at = models.DateTimeField(default=timezone.now)

class Dinosaur(models.Model):
    age = models.PositiveIntegerField()
    species = models.TextField()
    name = models.CharField(max_length=50)

    def __str__(self):
        return self.name

send_values 中的 urls.py:

from .api.send_values_api import DinoViewSet
from django.conf.urls import url

urlpatterns = [
    url('dinos', DinoViewSet),
]

注意:views.py 文件中没有代码。

【问题讨论】:

    标签: python django rest postman serialization


    【解决方案1】:

    ViewSetsViews 不同。您不能将它们直接添加到诸如 Views 之类的 url 中。这里最简单的解决方案是像这样使用routers

    from rest_framework.routers import DefaultRouter
    
    router = DefaultRouter()
    router.register(r'dinos', DinoViewSet)
    
    urlpatterns = [
        path('', include(router.urls)),
    ]
    

    【讨论】:

      猜你喜欢
      • 2015-02-16
      • 2016-05-03
      • 2015-01-26
      • 2016-01-10
      • 1970-01-01
      • 1970-01-01
      • 2014-08-25
      • 2017-07-28
      • 2014-09-16
      相关资源
      最近更新 更多