Djangoroidの奮闘記

python,django,angularJS1~三十路過ぎたプログラマーの奮闘記

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] の導入方法

GitHub - codingforentrepreneurs/Try-Django-1.8: Try Django 1.8 is an introduction to Django version 1.8. This series covers a variety of Django basics as well as Django 1.8 specific material

  • 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ソースコードを見て確認してみる。

GitHub - macropin/django-registration: django-registration (redux) now with Django 1.8/1.9/1.10 & Python 3 support

  • ちなみに、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を展開するとかそういう意味だと思う。