Skip to main content
 首页 » 编程设计

python之“请求”对象不可迭代

2025年05月04日21zhoujg

我正在尝试使用 django rest 框架为移动设备做简单的 crud 演示项目 API,并遇到以下错误

项目名称:crud_demo

应用名称:crud_operations

crud_demo/urls.py

from django.conf.urls import include, url 
from django.urls import path   
 
urlpatterns= [ 
    path('models/', views.model_list), 
    path('models/<int:pk>/', views.model_detail), 
] 

crud_operations/models.py

  from django.db import models 
 
# Create your models here. 
 
class Member(models.Model): 
    firstname = models.CharField(max_length=40) 
    lastname = models.CharField(max_length=40) 

crud_operations/serializers.py

from crud_operations.models import Member 
from rest_framework import serializers 
 
class MemberSerializer(serializers.ModelSerializer): 
    class Meta: 
        model = Member 
        fields = ('firstname', 'lastname') 

crud_operations/views.py

from django.shortcuts import render, redirect 
from rest_framework.decorators import api_view 
from rest_framework.response import Response 
from rest_framework import status 
from .models import Member 
from crud_operations.serializers import MemberSerializer 
 
@api_view(['GET', 'POST']) 
def model_list(request): 
    if request == 'GET': 
        member = Member.objects.all() 
        serializer = MemberSerializer(member) 
        return Response(serializer.data) 
    elif request == 'POST': 
        serializer = MemberSerializer(data=request.DATA) 
        if serializer.is_valid(): 
            serializer.save() 
            return Response(serializer.data, status=status.HTTP_201_CREATED) 
        else: 
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
    return Response({'key': request}, status=status.HTTP_200_OK) 
 
 
@api_view(['GET', 'PUT', 'DELETE']) 
def model_detail(request, pk): 
    try: 
        member = Member.objects.get(pk=pk) 
    except Member.DoesNotExist: 
        return Response(status=status.HTTP_404_NOT_FOUND) 
 
    if request == 'GET': 
        serializer = MemberSerializer(member) 
        return Response(serializer.data) 
 
    elif request == 'PUT': 
        serializer = MemberSerializer(member, data=request.DATA) 
        if serializer.is_valid(): 
            serializer.save() 
            return Response(serializer.data) 
        else: 
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
 
    elif request.method == 'DELETE': 
        member.delete() 
        return Response(status=status.HTTP_204_NO_CONTENT) 
 
    return Response({'key': 'value'}, status=status.HTTP_200_OK) 

请您参考如下方法:

@api_view(['GET', 'POST']) 
def model_list(request): 
    if request.method == 'GET': 
        member = Member.objects.all() 
        serializer = MemberSerializer(member) 
        return Response(serializer.data) 
    elif request.method == 'POST': 
        serializer = MemberSerializer(data=request.DATA) 
        if serializer.is_valid(): 
            serializer.save() 
            return Response(serializer.data, status=status.HTTP_201_CREATED) 
        else: 
            return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) 
    return Response({'key': request}, status=status.HTTP_200_OK) 

request包含很多对象,所以要检查类型,需要使用HttpRequest对象的method属性,来检查是什么类型的请求就是这样,试试上面的答案