django備忘録18 Django Registration [Redux]
参照サイト
django-registrationの公式サイト? django-registration-redux 1.4 documentation — django-registration-redux 1.4 documentation
django-registrationのgithubのサイト GitHub - macropin/django-registration: django-registration (redux) now with Django 1.8/1.9/1.10 & Python 3 support
Django Registration [Redux] の導入方法
cloneした、ソースコードのtemplates/registration フォルダを丸ごと、作成中のtemplates DIRにコピペするだけ
もしくは、こちらの正式サイトのinstall ガイドに従ってinstallする django-registartion ではなく、django-registration-redux である点に注意する。
django-registration-redux 1.4 documentation — django-registration-redux 1.4 documentation
reduxは、ReactJSのフレームワークのようです。
Redux入門【ダイジェスト版】10分で理解するReduxの基礎 - Qiita
- install 自体は,以下のコマンドで可能
pip install django-registration-redux
- settings.py の設定 以下、サンプルサイトのコードをそのまま転記 'django.contrib.auth' は、あると思うので、 'django.contrib.sites' と、'registration' を追記しておく。
INSTALLED_APPS = ( 'django.contrib.sites', 'registration', #should be immediately above 'django.contrib.auth' 'django.contrib.auth', # ...other installed applications... ) ACCOUNT_ACTIVATION_DAYS = 7 # One-week activation window; you may, of course, use a different value. REGISTRATION_AUTO_LOGIN = True # Automatically log the user in.
- urls.py の設定 これもサンプル通り設定
(r'^accounts/', include('registration.backends.default.urls')),
templatesのダウンロード 冒頭でコピペしたやつ。公式サイトには、文法の解説しかないかも。
migrateする
accounts/register/ とかで、登録画面のサンプルが見られる。
restration/activation_email.txtの設定 (activation のためのemailの文面)
activation_email_subject.txtの設定
ちなみに、accounts/ 以下のアドレスを確認したい場合は、accounts/適当な文字を入れて、debugを発動させて、有効なリンクの一覧を表示させるのが、簡単かもとのこと。 こんな感じで出てくる。
^$ [name='home'] ^contact/$ [name='contact'] ^about/$ [name='about'] ^admin/ ^accounts/ ^activate/complete/$ [name='registration_activation_complete'] ^accounts/ ^activate/(?P<activation_key>\w+)/$ [name='registration_activate'] ^accounts/ ^register/complete/$ [name='registration_complete'] ^accounts/ ^register/closed/$ [name='registration_disallowed'] ^accounts/ ^register/$ [name='registration_register'] ^accounts/ ^login/$ [name='auth_login'] ^accounts/ ^logout/$ [name='auth_logout'] ^accounts/ ^password/change/$ [name='auth_password_change'] ^accounts/ ^password/change/done/$ [name='auth_password_change_done'] ^accounts/ ^password/reset/$ [name='auth_password_reset'] ^accounts/ ^password/reset/complete/$ [name='auth_password_reset_complete'] ^accounts/ ^password/reset/done/$ [name='auth_password_reset_done'] ^accounts/ ^password/reset/confirm/(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>.+)/$ [name='auth_password_reset_confirm'] ^static\/(?P<path>.*)$ ^media\/(?P<path>.*)$
- ただ、このままでは、/accounts/login/ にアクセスても, DoesNotExist at /accounts/login/ エラーが出てしまう。なぜか?
理由はよくわからないけど、settings.py に、'SITE_ID = 1' を追記すると動くようになる。
どうも 'django.contrib.sites' の働きと関係があるらしい。 third party 製のアプリのURLを起動させるときに必要になってくるらしいけど、よくわからないから、時間があるときに調べてみる。
admin を開くと、サイト(sites) というテーブルが追加されている。これは、'django.contrib.sites'に合わせて作られたものだと思う。同じプロジェクトで、別のドメインを参照にするためようのテーブルだと思われる。さっきのSITE_ID=1 というのもここからきてるのか??SITE_ID=1は、ここのテーブルのID=1を使ってるとか?
register から登録してみる。ちゃんと登録できるか確認する。
activate_keyとか、その他もろもろ細かいところについては、django-registrationのgithubのソースコードを見て確認してみる。
- ちなみに、urls.py の
url(r'^accounts/', include('registration.backends.default.urls'))
の動作は、registration.backends.default.urls にある、urls.py の中身と、同じところにあるviews.pyを見ると結構よくわかる urls.py django-registration/urls.py at master · macropin/django-registration · GitHub
views.py django-registration/views.py at master · macropin/django-registration · GitHub
- 通常仕様だとアカウント登録→emailで、activate_keyを確認(リンクをクリック)→アカウントのactivateが完了という手順。
*それを手動で確認するには、 アカウント登録 →多分、ドメインがexample.comとかのため、うまく認証できない。ただ、databaseには登録されている。 →adminのユーザープロファイルのテーブルのactivate_keyを手動でコピー →http://127.0.0.1:8000/accounts/activate/コピーしたactivate_keyを貼り付け →これで完了する(。。。はず)
登録が完了するとregister_complete.html にredirectされるが、ちょっと味気ないページのため、少し修正する。
仮登録したidでログインしてみる→ログインには成功しても、http://127.0.0.1:8000/accounts/profile/ は、page not found になってします。なぜか? 単純に、accounts/profileは、'backends/default/urls.py' で、設定されていないから。
ひとまず accounts/logout/ として、logoutしてみる。
調べ物・不明点
このままでは、/accounts/login/ にアクセスても, DoesNotExist at /accounts/login/ エラーが出てしまう。なぜか?
理由はよくわからないけど、settings.py に、'SITE_ID = 1' を追記すると動くようになる。
admin を開くと、サイト(sites) というテーブルが追加されている。これは、'django.contrib.sites'に合わせて作られたものだと思う。同じプロジェクトで、別のドメインを参照にするためようのテーブルだと思われる。SITE_ID=1 というのはここからきている。SITE_ID=1のサイト(ドメイン)を使って、registrationのurlを展開するとかそういう意味だと思う。