0
我試着去從的iOS應用發送圖像列表爲Django的REST後端。這是使用AlamoFire的iOS請求。發送圖像的列表,Django的REST框架 - iOS用戶端
的iOS代碼:
let URL = "myURL"
var imagesDictonaryList = [[String : AnyObject]]()
var images = [UIImage]()
for _ in 1...3 {
images.append(UIImage(named: "profileImagePlaceholder")!)
}
//let imagesData = imagesToBase64(images)
for index in 0..<3 {
var myDictionary = [String:AnyObject]()
myDictionary["name"] = "\(index)"
myDictionary["image"] = images[index]
imagesDictonaryList.append(myDictionary)
}
print(imagesDictonaryList)
let parameters = [
"title": "service 1 title",
"description": "service 1 description",
"price": "11",
"images": imagesDictonaryList
]
Alamofire.request(.POST, URL, parameters: parameters as? [String : AnyObject]).responseJSON { response in
print(response.request) // original URL request
print(response.response) // URL response
print(response.data) // server data
print(response.result) // result of response serialization
if let dataString = String(data: response.data!, encoding: NSUTF8StringEncoding) {
print(dataString)
}
if let JSON = response.result.value {
print("JSON: \(JSON)")
}
}
服務器代碼:
views.py
class PredefinedServiceList(APIView):
"""
List all Predefined Services, or create a new Predefined Service
"""
permission_classes = (permissions.AllowAny,)
def post(self, request):
serializer = PredefinedServiceSerializer(data=request.POST)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
serializers.py
class ServiceImageSerializer(serializers.ModelSerializer):
def create(self, validated_data):
b64_text = validated_data.get('image', None)
image_data = b64decode(b64_text)
image_content = ContentFile(b"%s" % image_data, 'whatup.jpg')
validated_data['image'] = image_content
instance = ServiceImage.objects.create()
instance.save()
return instance
class Meta:
model = ServiceImage
fields = ('image', 'name')
class PredefinedServiceSerializer(serializers.ModelSerializer):
images = ServiceImageSerializer(many=True)
class Meta:
model = PredefinedService
fields = ('title', 'description', 'price', 'images')
def create(self, validated_data):
images_data = validated_data.pop('images')
service = PredefinedService.objects.create(**validated_data)
for image in images_data:
new_image, created = ServiceImage.objects.get_or_create(name=image.get('name', None))
new_image.image = image.get('image', None)
new_image.save()
service.images.add(new_image)
return service
models.py
class ServiceImage(models.Model):
image = models.ImageField(upload_to="predefined", null=True)
name = models.CharField(max_length=9001, null=True)
class PredefinedService(models.Model):
title = models.CharField(max_length=100, null=True, blank=True, default="untitled")
description = models.TextField(default="No description available.")
price = models.FloatField(default=0.000)
images = models.ForeignKey(ServiceImage, null=True, blank=True)
的問題是,圖像不是在代碼中request.data但發送的所有其它信息的存在。
圖片只是iOS客戶端請求後的空白列表。當硬編碼列表[0]看到收到的第一張圖片時,我得到的HTML是「索引超出範圍」。
這段代碼中可能存在什麼問題?如何解決它?有沒有更好的方法來實現這一點?
感謝您的回答,但問題仍然存在,即使是上述更改。 –