Add account csv endpoint
This commit is contained in:
parent
47cb7f8e63
commit
a254160f43
|
|
@ -3,6 +3,7 @@ from rest_framework import generics, permissions
|
||||||
from rest_framework.filters import OrderingFilter
|
from rest_framework.filters import OrderingFilter
|
||||||
import csv
|
import csv
|
||||||
from django.http import HttpResponse, HttpResponseNotFound
|
from django.http import HttpResponse, HttpResponseNotFound
|
||||||
|
from rest_framework.authtoken.models import Token
|
||||||
|
|
||||||
from account import models
|
from account import models
|
||||||
from account.models import User
|
from account.models import User
|
||||||
|
|
@ -50,20 +51,67 @@ class UserRUDView(generics.RetrieveUpdateDestroyAPIView):
|
||||||
lookup_field = 'id'
|
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:
|
try:
|
||||||
user = User.objects.get(id=user_id).values_list()
|
user = User.objects.get(id=id)
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
return HttpResponseNotFound("User not found")
|
return HttpResponseNotFound("User not found")
|
||||||
|
|
||||||
#
|
try:
|
||||||
#
|
roles = " ".join([role for role in user.roles])
|
||||||
# response = HttpResponse(content_type='text/csv')
|
except:
|
||||||
# response['Content-Disposition'] = f'attachment; filename="{user}.csv"'
|
roles = ""
|
||||||
#
|
|
||||||
# writer = csv.writer(response)
|
token, _ = Token.objects.get_or_create(user=user)
|
||||||
# writer.writerow(['First row', 'Foo', 'Bar', 'Baz'])
|
|
||||||
# writer.writerow(['Second row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
|
fields = {
|
||||||
#
|
"id": user.id,
|
||||||
# return response
|
"uuid": user.id,
|
||||||
return HttpResponseNotFound(user)
|
"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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user