Merge branch 'feature/add-accounts-csv' into 'develop'
Feature/add accounts csv See merge request gm/gm-backend!177
This commit is contained in:
commit
b68e98e9aa
|
|
@ -10,4 +10,5 @@ urlpatterns = [
|
|||
path('user-role/', views.UserRoleLstView.as_view(), name='user-role-list-create'),
|
||||
path('user/', views.UserLstView.as_view(), name='user-create-list'),
|
||||
path('user/<int:id>/', views.UserRUDView.as_view(), name='user-rud'),
|
||||
path('user/<int:id>/csv', views.get_user_csv, name='user-csv'),
|
||||
]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
from django_filters.rest_framework import DjangoFilterBackend
|
||||
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
|
||||
|
|
@ -46,3 +49,69 @@ class UserRUDView(generics.RetrieveUpdateDestroyAPIView):
|
|||
serializer_class = serializers.BackDetailUserSerializer
|
||||
permission_classes = (permissions.IsAdminUser,)
|
||||
lookup_field = '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=id)
|
||||
except User.DoesNotExist:
|
||||
return HttpResponseNotFound("User not found")
|
||||
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user