初心者プログラマのひとり勉強部屋

若葉マークのプログラマー☺️

【python入門】django-allauthのメモ

こんにちは!

 

だいぶ個人アプリケーションが出来上がってきました。(機能だけ)

 

ところで、認証機能については、django-allauthをインストールして使っています。

djangoデフォルトの認証機能と違うのかな、と思っていましたが同じ関数使えるみたいなので備忘録。

 

・使い方例

・追記(templateの修正とsignup時エラー)

・参考

 

     django-allauth 使い方例

■viewにデコレーターを使う場合

from django.contrib.auth.decorators import login_required
@login_required
def create(request):
//以下略

※ログインしていない場合ログインページへ飛びます

 

最初django-allauthの公式ドキュメントから、

@verified_email_required

でe-mail認証しかないのかと思っていた。

https://django-allauth.readthedocs.io/en/latest/decorators.html 

 

■templateでログインしている場合にボタンを表示する場合

          {% if user.is_authenticated %}
          <p class="card-text"><a href="{% url 'photosend:edit' photo.pk %}">編集</p>
          <p class="card-text"><a href="{% url 'photosend:delete' photo.id%}">削除</p>
          {% endif %}

 

■templateでログインしていてかつ自分の投稿だけボタンを表示させたい時

          {% if user.is_authenticated and request.user.id == photo.user.id%}
          <p class="card-text"><a href="{% url 'photosend:edit' photo.pk %}">編集</p>
          <p class="card-text"><a href="{% url 'photosend:delete' photo.id%}">削除</p>
          {% endif %}

railsの”current_user”(現在ログインしているユーザ情報を取得するrails(device)のヘルパーメソッド)と同等の”request.user”

https://codeday.me/jp/qa/20190119/149157.html

↑こんな使い方もあるみたい(request.user.is_authenticated)

↑削除されていました、、また実践して試してみます

 

django-allauthのインストール・ファイルの在り処はこの記事を参考にさせていただきました!

sinyblog.com

 

 

     (2020.3 追記)

テンプレートもほんの少しだけいじっています。

f:id:mocomo012:20200324200840p:plain

ログイン画面

■備忘録

templateの場所

pip show django-allauth

「Location:」のパスのallauthフォルダの下をたどって行くとtemplateフォルダに入っています。

 

(追記2)

数ヶ月ぶりにアプリ起動した際、サインアップ時に

[Errno 8] nodename nor servname provided, or not known

エラーが出ました。

このエラーが出た際はstackoverflowに記載の以下の記事より、

setting.pyに

ACCOUNT_EMAIL_VERIFICATION = "none"

を記載することにより解決しました。(どこかに影響するかもしれませんがわかりません、、emailのバリデーションかな?)

google app engine - gaierror at /accounts/social/signup/ - Django allauth twitter signup - Stack Overflow

 

 

     最後に

それにしてもallauthで普通にdjangoの認証機能が使えるのか、一部だけなのか。

allauthの内部でデフォルトの認証機能の機能使えるようにしているのか。またはセッション管理が共通なのか。

コードを見てみたいけど、今の私ではわかりません。

 

一応djangoの認証機能についてのドキュメント

Djangoの認証システムを使用する | Django ドキュメント | Django

django-allauthのgit

GitHub - pennersr/django-allauth: Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication.

 django-allauthのdoc

Welcome to django-allauth! — django-allauth 0.32.0 documentation

とりあえず使っていって確かめよう。