diff --git a/apps/account/views/back.py b/apps/account/views/back.py index c1eb32b5..92dca84d 100644 --- a/apps/account/views/back.py +++ b/apps/account/views/back.py @@ -3,6 +3,7 @@ from rest_framework import generics, permissions from rest_framework.filters import OrderingFilter import csv from django.http import HttpResponse, HttpResponseNotFound +from rest_framework.authtoken.models import Token from account import models from account.models import User @@ -50,20 +51,67 @@ class UserRUDView(generics.RetrieveUpdateDestroyAPIView): lookup_field = 'id' -def get_user_csv(request, user_id): +def get_user_csv(request, id): + # fields = ["id", "uuid", "nickname", "locale", "country_code", "city", "role", "consent_purpose", "consent_at", + # "last_seen_at", "created_at", "updated_at", "email", "is_admin", "ezuser_id", "ez_user_id", + # "encrypted_password", "reset_password_token", "reset_password_sent_at", "remember_created_at", + # "sign_in_count", "current_sign_in_at", "last_sign_in_at", "current_sign_in_ip", "last_sign_in_ip", + # "confirmation_token", "confirmed_at", "confirmation_sent_at", "unconfirmed_email", "webpush_subscription"] + + # uuid == id + # + # Не найдены: + # consent_purpose + # consent_at + # ezuser_id + # ez_user_id + # remember_created_at + # sign_in_count + # current_sign_in_at + # current_sign_in_ip + # last_sign_in_ip + # confirmed_at + # confirmation_sent_at + # webpush_subscription + # + # country_code не получить - клиент не привязан к стране + try: - user = User.objects.get(id=user_id).values_list() + user = User.objects.get(id=id) except User.DoesNotExist: return HttpResponseNotFound("User not found") - # - # - # response = HttpResponse(content_type='text/csv') - # response['Content-Disposition'] = f'attachment; filename="{user}.csv"' - # - # writer = csv.writer(response) - # writer.writerow(['First row', 'Foo', 'Bar', 'Baz']) - # writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"]) - # - # return response - return HttpResponseNotFound(user) \ No newline at end of file + try: + roles = " ".join([role for role in user.roles]) + except: + roles = "" + + token, _ = Token.objects.get_or_create(user=user) + + fields = { + "id": user.id, + "uuid": user.id, + "username": getattr(user, "username", ""), + "locale": getattr(user, "locale", ""), + "city": getattr(user, "city", ""), + "role": roles, + "created_at": getattr(user, "date_joined", ""), + "updated_at": user.last_login, + "email": user.email, + "is_admin": user.is_superuser, + "encrypted_password": user.password, + "reset_password_token": token.key, + "reset_password_sent_at": token.created, # TODO: не уверен в назначении поля, лучше проверить + "last_sign_in_at": user.last_login, # Повтор? + "confirmation_token": user.confirm_email_token, + "unconfirmed_email": 1 if user.unconfirmed_email else 0 + } + + response = HttpResponse(content_type='text/csv') + response['Content-Disposition'] = f'attachment; filename="{user.email}.csv"' + + writer = csv.writer(response) + writer.writerow(fields.keys()) + writer.writerow(fields.values()) + + return response