ইউসার প্রোফাইল থাকলে পাসওয়ার্ড চেঞ্জ এর অপশনের দরকার হয়। Django তে বিল্ট ইন PasswordChangeForm ব্যবহার করে খুব সহজে এই অপশন আনা যায়। এজন্য ফাঙ্কশন বেসড ভিউ ব্যবহার করা ভালো কারণ PasswordChangeForm, ModelForm কে ইনহেরিট করে না এবং ইউসার আর্গুমেন্ট কন্সট্রাক্টর হিসেবে নেয় .
আমরা views.py এভাবে লিখতে পারি
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordChangeForm
from django.shortcuts import render, redirect
@login_required
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)
return redirect('/') # you can redirect others url you like
else:
form = PasswordChangeForm(request.user)
return render(request, 'accounts/form.html', {
'form': form
})
*save() এর পর update_session_auth_hash(request, user) ব্যবহার না করলে ব্যবহারকারীর auth সেশন বাতিল হবে এবং তাকে পুনরায় লগ ইন করতে হবে।
urls.py
from django.conf.urls import url
from accounts import views
urlpatterns = [
url(r'^change-password/$', views.change_password, name='change_password'),
]
form.html
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save changes</button>
</form>
আমরা views.py এভাবে লিখতে পারি
from django.contrib.auth import update_session_auth_hash
from django.contrib.auth.decorators import login_required
from django.contrib.auth.forms import PasswordChangeForm
from django.shortcuts import render, redirect
@login_required
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)
return redirect('/') # you can redirect others url you like
else:
form = PasswordChangeForm(request.user)
return render(request, 'accounts/form.html', {
'form': form
})
*save() এর পর update_session_auth_hash(request, user) ব্যবহার না করলে ব্যবহারকারীর auth সেশন বাতিল হবে এবং তাকে পুনরায় লগ ইন করতে হবে।
urls.py
from django.conf.urls import url
from accounts import views
urlpatterns = [
url(r'^change-password/$', views.change_password, name='change_password'),
]
form.html
<form method="post">
{% csrf_token %}
{{ form }}
<button type="submit">Save changes</button>
</form>
Comments
Post a Comment