MEDIA_ROOTにファイルが置かれるようなテストを実行後、ファイルを削除することを考えていた。
いろいろ方法ありそうだけど、こんな感じでよさそう。
view関数のテストでjsonをPOSTする
def test_xxxx(self): data = {} # postするデータ res = self.client.post('/path/to/api', content_type='application/json', data=json.dumps(data))
view関数側ではrequest.bodyをjson.loadsしてdataを受け取る
def xxxx(request): data = json.loads(request.body)
Djangoで日本語名のファイルアップロード時にエラー
ひさびさにUnicodeEncodeErrorなんてものを見た気がする。
UnicodeEncodeError: 'ascii' codec can't encode characters in position 11-19: ordinal not in range(128)
以前も同じようなことがあって、そのときはgunicornを起動している環境の環境変数でLC_TYPE=ja_JP.UTF-8が指定すれば解決した。
関連:djangoで日本語名のファイルアップロード時のエラー - brainstorm
今回も同じかと思って環境変数を確認したらLC_TYPEはちゃんと設定されていた。
$ env | grep ja_JP.UTF-8 LC_ALL=ja_JP.UTF-8 LANG=ja_JP.UTF-8 LANGUAGE=ja_JP.UTF-8 LC_CTYPE=ja_JP.UTF-8
で調べた結果、gunicornをUpstartで起動させる場合、Upstartの設定ファイル中でexport LC_ALL=ja_JP.UTF-8しておく必要があるらしい。
適当なサンプル
description "my website" start on runlevel [2345] stop on runlevel [06] respawn script # 省略 export LC_ALL=ja-JP.UTF-8 # <- 追加 exec gunicorn ....... # 省略 end script
上記のように設定ファイルを修正後、initctl restartではなく、stop/startをすると問題は解決した。