0
イムをしようとはジャンゴRESTバックエンドにiOSアプリケーションから画像のリストを送信します。これはAlamoFireを使用したiOSリクエストです。- 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が取得する「範囲外のインデックス」です。
このコードにはどのような問題がありますか?どのようにそれを解決するには?これを実装するためのよりよい方法はありますか?
あなたの回答に感謝しますが、問題は上記の変更でも表示されます。 –