2013-09-21 11 views
7

शीर्षक बताते हैं।Django उपयोगकर्ता पंजीकरण - पासवर्ड ईमेल के माध्यम से रीसेट करें

क्या Django 1.5 के भीतर कोई अंतर्निहित विधि है जो उपयोगकर्ता पासवर्ड रीसेट को संभालती है? यानी ईमेल रीसेट लिंक के माध्यम से?

मेरे उपयोगकर्ताओं को "पासवर्ड भूल गए" लिंक की आवश्यकता है।

उत्तर

24

हां वहाँ है।

आप में भी इस फार्म का उपयोग कर सकते हैं अपने forms.py

class PassworResetForm(forms.Form): 
    error_messages = { 
     'unknown': ("That email address doesn't have an associated " 
        "user account. Are you sure you've registered?"), 
     'unusable': ("The user account associated with this email " 
         "address cannot reset the password."), 
     } 
    def clean_email(self): 
     """ 
     Validates that an active user exists with the given email address. 
     """ 
     UserModel = get_user_model() 
     email = self.cleaned_data["email"] 
     self.users_cache = UserModel._default_manager.filter(email__iexact=email) 
     if not len(self.users_cache): 
      raise forms.ValidationError(self.error_messages['unknown']) 
     if not any(user.is_active for user in self.users_cache): 
      # none of the filtered users are active 
      raise forms.ValidationError(self.error_messages['unknown']) 
     if any((user.password == UNUSABLE_PASSWORD) 
      for user in self.users_cache): 
      raise forms.ValidationError(self.error_messages['unusable']) 
     return email 

    def save(self, domain_override=None, 
      subject_template_name='registration/password_reset_subject.txt', 
      email_template_name='registration/password_reset_email.html', 
      use_https=False, token_generator=default_token_generator, 
      from_email=None, request=None): 
     """ 
     Generates a one-use only link for resetting password and sends to the 
     user. 
     """ 
     from django.core.mail import send_mail 
     for user in self.users_cache: 
      if not domain_override: 
       current_site = get_current_site(request) 
       site_name = current_site.name 
       domain = current_site.domain 
      else: 
       site_name = domain = domain_override 
      c = { 
       'email': user.email, 
       'domain': domain, 
       'site_name': site_name, 
       'uid': int_to_base36(user.pk), 
       'user': user, 
       'token': token_generator.make_token(user), 
       'protocol': use_https and 'https' or 'http', 
       } 
      subject = loader.render_to_string(subject_template_name, c) 
      # Email subject *must not* contain newlines 
      subject = ''.join(subject.splitlines()) 
      email = loader.render_to_string(email_template_name, c) 
      send_mail(subject, email, from_email, [user.email]) 

आप उपयोगकर्ता के लिए भेजें के लिए HTML टेम्पलेट जेनरेट करना होगा:

{% autoescape off %} 
    You're receiving this e-mail because you requested a password reset for your user account at {{ site_name }}. 

    Please go to the following page and choose a new password: 
    {% block reset_link %} 
     {{ domain }}{% url 'django.contrib.auth.views.password_reset_confirm' uidb36=uid token=token %} 
    {% endblock %} 

    Your username, in case you've forgotten: {{ user.username }} 

    Thanks for using our site! 

    The {{ site_name }} team. 

{% endautoescape %} 

और को यह यूआरएल जोड़ने urls.py

(r'^accounts/password/reset/$', 'django.contrib.auth.views.password_reset', 
    {'post_reset_redirect' : '/accounts/password/reset/done/'}), 
    (r'^accounts/password/reset/done/$', 'django.contrib.auth.views.password_reset_done'), 
    (r'^accounts/password/reset/(?P<uidb36>[0-9A-Za-z]+)-(?P<token>.+)/$', 'django.contrib.auth.views.password_reset_confirm', 
    {'post_reset_redirect' : '/accounts/password/done/'}), 
    (r'^accounts/password/done/$', 'django.contrib.auth.views.password_reset_complete'), 

+0

धन्यवाद !! बिल्कुल मुझे क्या चाहिए। देर से उत्तर स्वीकृति के लिए खेद है। – endline

+3

एक सुझाव: त्रुटि संदेशों को हटाने का एक अच्छा विचार हो सकता है। यदि आप बस "ईमेल भेजा गया" कहते हैं, तो आप अपने सिस्टम में पंजीकृत कौन है इसके बारे में जानकारी रिसाव नहीं करते हैं। –

+0

कमाल धन्यवाद। –

0

आप डिफ़ॉल्ट Django-व्यवस्थापक यूआरएल

उपयोग कर सकते हैं url('^', include('django.contrib.auth.urls')), अपने urls.py

में जोड़े settings.py

# using gmail as my smtp server 
EMAIL_USE_TLS = True 
EMAIL_HOST = 'smtp.gmail.com' 
EMAIL_HOST_USER = '[email protected]' 
EMAIL_HOST_PASSWORD = 'password' 
EMAIL_PORT = 587 
करने के लिए ईमेल साख जोड़े प्रत्येक यूआरएल के लिए एक टेम्पलेट बनाने

फिर लिंक का उपयोग करें http://baseurl/password_reset/

जोड़ें
संबंधित मुद्दे