###前提・実現したいこと
Swift側でTextFieldを作り、そこに文字を打って、その文字をAlamofireのPOSTリクエストでDjango側に送り、Django側で表示させたいです。
###発生している問題
Swift側で設定したparametersを辞書で設定し、Alamofire.requestでPOSTで送っているのですが、Django側で受け取った辞書が空で表示されてしまいます。一応通信は成功しています。
DjangoSide
1<MultiValueDict: {}> 2[20/Apr/2020 16:20:33] "POST /money_management/post/ HTTP/1.1" 200 2 3
###当該のソースコード
以下、Alamofire部分です。
Swift
1import Foundation 2import Alamofire 3 4class PostObserver:ObservableObject { 5 @Published var postString = String() 6 7 init() { 8 self.post() 9 } 10 11 func post() { 12 print(postString) 13 let data:[String:Any] = ["msg":postString] 14 Alamofire.request("http://localhost:8000/money_management/post/", method: .post, encoding: JSONEncoding.default) 15 .responseJSON { response in 16 if response.result.isSuccess { 17 print("成功しました") 18 print(data) 19 20 } else { 21 print("失敗してはります。") 22 } 23 } 24 } 25}
一応ですが、TextFieldを表示させるコードも以下に載せます。
Swift
1import SwiftUI 2import AVFoundation 3 4struct PostView: View { 5 @State var en:String = "" 6 @ObservedObject var postObserver = PostObserver() 7 8 var body: some View { 9 10 VStack { 11 TextField("0", text: $en) 12 .textFieldStyle(RoundedBorderTextFieldStyle()) 13 .frame(width: 200) 14 .padding(.bottom, 50) 15 16 Button(action: { 17 self.postObserver.postString = self.en 18 self.postObserver.post() 19 }) { 20 Text("ボタン") 21 .background( 22 Circle() 23 .foregroundColor(.red) 24 .frame(width:100, height:100) 25 26 ) 27 28 }.padding() 29 30 } 31 32 } 33} 34 35struct PostView_Previews: PreviewProvider { 36 static var previews: some View { 37 PostView() 38 } 39}
また、DjangoのViewの該当部分を載せます。
DjangoSide
1from django.http import HttpResponse, JsonResponse 2from django.views.decorators.csrf import csrf_protect, csrf_exempt 3 4@csrf_exempt 5def post(request): 6 if request.method == 'POST': 7 string = request.FILES 8 print(string) 9 return JsonResponse(request.FILES) 10
コードの説明としてはAlamofireでparameters=["msg": postString]で初期化し、これをDjangoに送りたい、というコードです。このpostStringはTextFieldで入力したものです。これにより、入力したものをDjangoに送ろうとしています。
Django側のrequest.FILESでSwift側のTextFieldで入力した文字列を受け取って、それをprint(string)で表示させようとしています。また、データをhttp://localhost:8000/money_management/post/ にアクセスした時にブラウザ上に表示されるようにしたいです。
あまり自信のないコードですが、どうかよろしくお願いします。
###補足事項
Alamofire 4.8.2を使用
あなたの回答
tips
プレビュー