Django ユーザー認証(Auth)コンポーネント
Django ユーザー認証(Auth)コンポーネントは一般的にユーザーのログイン・登録に使用され、現在のユーザーが正当かどうかを判断し、ログイン成功または失敗ページにリダイレクトします。
Django ユーザー認証(Auth)コンポーネントを使用するには、auth モジュールをインポートする必要があります:
# 认证模块 from django.contrib import auth # 对应数据库 from django.contrib.auth.models import User
戻り値はユーザーオブジェクトです。
ユーザーオブジェクトを作成する3つの方法:
- create():普通ユーザーを作成し、パスワードは平文です。
- create_user():普通ユーザーを作成し、パスワードは暗号化されています。
- create_superuser():スーパーユーザーを作成し、パスワードは暗号化されています。email パラメータを追加で渡す必要があります。
パラメータ:
- username: ユーザー名。
- password:パスワード。
- email:メールアドレス (create_superuser メソッドでは email を追加で渡す必要があります)。
from django.contrib.auth.models import User User.objects.create(username='runboo',password='123')

from django.contrib.auth.models import User User.objects.create_user(username='runbooo',password='123')

from django.contrib.auth.models import User User.objects.create_superuser(username='runboooo',password='123',email='[email protected]')

ユーザーのユーザー名とパスワードを検証するには authenticate() メソッドを使用し、auth_user テーブルからユーザーオブジェクトをフィルタリングします。
使用前にインポートする必要があります:
from django.contrib import auth
パラメータ:
- username:ユーザー名
- password:パスワード
戻り値:検証が成功した場合はユーザーオブジェクトを返し、失敗した場合は None を返します。
例
if request.method == "GET":
return render(request, "login.html")
username = request.POST.get("username")
password = request.POST.get("pwd")
valid_num = request.POST.get("valid_num")
keep_str = request.session.get("keep_str")
if keep_str.upper() == valid_num.upper():
user_obj = auth.authenticate(username=username, password=password)
print(user_obj.username)

認証に成功したユーザーに session を設定し、request.user をユーザーオブジェクトに代入します。
ログインには login() メソッドを使用します。使用前にインポートする必要があります:
from django.contrib import auth
パラメータ:
- request:ユーザーオブジェクト
戻り値:None
例
if request.method == "GET":
return render(request, "login.html")
username = request.POST.get("username")
password = request.POST.get("pwd")
valid_num = request.POST.get("valid_num")
keep_str = request.session.get("keep_str")
if keep_str.upper() == valid_num.upper():
user_obj = auth.authenticate(username=username, password=password)
print(user_obj.username)
if not user_obj:
return redirect("/login/")
else:
auth.login(request, user_obj)
path = request.GET.get("next") or "/index/"
print(path)
return redirect(path)
else:
return redirect("/login/")

ユーザーのログアウトには logout() メソッドを使用し、session 情報をクリアして、request.user を匿名ユーザーに代入します。
使用前にインポートする必要があります:
from django.contrib import auth
パラメータ:
- request:ユーザーオブジェクト
戻り値:None
例
ppp = auth.logout(request)
print(ppp) # None
return redirect("/login/")
デコレータを設定し、ログイン成功後にのみアクセスできるページに一括でデコレータを追加します。
使用前にインポートする必要があります:
from django.contrib.auth.decorators import login_required
例
def index(request):
return HttpResponse("indexページ...")
アクセス元のページを設定し、ログイン成功後にはそのページに戻るようにします。
解説:
django はユーザーがページにアクセスする際、ユーザーが未ログイン状態であれば、ユーザーにログインページを返します。
このとき、ログインページの URL の後ろにはパラメータ next=ユーザーがアクセスしたページの URL が付いています。
したがって、ユーザーのログイン成功後にリダイレクトする URL を next パラメータの値に設定します。
しかし、ユーザーが最初からログインページ logi を入力した場合、request.GET.get("next") は値を取得できないため、後ろに or を追加することで、カスタムの戻り先ページを設定できます。
例
path = request.GET.get("next") or "/index/"
return redirect(path)
