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

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

【python入門】認証機能に苦戦!

こんにちは!

 

認証機能に苦戦しております。。ネットではさも当たり前のように「認証機能作ってみた」の記事、、挫けそうになりました。

でもコードと戦うことまる2日、やっと少しコード理解ができたので備忘録。

 

djangoで初めから備わっているもの

 ログイン

 ログアウト

 パスワード変更

 パスワード再設定

上記ファイルについてはビュー・フォームが提供されている(ただしテンプレートは自作)

・備わってないもの

 ユーザ新規登録

 ユーザ情報変更

 

各ファイルの使い方

■ログイン機能

・urls.py

//django.contrib.auth にあるviewsを読み込み
//django.contrib.auth.views import LoginViewでもいい
//その場合、下段のviews.LoginVewはLoginViewとするだけでいい
from django.contrib.auth import views
 
//LoginViewの引数にはテンプレート名指定
path('accounts/login/', views.LoginView.as_view(), name='login'), 

 

LoginViewはクラス汎用ビュー

https://qiita.com/felyce/items/7d0187485cad4418c073

つまりdjangoの元ファイルにここで使われているクラスの元があるという理解

 

・views.py

def login(request):
  user=authenticate(
    name=request.POST.get('name'),
    password=request.POST.get('password'),
  )
  login(request,user)

authenticateで認証にかけている

login()に値引き渡してログイン

 

■ログアウト

似た感じでLogoutViewを使う

 

■ユーザ登録

①自分でユーザ登録用のクラスを作る(django ジェネリックビューのCreateViewを継承したもの)

https://qiita.com/hayata-yamamoto/items/00072091caa5921fc819

②それかviews.pyにUserモデルのインスタンス作り、POSTデータを入れてsave()する関数作る

http://e-class.center.yuge.ac.jp/jdk_docs/django1.4/topics/auth.html

 

 

上記参考リンク様、ありがとうございます。

各書き方は基本的にここを参考にしました

https://docs.djangoproject.com/ja/2.2/topics/auth/default/#django.contrib.auth.authenticate

 

何が難しいかというと、使っている汎用ビューやら関数やらクラスやらの中身がわからないから何を使っているのかどう使えばいいのか分からない!

基本的に覚えるしかないのだろうか。

 

本によるとdjango-allauthというパッケージがあるらしい・・!何やら外部との連携もできるらしい!こちら使おうかな。(気づくの遅い)