diff --git a/users/templates/users/data.html b/users/templates/users/data.html index e913b844..26a22124 100644 --- a/users/templates/users/data.html +++ b/users/templates/users/data.html @@ -209,6 +209,25 @@ + +
+
+
+
{% trans '删除数据和帐号信息' %}
+
+
+ {% csrf_token %} + +
输入完整的 用户名@实例名 以确认删除 + + 删除将无法撤销 +
+
+
+
+
+
+
diff --git a/users/urls.py b/users/urls.py index 019b2dd1..8d8bc695 100644 --- a/users/urls.py +++ b/users/urls.py @@ -11,6 +11,7 @@ urlpatterns = [ path('data/export_marks', export_marks, name='export_marks'), path('data/sync_mastodon', sync_mastodon, name='sync_mastodon'), path('data/reset_visibility', reset_visibility, name='reset_visibility'), + path('data/clear_data', clear_data, name='clear_data'), path('preferences/', preferences, name='preferences'), path('logout/', logout, name='logout'), path('delete/', delete, name='delete'), diff --git a/users/views.py b/users/views.py index c29305b4..8b21d46f 100644 --- a/users/views.py +++ b/users/views.py @@ -33,10 +33,10 @@ from datetime import timedelta from django.utils import timezone import json from django.contrib import messages -from books.models import BookMark -from movies.models import MovieMark -from games.models import GameMark -from music.models import AlbumMark, SongMark +from books.models import BookMark, BookReview +from movies.models import MovieMark, MovieReview +from games.models import GameMark, GameReview +from music.models import AlbumMark, SongMark, AlbumReview, SongReview # Views @@ -992,3 +992,39 @@ def reset_visibility(request): SongMark.objects.filter(owner=request.user).update(visibility=visibility) messages.add_message(request, messages.INFO, _('已重置。')) return redirect(reverse("users:data")) + + +@login_required +def clear_data(request): + if request.method == 'POST': + if request.POST.get('verification') == request.user.mastodon_username: + BookMark.objects.filter(owner=request.user).delete() + MovieMark.objects.filter(owner=request.user).delete() + GameMark.objects.filter(owner=request.user).delete() + AlbumMark.objects.filter(owner=request.user).delete() + SongMark.objects.filter(owner=request.user).delete() + BookReview.objects.filter(owner=request.user).delete() + MovieReview.objects.filter(owner=request.user).delete() + GameReview.objects.filter(owner=request.user).delete() + AlbumReview.objects.filter(owner=request.user).delete() + SongReview.objects.filter(owner=request.user).delete() + request.user.first_name = request.user.username + request.user.last_name = request.user.mastodon_site + request.user.is_active = False + request.user.username = 'removed_' + str(request.user.id) + request.user.mastodon_id = 0 + request.user.mastodon_site = 'removed' + request.user.mastodon_token = '' + request.user.mastodon_locked = False + request.user.mastodon_followers = [] + request.user.mastodon_following = [] + request.user.mastodon_mutes = [] + request.user.mastodon_blocks = [] + request.user.mastodon_domain_blocks = [] + request.user.mastodon_account = {} + request.user.save() + auth_logout(request) + return redirect(reverse("users:login")) + else: + messages.add_message(request, messages.ERROR, _('验证信息不符。')) + return redirect(reverse("users:data"))