Skip to main content

কিভাবে Django তে চেঞ্জ পাসওয়ার্ড ভিউ Create করতে হয় ?

ইউসার প্রোফাইল থাকলে পাসওয়ার্ড চেঞ্জ এর অপশনের দরকার হয়।  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>

Comments

Popular posts from this blog

How to set auto save in Sublime text editor

1. Press Ctrl+Shift+P 2 Package install/install package 3.Search autosave 4. Click to install 5. Go to Preference -> Package setting -> Auto Save -> Settings User 6. Paste the code   // Auto save default setting { "auto_save_on_modified": true, "auto_save_delay_in_seconds": 1, "auto_save_all_file": true, "auto_save_current_file": "", "auto_save_backup": false, "auto_save_backup_suffix": "autosave" } 7. Save the file, close the file and finally done :) .

Constructor and Destructor in Python

পাইথন এ ডিফল্ট কিছু  মেথড আছে  যাদেরকে ম্যাজিক মেথড বলা হয়। এই  মেথড গুলা __ মেথড নাম __ দিয়ে লেখা হয় .( আন্ডার স্কোর আন্ডার স্কোর একসাথে ডান্ডার ও বলা যায় ) __init__(): এটাকে  কন্সট্রাক্টর বলা হয়।  কাজ কি ? কাজ হলো যখন কোনো ক্লাস এর ইনস্ট্যান্স create  করা হয় তখন এই মেথড নিজে থেকে কল হয়।  যেমন আমার যদি একটা ক্যাট  ক্লাস নেই। class Cat : def __init__ ( self , legs , colour ): self . legs = legs self . color = color def get_name(self, name): return self.name = name fido = Cat ( 4 , "brown" ) spot = Cat ( 3 , "yellow" ) এই  ক্লাস এ যদি আমরা ক্যাট এর নাম পেতে  চাই তাহলে আমাদের Cat ().get_name ("Mini") কল করতে হবে।  কিন্তু লেগ্স এন্ড কালার এর জন্য কিন্তু Cat ().get_name ("Mini") কল করা লাগসে না।  আমি যখন এ  Cat ( 4 , "brown" )      initializeকরছি  তখনই   __init__   কল হইয়া গেসে । সাধারণত কোনো ক্লাস কল করার সাথে সাথে যদি কোনো ভ্যালু এসাইন করতে চাই তাহলে  __init__ব্যবহার   করা হয়

One-To-One লিংক ব্যবহার করে কিভাবে Django ডিফল্ট User মডেলকে এক্সটেন্ড করতে হয়?

Django User মডেলকে ব্যবহার করে কয়েক ভাবে ইউসার মডেল এর ফিল্ড বাড়ানো যায় ।  One-To-One লিংক তার মধ্যে একটা।  আমি ম্যাক্সিমাম সময় এই পদ্ধতি এপলাই করে থাকি।  এজন্য আমাদের একটা নতুন মডেল বানাতে হবে এক্সট্রা ফিল্ড গুলা অ্যাড করার জন্য যেগুলা ইউসার মডেল এর সাথে সম্পর্কিত।  Profile নামে  একটা মডেল লিখি যেখানে আমরা ইউসার এর birthdate,  এবং address অ্যাড করবো। models.py  from django.db import models from dajngo.contrib.auth.models import User class Profile(models.Model):     user = models.OneToOneField(User, on_delete=models.CASCADE)     birth_date = models.DateField(null=True, blank=True)     address = models.TextField(max_length=500, blank=True)  আমরা এখন কিছু সিগন্যাল অ্যাড করবো যাতে আমরা যখন কোনো ইউসার অ্যাড/আপডেট করবো তখন যেন আমাদের Profile মডেলটা ও অটোমেটিক অ্যাড/আপডেট হয়ে যায় । from django.db import models from django.contrib.auth.models import User from django.db.models.signals import post_save from django.dispatch import receiver class Profile(models.Model):