痛風とシステム障害を恐れるエンジニアのブログ

趣味のことだったり仕事に関することだったりを徒然なるままに。webとかオープン系の会社で働いてます。お仕事の依頼お待ちしておりまーす。

最近の尿酸値

6 \(^o^)/

でもね、不思議な事もありまして、γ-gptがとんでもなく高いの・・・orz

いつもこの数値は相反した動きをするので医者も「こんな動きは理解できない」って言うんだけど・・・。

とりあえず、忘年会新年会を乗り切ったぞー\(^o^)/

DjangoのORMのFilterを動的に作りますよっと。

今作ってるサイトの要件の中で、ユーザが任意に入力した言葉を元に検索するというのを実装しようと思ったのがことの発端。

基本的にはURIのパラメーターを元に定型的な検索をする仕組みで作っていて、そのための情報がわんさかあったのですが、
パラメーターを動的に構築するのは少し手間がかかったのでメモっておきます。

続きを読む

JS嫌いでずっと避けてきたおっさんが最近のJSの環境に震え上がっている話し

GoogleマップAjaxが流行ったり、JQueryとかが流行った頃に本を一冊買ったっきり、JSはずっと避けてきました。
一時期JSではなくActionScriptに期待を寄せたこともありましたが、スティー◯・ジョ◯ズがFlashを閉め出したせいで(←八つ当たり)、Flashの勢いはどんどん弱まって行く始末。
そんな私が会社の都合でJSを触ることになりました。
未だによくわかってないけど、やっていくことを少しずつメモっていきます(゚д゚)

続きを読む

PythonでSlackにメッセージを投げる

問い合わせフォームから問い合わせをするとメールが管理者に届くという仕組みがありますが、
今回はユーザーがフォームに入力した内容をSlackに投げるというのに取り組んでみました。

とりあえず、SlackのAPIの設定ですな。
Pythonのライブラリを見てみるとまぁたくさんいろんなのがそろっていて、だいたい必要になってくるのがSlackのAPIのTokenですな。

続きを読む

Django + Python Social Auth + Google OAuth2で詰まった件

virgo.hatenadiary.jp
このへんでSocialAuthは使えるかも!
と、期待していたわけですが、実際に使ってみて、FacebookTwitterのアカウントの連携は問題なくいきました。

問題はGoogle
これにはだいぶ悩まされました。

続きを読む

DjangoでAjaxをするときに詰まったこと

私は仕事ではPHPばかりですが、自社フレームワーク案件が多く、あまり有名なフレームワークの案件の経験がありません。
最近Laravelを触り始めたくらい(^^;
最近のフレームワークは標準でCSRF対応がされているので便利でございますなぁ。

Djangoも同様に普通にCSRF対応がされているようです。
今回はそこで少しつまずきました。

通常CSRF対策ではトークンをクライアントに発行してPOSTでリクエストが来た時にトークンの妥当性をチェックしている。らしい。
Laravelでは

{{ csrf_token() }}

関数をこんな感じでviewに埋め込んであげると、トークン用の項目を生成してくれるみたいです。


さて、今回の私の環境はDjangoを使っているとはいえViewの部分は殆どReact.jsで書いてます。
React.jsの中でダイアログを表示して、ダイアログ内のフォームをPOSTするような感じです。
さらにReact.jsをそのままJSで書いているのではなく、JSXで記述しているので、Djangoから直接JSXを触れそうにないという・・・。
もしかしたらできるかもしれないけど、今の私には無理(;´Д`)

色々調べてたらクッキーの保存するとか、ヘッダーにしのばせるとかあるみたい。

Cross Site Request Forgery protection | Django documentation | Django

あと、React.jsとは別のところでグローバル変数を宣言して利用する方法もあるみたいでした。
Djangoのviewで

<script type="text/javascript">
var CSRF_TOKEN = "{{ csrf_token }}";
</script>

グローバル変数で宣言しておいてJSXのほうでは

var ele = document.createElement('input');
ele.setAttribute('type', 'hidden');
ele.setAttribute('name', 'csrfmiddlewaretoken');
ele.setAttribute('value', CSRF_TOKEN);
form.appendChild(ele);

と記載してフォームに項目を追加してPOSTするようです。
私はとりあえずこっちでやってみました。
JSを見るとソースに丸見えだからもしかしたらCookieとかの方が良いのかもしれませんね。
まぁCookieも見ることできるから、あまり大差ないかもしれないけど(゚д゚)
CSRFのチェックを一部無効にするという方法もあるけど、それはできるだけ避けたいところですな( ゚Д゚)y─┛~~

参考にした記事stackoverflow.com