ユーザーがDjangoで自分のパスワードを変更できるコードを教えてもらえますか?
ユーザーがDjangoで自分のパスワードを変更できるコードを教えてもらえますか?
回答:
Djangoにはユーザー認証システムが付属しています。ユーザーアカウント、グループ、権限、およびCookieベースのユーザーセッションを処理します。このドキュメントでは、物事がどのように機能するかについて説明します。
パスワードの変更のセクションを参照してください
manage.pyファイルがあるプロジェクトへのナビゲーション
$ python manage.py shell
以下のスクリプトを入力してください:
django.contrib.auth.modelsからユーザーをインポート u = User.objects.get(username__exact = 'john') u.set_password( '新しいパスワード') u.save()
簡単なmanage.pyコマンドを使用することもできます。
manage.py changepassword *username*
新しいパスワードを2回入力するだけです。
にが含まれている場合は、django.contrib.adminにINSTALLED_APPSアクセスできます。example.com/path-to-admin/password_change/これには、古いパスワードを確認し、新しいパスワードを2回入力するためのフォームがあります。
シェルに移動してpasswdを入力し、passwdを再入力する必要はありません。
python manage.py changepassword <username>
or
/manage.py changepassword <username>
シェルの使用
python manage.py shell
from django.contrib.auth.models import User
users=User.objects.filter(email='<user_email>')
#you can user username or etc to get users query set
#you can also use get method to get users
user=users[0]
user.set_password('__enter passwd__')
user.save()
exit()
urls.py:
urlpatterns = [
url(r'^accounts/', include('django.contrib.auth.urls')),
テンプレート:
<a href="{% url 'password_change' %}">{% trans "Change password" %}</a>
文書化:https://docs.djangoproject.com/en/1.9/topics/auth/default/#using-the-views
このチュートリアルは、関数ベースのビューでそれを行う方法を示しています。
ファイルを閲覧する:
from django.contrib import messages
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.forms import PasswordChangeForm
from django.shortcuts import render, redirect
def change_password(request):
if request.method == 'POST':
form = PasswordChangeForm(request.user, request.POST)
if form.is_valid():
user = form.save()
update_session_auth_hash(request, user) # Important!
messages.success(request, 'Your password was successfully updated!')
return redirect('change_password')
else:
messages.error(request, 'Please correct the error below.')
else:
form = PasswordChangeForm(request.user)
return render(request, 'accounts/change_password.html', {
'form': form
})
URLファイル:
from django.conf.urls import url
from myproject.accounts import views
urlpatterns = [
url(r'^password/$', views.change_password, name='change_password'),
]
そして最後に、テンプレート:
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save changes</button>
</form>
これは、そのスローで問題が発生した場合に備えて、私が使用したコマンドAttributeError: Manager isn't available; 'auth.User' has been swapped for 'users.User'です。
python manage.py shell -c "from django.contrib.auth import get_user_model;
User = get_user_model();
u = User.objects.get(username='admin');
u.set_password('password123');
u.save()"
パードキュメント、使用:
from django.contrib.auth.hashers import makepassword
これを行う主な理由は、Djangoがハッシュされたパスワードを使用してデータベースに保存するためです。
password=make_password(password,hasher='default')
obj=User.objects.filter(empid=emp_id).update(username=username,password=password)
この手法を、モデルから派生したカスタムユーザーモデルに使用しましたAbstractUser。クラスとサブクラスのスペルを技術的に間違えた場合は申し訳ありませんが、テクニックはうまくいきました。
@Ciroの回答と非常に似ていますが、元の質問に固有です(すべての認証ビューを追加しません)。
に追加するだけurlpatternsですurls.py:
url('^change-password/$', auth_views.password_change, {'post_change_redirect': 'next_page'}, name='password_change'),
post_change_redirectパスワードが変更された後にリダイレクトするURLを指定することに注意してください。
次に、テンプレートに追加するだけです。
<a href="{% url 'password_change' %}">Change Password</a>