उपयोगकर्ताओं को अपने स्वयं के पासवर्ड को Django में बदलने की अनुमति कैसे दें?


84

क्या कोई मुझे कोड करने के लिए कह सकता है जहां उपयोगकर्ता अपने स्वयं के पासवर्ड को Django में बदल सकते हैं?


15
अगर Google ने हमें उनके बारे में सोचने के बजाय उत्तरों की खोज की है, तो stackoverflow हमें उनके लिए खोज करने के बजाय उत्तर मांगती है।
sykora

2
-1 के लिए 'प्लाज़ेंडमेटेहकोड'। BTW, आपको अपने प्रश्नों पर सही उत्तर स्वीकार करना चाहिए।
कैट प्लस प्लस

8
हाँ, मैं Google का बहुत उपयोग करता था, और अभी भी करता हूँ। लेकिन एसओ आसान और तेज है, और आप चर्चाओं में संलग्न हो सकते हैं और वैकल्पिक उत्तर सुन सकते हैं। जब तक स्वेतलोगर एंजेलोव और अन्य जैसे लोग हैं, जो सरल सवालों के जवाब देने के लिए अपना समय (और अंक अर्जित) करने के लिए तैयार हैं, ठीक है, यही कारण है कि एसओ इसके लिए है।
डीओके

7
Django के पास इतने व्यापक और आसानी से सुलभ दस्तावेज हैं, कि SO के उत्तर में सभी प्रलेखन को कभी भी दोहराने के लिए चल रहे प्रयास संभवतः कोई मूल्य नहीं जोड़ सकते हैं।
बेन जेम्स

3
@ बीन जेम्स: इतनी अच्छी बात। वास्तव में यही कारण है कि मैं अपने उत्तरों में दस्तावेज़ीकरण को फिर से लिखने के बजाय सिर्फ डॉन्बोन जानकारी और डॉक्स से लिंक देता हूं।
cethegeek 13

जवाबों:


159

Django एक उपयोगकर्ता प्रमाणीकरण प्रणाली के साथ आता है। यह उपयोगकर्ता खातों, समूहों, अनुमतियों और कुकी-आधारित उपयोगकर्ता सत्रों को संभालता है। यह दस्तावेज़ बताता है कि चीजें कैसे काम करती हैं।

Django पासवर्ड कैसे बदलें

पासवर्ड अनुभाग देखें

  1. अपनी परियोजना के लिए नेविगेशन जहाँ manage.pyफ़ाइल निहित है

  2. $ python manage.py shell

  3. स्क्रिप्ट के नीचे टाइप करें:

django.contrib.auth.models से उपयोगकर्ता आयात करें
u = User.objects.get (username__exact = 'john')
u.set_password ('नया पासवर्ड')
u.save ()

आप साधारण manage.pyकमांड का भी उपयोग कर सकते हैं :

manage.py changepassword *username*

बस दो बार नया पासवर्ड दर्ज करें।

से बदल रहा है पासवर्ड डॉक्स में अनुभाग।


यदि आपके पास django.contrib.adminअपने में INSTALLED_APPS, आप यात्रा कर सकते हैं: example.com/path-to-admin/password_change/जो अपने पुराने पासवर्ड की पुष्टि करें और दो बार नया पासवर्ड दर्ज करने के लिए एक रूप होगा।


14
मुझे नहीं लगता कि इससे उपयोगकर्ताओं को अपने स्वयं के पासवर्ड बदलने के लिए पृष्ठ बनाने में मदद मिलती है - बस ऐसा करने के लिए एक व्यवस्थापक।
मीका वाल्टर

25

आप केवल django.contrib.auth.views.password_changeअपने URLconf में दृश्य का उपयोग कर सकते हैं । यह एक डिफ़ॉल्ट रूप और टेम्पलेट का उपयोग करता है; अपनी खुद की आपूर्ति वैकल्पिक है।


4

इसके बिना पास जाने की जरूरत है पासवार्ड और रेंटर पासवार्ड दर्ज करें

 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()


2

यह ट्यूटोरियल दिखाता है कि इसे फ़ंक्शन आधारित विचारों के साथ कैसे किया जाए:

फाइल देखें:

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
    })

यूआरएल फ़ाइल:

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>

1

एक बार जब url पैटर्न जोड़ा जाता है जैसा कि Ciro Santilli के उत्तर में दिखाया गया है, उपयोगकर्ताओं को पासवर्ड बदलने की अनुमति देने का एक त्वरित तरीका उन्हें व्यवस्थापक कार्यों के लिए "स्टाफ एक्सेस" देना है। यदि आप उन्हें किसी समूह में नहीं जोड़ते हैं या उन्हें विशेष अनुमति नहीं देते हैं, तो वे अभी भी अपना पासवर्ड example.com/admin पेज पर जाकर बदल सकते हैं। स्टाफ का उपयोग उन्हें पृष्ठ पर जाने देता है भले ही वह रिक्त हो; ऊपरी दाएं कोने में वे "पासवर्ड बदलें" पर क्लिक कर सकते हैं और व्यवस्थापक फ़ंक्शनलिटी का उपयोग कर सकते हैं।


1

यह वह कमांड है जिसका मैंने उपयोग किया है, बस उस फेंक में आपको समस्या हो रही है 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()"

1

प्रति प्रलेखन , का उपयोग करें:

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है। मुझे खेद है कि अगर मैंने तकनीकी रूप से वर्ग और उपवर्ग को गलत किया, लेकिन तकनीक ने अच्छा काम किया।


0

@ 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>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.