AdminSite
を使用してDjango管理者をカスタマイズし、login_form属性を使用してAdminログインページのカスタムログインフォームを指定します。
admin.py
class MyAdminSite(AdminSite):
login_form = CustomAdminLoginForm
admin_site = MyAdminSite(name='myadmin')
admin_site.register(User)
admin_site.register(Group
urls.py
Djangoのデフォルトの管理を取り除くために我々が持っている管理者をオーバーライド
from app.admin import admin_site
url(r'^admin/', admin_site.urls)
forms.py
AuthenticationForm持っていますconfirm_login_allowed
メソッドは、これを使用してloに許可を与えますログインしているかどうかを確認してください。
class CustomAdminLoginForm(AuthenticationForm):
def confirm_login_allowed(self, user):
if user.last_login:
raise ValidationError(mark_safe('Hey first time user please reset your password here... <a href="/test">test</a>'), code='inactive')
注:このアプローチでは、考慮すべき点はたくさんあります。
- ユーザーが最初にパスワードを設定しなかった場合、どのように2回目の試行を処理するのですか?今回はlast_longがNoneではありません。
date_joined
が救助になります。 last_login == date_joined
- しかし、ユーザーが最初の日にパスワードを設定しておらず、翌日になるとどうなりますか?
編集:
あなたはログインしているユーザーをチェックし、ここにconfig_login_allowed
ロジックを適用するために信号を使用することができますか...?
from django.contrib.auth.signals import user_logged_in
def change_password_first_time(sender, user, request, **kwargs):
# Your business logic here...
user_logged_in.connect(change_password_first_time)
downvoteの理由 – Mohan