はじめに
今回はDjangoでWebアプリを作ってこの間なにやらTwitterStreamingAPIで作ったって記事を書いたと思うんですが,
その時に最後の方にスクリプトが知らないうちにダウンしてるって書いてそれの対処が
毎回,PCを開いてSSH接続してpython /path/to/script.py &
ってやるのが激しくダルかったわけです.
それを回避するためにまずはWebアプリを作ってやればいいって思って思いつきでちゃちゃっと作って,
ついでならiOSアプリでも作るかって思って,タイトル通り見事にCSRFに引っかかって対処できたのでそれの紹介
症状
Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: forbidden (403)"
こんな感じに上はDjango側でPOSTでアクセスするとエラー吐きました.(普通アクセスとゴッチャゴチャですみません)
下はXcodeのエラーログです.Django側のエラー見る限り明らかにCSRFってわかったので,
とりあえず調べてその日は寝ました.
ブラウザから普通にアクセスするとこんな感じにちゃんとアクセスできてます.
対処
同じ症状があったので,これを参考にさせていただきました.
どうやら調べる限り日本産の記事がない?
POSTを受け取りたい関数に@csrf_exempt
をつけろって書いてあったので,以下のようにした
from django.views.decorators.csrf import csrf_exempt @csrf_exempt def myview(): # 処理
views.py
はこんな感じ.
全部見せることになっちゃうんですが,ViewController.m
はこんな感じの処理をさせてる.
外部からもスクリプトを実行できるようにローカルだけでなくモバイル回線でも実行できるように
CocoaPodsのReachability
というライブラリを使用した.またHTTPアクセスには言わずと知れたAFNetworking
実際にUIBottunを押してDjangoのデバッグログに出てきたログは以下のような感じ.
ちゃんとPOSTとして200
を返しています.無事完了ですね.
最後に
Djangoスペシャリストの先輩方はこのぐらい当たり前なんでしょうが,私はまだまだなのでいい勉強ができました.
Djangoの生ソースを見せることはちょっとアレなのでできませんが,これでStreamingがダウンしてても
iOS端末からの操作で起動することができるようになりました.
クッソダッサイiOSアプリ側のデザインを見せるとこんな感じです.
非常にダサいですね.
おまけ
らりょすをタップして増やすアプリはどこかで見たことがある
— らりょす(lol) (@raryosu) 2016年3月24日
教祖がこんなことを仰っていたので勉強がてら教祖をタップすると教祖が増えるアプリを作ってみました.
動画