hi i am trying to create login api which will give me extra output fields by default knox login is giving 'expire' and 'token' but i want to add other values too for example it is giving me :
{
"expiry": "2020-10-02T17:00:22.906891Z",
"token": "2a6d73cf85f3f15d855ab0386db7fcf4342167ab3d47e1d0983a775c120ff267",
} ```
but i want to extra values too like :
{
"expiry": "2020-10-02T17:00:22.906891Z",
"token": "2a6d73cf85f3f15d855ab0386db7fcf4342167ab3d47e1d0983a775c120ff267",
"username" : "foo",
"projects" :"["faa","fee","fuu"]",
}
my views.py is given below
from django.shortcuts import render
from .models import *
from django.views.generic.edit import FormView
from rest_framework import generics, permissions
from rest_framework.response import Response
from knox.models import AuthToken
from .serializers import UserSerializer, RegisterSerializer
from django.contrib.auth import login
from rest_framework import permissions
from rest_framework.authtoken.serializers import AuthTokenSerializer
from knox.views import LoginView as KnoxLoginView
# Register API
class RegisterAPI(generics.GenericAPIView):
serializer_class = RegisterSerializer
def post(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.save()
return Response({
"user": UserSerializer(user, context=self.get_serializer_context()).data,
"token": AuthToken.objects.create(user)[1]
})
class LoginAPI(KnoxLoginView):
permission_classes = (permissions.AllowAny,)
def get_post_response_data(self, request):
data
def post(self, request, format=None):
serializer = AuthTokenSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
user = serializer.validated_data['user']
user_id_main=user.id
user_name=user.username
# projects_list=ProjectTable.objects.filter(id=Project_user_reletional_table.objects.filter(id=user_id))
# for a in projects_list:
# print(a.name)
# print(a.project_city)
print(user_id_main,user_name)
b=Project_user_reletional_table.objects.filter(user_id_id=user_id_main)
for a in b:
print(a.project_id)
login(request, user)
login_details=super(LoginAPI, self).post(request, format=None)
return super(LoginAPI, self).post(request, format=None)
please help me thanks in advance
thanks but it is solved
in this code i put super(LoginAPi,self).post(request,format=None) into a variable temp_list and by default it is returning Response then i go in Response class and check there is data attribute hold data in dict format . now i can add other value in that ,i don't know it is good approch or not but for me it is working good . maybe some day i got proper solution thanks