【问题标题】:doing POST on Django Rest Framework with viewsets return "405 - METHOD POST NOT ALLOWED"使用视图集在 Django Rest Framework 上执行 POST 返回“405 - 不允许方法发布”
【发布时间】:2016-09-15 22:17:25
【问题描述】:

我正在尝试为我的 IOS 应用创建一个 HiScore 模块。

我被困在 POST(PUT 可能会有同样的问题,但不确定)部分,我在 Postman 中得到 405。 LIST AND DETAILS 工作得很好,所以模型、序列化程序或视图没有问题,只是我猜想在某处添加权限

观看次数

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class GameViewSet(viewsets.ModelViewSet):
    queryset = HiScore.objects.all()
    serializer_class = GameSerializer

class GameTypeViewSet(viewsets.ModelViewSet):
    queryset = HiScore.objects.all()
    serializer_class = GameTypeSerializer

class GameLevelViewSet(viewsets.ModelViewSet):
    queryset = HiScore.objects.all()
    serializer_class = GameLevelSerializer

class HiScoreViewSet(viewsets.ModelViewSet):
    permission_classes = [AllowAny,]
    queryset = HiScore.objects.all()
    serializer_class = HiScoreSerializer

序列化器.py

class HiScoreSerializer(ModelSerializer):
image = SerializerMethodField()
class Meta:
    model = HiScore
    fields = ("user", "game", "gameType", "gameLevel", "points", "image")

def get_image(self, obj):
    try:
        profile = UserProfile.objects.get(user=obj.user)
        return profile.image.url
    except:
        return None

urls.py

router = DefaultRouter()
router.register(prefix='hiscores', viewset=HiScoreViewSet)

urlpatterns = router.urls

【问题讨论】:

    标签: django django-rest-framework


    【解决方案1】:

    根据documentation,我认为您在视图中缺少as_view。试试这个:

    在视图中:

    hiscores = HiScoreViewSet.as_view({
        'get': 'list',
        'post': 'create'
    })
    

    在网址中:

    from rest_framework.urlpatterns import format_suffix_patterns
    urlpatterns = format_suffix_patterns([
        url(r'^hiscores/$', hiscores, name='hiscores')
    ])
    

    http://www.django-rest-framework.org/api-guide/viewsets/

    【讨论】:

    • 但是你的HiScoreViewSet和例子不一样。你没有使用装饰器@detail_route(methods=['post'])
    • 对不起我的朋友,但是我在提问之前已经阅读了这篇文章,如果你阅读它你会发现以下一句话:REST framework 包含的默认路由器将为一个标准的创建/检索/更新/销毁样式操作集,如下所示:所以这意味着如果我不覆盖任何 CRUD 方法,我会自动获取它们......如果你去浏览器并写 create at url 的结尾你会看到你得到了一个 create url...再次,这是一个权限问题或身份验证问题,而不是我理解的视图问题。谢谢
    • 这绝对不是身份验证问题,否则您应该会收到401 UNAUTHORIZED
    • 您要发布到的 URL 是什么?
    • 谢谢,这是向前迈出的一大步,仍然无法使用邮递员,但 atlas 现在正在浏览器中运行,获取帖子、放置、列表、详细信息,一切都在浏览器...如何设置 json 所以它不会崩溃我猜这是一个不同的事情但是 atlas 没有权限的基础知识并且任何事情都在工作....并且网址必须是 += 不是 =.. . 否则我会丢失所有内容的所有网址
    猜你喜欢
    • 2021-06-19
    • 2018-12-22
    • 1970-01-01
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2021-12-12
    • 2019-05-04
    相关资源
    最近更新 更多