[Fix #3120] Enable users to delete their own account
parent
0cb36c6d1d
commit
f90bbda1ed
|
@ -4,6 +4,7 @@ from __future__ import absolute_import
|
||||||
from builtins import object
|
from builtins import object
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from django.contrib.auth.models import User
|
||||||
from haystack.forms import SearchForm
|
from haystack.forms import SearchForm
|
||||||
from haystack.query import SearchQuerySet
|
from haystack.query import SearchQuerySet
|
||||||
from django import forms
|
from django import forms
|
||||||
|
@ -44,6 +45,22 @@ class UserProfileForm(forms.ModelForm):
|
||||||
return profile
|
return profile
|
||||||
|
|
||||||
|
|
||||||
|
class UserDeleteForm(forms.ModelForm):
|
||||||
|
username = CharField(label=_('Username'), help_text=_('Please type your username to confirm.'))
|
||||||
|
|
||||||
|
class Meta(object):
|
||||||
|
model = User
|
||||||
|
fields = ['username']
|
||||||
|
|
||||||
|
def clean_username(self):
|
||||||
|
data = self.cleaned_data['username']
|
||||||
|
|
||||||
|
if self.instance.username != data:
|
||||||
|
raise forms.ValidationError(_("Username does not match!"))
|
||||||
|
|
||||||
|
return data
|
||||||
|
|
||||||
|
|
||||||
class FacetField(forms.MultipleChoiceField):
|
class FacetField(forms.MultipleChoiceField):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -18,4 +18,5 @@ urlpatterns = [
|
||||||
'template_name': 'profiles/private/edit_profile.html',
|
'template_name': 'profiles/private/edit_profile.html',
|
||||||
},
|
},
|
||||||
name='profiles_profile_edit'),
|
name='profiles_profile_edit'),
|
||||||
|
url(r'^delete/', views.delete_account, name='delete_account')
|
||||||
]
|
]
|
||||||
|
|
|
@ -1,16 +1,21 @@
|
||||||
"""Views for creating, editing and viewing site-specific user profiles."""
|
"""Views for creating, editing and viewing site-specific user profiles."""
|
||||||
|
|
||||||
from __future__ import absolute_import
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
from django.contrib import messages
|
||||||
|
from django.contrib.auth import logout
|
||||||
from django.contrib.auth.decorators import login_required
|
from django.contrib.auth.decorators import login_required
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.exceptions import ObjectDoesNotExist
|
from django.core.exceptions import ObjectDoesNotExist
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.http import Http404
|
from django.http import Http404
|
||||||
from django.http import HttpResponseRedirect
|
from django.http import HttpResponseRedirect
|
||||||
from django.shortcuts import get_object_or_404
|
from django.shortcuts import get_object_or_404, render, redirect
|
||||||
from django.shortcuts import render_to_response
|
from django.shortcuts import render_to_response
|
||||||
from django.template import RequestContext
|
from django.template import RequestContext
|
||||||
|
|
||||||
|
from readthedocs.core.forms import UserDeleteForm
|
||||||
|
|
||||||
|
|
||||||
def create_profile(request, form_class, success_url=None,
|
def create_profile(request, form_class, success_url=None,
|
||||||
template_name='profiles/private/create_profile.html',
|
template_name='profiles/private/create_profile.html',
|
||||||
|
@ -183,6 +188,27 @@ def edit_profile(request, form_class, success_url=None,
|
||||||
edit_profile = login_required(edit_profile)
|
edit_profile = login_required(edit_profile)
|
||||||
|
|
||||||
|
|
||||||
|
@login_required()
|
||||||
|
def delete_account(request):
|
||||||
|
form = UserDeleteForm()
|
||||||
|
template_name = 'profiles/private/delete_account.html'
|
||||||
|
|
||||||
|
if request.method == 'POST':
|
||||||
|
form = UserDeleteForm(instance=request.user, data=request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
|
||||||
|
# Do not delete the account permanently because it may create disaster
|
||||||
|
# Inactive the user instead.
|
||||||
|
request.user.is_active = False
|
||||||
|
request.user.save()
|
||||||
|
logout(request)
|
||||||
|
messages.info(request, 'You have successfully deleted your account')
|
||||||
|
|
||||||
|
return redirect('homepage')
|
||||||
|
|
||||||
|
return render(request, template_name, {'form': form})
|
||||||
|
|
||||||
|
|
||||||
def profile_detail(request, username, public_profile_field=None,
|
def profile_detail(request, username, public_profile_field=None,
|
||||||
template_name='profiles/public/profile_detail.html',
|
template_name='profiles/public/profile_detail.html',
|
||||||
extra_context=None):
|
extra_context=None):
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
<li class="{% block profile-admin-social-accounts %}{% endblock %}"><a href="{% url 'socialaccount_connections' %}">{% trans "Connected Services" %}</a></li>
|
<li class="{% block profile-admin-social-accounts %}{% endblock %}"><a href="{% url 'socialaccount_connections' %}">{% trans "Connected Services" %}</a></li>
|
||||||
<li class="{% block profile-admin-change-password %}{% endblock %}"><a href="{% url 'account_change_password' %}">{% trans "Change Password" %}</a></li>
|
<li class="{% block profile-admin-change-password %}{% endblock %}"><a href="{% url 'account_change_password' %}">{% trans "Change Password" %}</a></li>
|
||||||
<li class="{% block profile-admin-change-email %}{% endblock %}"><a href="{% url 'account_email' %}">{% trans "Change Email" %}</a></li>
|
<li class="{% block profile-admin-change-email %}{% endblock %}"><a href="{% url 'account_email' %}">{% trans "Change Email" %}</a></li>
|
||||||
|
<li class="{% block profile-admin-delete-account %}{% endblock %}"><a href="{% url 'delete_account' %}">{% trans "Delete Account" %}</a></li>
|
||||||
<li class="{% block profile-admin-gold-edit %}{% endblock %}"><a href="{% url 'gold_detail' %}">{% trans "Gold" %}</a></li>
|
<li class="{% block profile-admin-gold-edit %}{% endblock %}"><a href="{% url 'gold_detail' %}">{% trans "Gold" %}</a></li>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
{% extends "profiles/base_profile_edit.html" %}
|
||||||
|
|
||||||
|
{% load i18n %}
|
||||||
|
|
||||||
|
{% block title %}{% trans "Delete Account" %}{% endblock %}
|
||||||
|
|
||||||
|
{% block profile-admin-delete-account %}active{% endblock %}
|
||||||
|
|
||||||
|
{% block edit_content_header %} {% trans "Delete Account" %} {% endblock %}
|
||||||
|
|
||||||
|
{% block edit_content %}
|
||||||
|
<form method="POST" action=".">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form }}
|
||||||
|
<input type="submit" name="submit" value="{% trans "Delete Account" %}" id="submit"/>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
Loading…
Reference in New Issue