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

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

Python Social Authを使ってみる その3

サーバーの環境は
Nginxのproxy_redirectを使用して、Docker上のDjangoサーバにリクエストを転送しています。
こんな感じ。

proxy_pass http://127.0.0.1:9090;

そのままブラウザからアプリに接続して、SNS認証を行うと、コールバック先が
http://127.0.0.1:9090になってしまいます。
当然これだとサーバが見つかりません。
Django127.0.0.1:9090で動いているので、callbackURLの指定先を任意のドメインにしないといけなくて、Djangoにもその情報を渡してあげないといけません。
設定箇所は2箇所。
1つはnginx

proxy_set_header Host $host;

もう1つはDjangoのsetting.py

USE_X_FORWARDED_HOST = True

設定が終わったら、NginxとGunicornを再起動して完了。

参考にしたのはこちらstackoverflow.com


あ、GunicornとDjangoの連携メモってない。。

Python Social Authを使ってみる その2

色々と箇条書き

1.settings.py
DEBUG = Falseにした場合はALLOWED_HOSTSの中身も設定しないとHTTPステータス400が返って来てわけわかんなくなる。

DEBUG = False
ALLOWED_HOSTS = ['*']

2.Facebookの認証処理をローカルで行う場合は、適当に名前付けしとかないとリダイレクトでエラーになるもよう。

127.0.0.1       hoge.com

3.middlewareを設定する
こちらを参考にしました。stackoverflow.com

Python Social Authを使ってみる

勉強がてら「Python Social Auth 」を入れてみます。

github.com

Python Social Auth 」はつい最近にもアップデートされているので、今回は安心して使えるのではないかな!

まずはpipからインストール。

pip install python-social-auth

Configuration — Python Social Auth documentation
ここを参考にしながらセッティングを行っていきました。

INSTALLED_APPS = (
(略)
    'social.apps.django_app.default', #追加
)

AUTHENTICATION_BACKENDS = (
    'social.backends.twitter.TwitterOAuth',
    'django.contrib.auth.backends.ModelBackend',
)

SOCIAL_AUTH_TWITTER_KEY = 'Your Twitter Key'
SOCIAL_AUTH_TWITTER_SECRET = 'Your Twitter Secret'
#urlの設定
 url(r'social', include('social.apps.django_app.urls', namespace='social')),

適当なテスト用のviewを用意して認証用のリンクを設定

<a href="{% url 'social:begin' 'twitter' %}">Login</a>

とりあえず実行してみたところコールバック処理まで動くこと確認できた。
ORMの設定を全くしていないので、そこでエラーが出たけど、SNSとの認証処理自体は問題なくできていそう。

よかった。

Python3.4の環境にdjango-social-authを入れてみる その2

とりあえず、サンプルページを作って動かしてみたら

ImportError at /
cannot import name 'simplejson'

とエラーが出る。
ぐぐってみると
python - How to solve the ImportError: cannot import name simplejson in Django - Stack Overflow
こちらに

I think the above answers are workarounds.

Django used to ship with simplejson in django.utils, but this was removed in Django 1.5 because json module being available in Python’s standard library.

So you should now import json instead of from django.utils import simplejson, and make necessary changes where simplejson methods are called.

ってある。
まじか・・・・。

ライブラリのほうが古いDjangoにしか対応してないみたい。
ということで、一旦django-social-authは使わないようにしようと思いますた。

 pip uninstall  django-social-auth3

を実行(ー人ー)

今月の尿酸値は・・・

7.1
(@@)

いつも定期健診を受けたら封書が届いて先生から一言添えられてるのですが今回は
「最近ビールを飲み過ぎてませんか?」
でした。
あたりです(;´∀`)

なお、今週は3日も呑みの予定が入ってます(@@)

Python3.4の環境にdjango-social-authを入れてみる。

SNSとの連携を容易に実現するために「django-social-auth」をインストールしてみます。
とりあえずは何も考えずに

pip install django-social-auth

と入力すると

print "unable to find version in %s" % (VERSIONFILE,)

SyntaxError: invalid syntax

とこんなエラーが。
これよくわかってないのですが、確かこの書き方ってPython2の書き方のような・・・。
pipってその辺のバージョンの整合性とかちゃんと考えてくれるんでないの??(@@)
まぁ入らないので、色々と調べてみたらpypi.python.org
こちらにPython3ようのを発見。

pip install django-social-auth3

としたところ、無事にインストールできた。

動作確認はこれから。
なかなか奥が深いですね。

Ubuntu上のPostgreSQLのデータディレクトリを変更する方法

UbuntuPostgreSQLは他のとちょっと作法が違うようなのでメモっておきます。
何も考えずに起動コマンドの引数でデータディレクトリを指定したら

"`{設定変更したフォルダ}/global/pg_control": No such file or directory

とエラーが出ました。
Ubuntuは困ったことにinitdbにパスが通っていない。
(その分色んなバージョンのクラスターが簡単に同居できるようになっているみたい)

initdb自体は存在しているのでバージョンに適したコマンドを呼んであげればい。

/usr/lib/postgresql/9.3/bin/initdb -D {設定変更したフォルダ}

成功したら

Success. You can now start the database server using:

    /usr/lib/postgresql/9.3/bin/postgres -D {設定変更したフォルダ}
or
    /usr/lib/postgresql/9.3/bin/pg_ctl -D {設定変更したフォルダ} -l logfile start

こんな感じでログが出る。

はぁ。これを理解するのに遠回りして3時間ほど費やした(;´Д`)

※お世話になったリンク。
WhiteBoard Coder: Change the Postgres data_directory folder location