Ошибка атрибутов при импорте представлений в Urls.py в django rest framework

views.py

from rest_framework.decorators import api_view
from rest_framework import status
from django.shortcuts import render
from rest_framework.views import APIView
from rest_framework import authentication, permissions
from django.contrib.auth.models import User
from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.response import Response
from App.serializers import *
from App.models import *
from App.serializers import *


# Create your views here.
class ListUsers(APIView):
    """
    View to list all users in the system.

    * Requires token authentication.
    * Only admin users are able to access this view.
    """
    authentication_classes = [authentication.TokenAuthentication]
    permission_classes = [permissions.IsAdminUser]

    def get(self, request, format=None):
        """
        Return a list of all users.
        """
        usernames = [user.username for user in User.objects.all()]
        return Response(usernames)
 
class CustomAuthToken(ObtainAuthToken):

    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data,
                                           context={'request': request})
        serializer.is_valid(raise_exception=True)
        user = serializer.validated_data['user']
        token, created = Token.objects.get_or_create(user=user)
        return Response({
            'token': token.key,
            'user_id': user.pk,
            'email': user.email
        })

@api_view(['GET'])
def consol_overall_view(request):
    user = Users.objects.values('id','employee_name','billable_and_non_billable',)
    qs = conso_serializers(user, many= True)
    proj = Add_Job.objects.values('project','user','client')
    qs1 = timelog_serializers(proj, many= True)
    cli = Add_Timelog.objects.values('Date','Hours','project_id')
    qs2 = time_serializers(cli,many= True)
    return Response(qs.data+qs1.data+qs2.data,status = status.HTTP_200_OK)

urls.py

from django.contrib import admin
from django.urls import path,include
from django.urls import re_path
from django import views
from App.views import CustomAuthToken
from.router import router
from rest_framework.authtoken import views
from django.views.generic import TemplateView
from App.views import consol_overall_view

urlpatterns = [
    path('', TemplateView.as_view(template_name="social_app/index.html")), 
    path('admin/', admin.site.urls),
    path('api/',include(router.urls)),
    path('accounts/', include('allauth.urls')),
    re_path('rest-auth/', include('rest_auth.urls')),
    path('api-auth/', include('rest_framework.urls')),
    re_path('rest-auth/registration/', include('rest_auth.registration.urls')),
    path('api-token-auth/', views.obtain_auth_token),
    path('api-token-auth/', CustomAuthToken.as_view()),
    path('over',views.consol_overall_view),
]

пока я пытался мигрировать и запустить сервер, он показывает ошибку

path('over',views.consol_overall_view), AttributeError: модуль 'rest_framework.authtoken.views' не имеет атрибута 'consol_overall_view'

.

Мне нужен consol_overall_view в Url или как API. Если это возможно сделать как API, пожалуйста, подскажите, как это сделать.

Когда интерпретатор python находит одноименные импорты, он принимает во внимание последний из них. В вашей программе urls.py вы импортировали модуль views из двух разных пакетов. Интерпретатор Python будет рассматривать имя views из пакета restframework.authtoken как модуль views, а не модуль из django, потому что импорт из первого является последним. Кроме того, вы импортировали consol_overall_view непосредственно из App.views, но ссылаетесь на него как на значение из views, которое вы импортировали ранее. Измените views.consol_overall_view на consol_overall_view в ваших url-шаблонах. Также используйте псевдонимы в импорте.

from django.contrib import admin
from django.urls import path,include
from django.urls import re_path
# import django.views with alias
from django import views as django_views
from App.views import CustomAuthToken
from.router import router
from rest_framework.authtoken import views
from django.views.generic import TemplateView
from App.views import consol_overall_view

urlpatterns = [
    path('', TemplateView.as_view(template_name="social_app/index.html")), 
    path('admin/', admin.site.urls),
    path('api/',include(router.urls)),
    path('accounts/', include('allauth.urls')),
    re_path('rest-auth/', include('rest_auth.urls')),
    path('api-auth/', include('rest_framework.urls')),
    re_path('rest-auth/registration/', include('rest_auth.registration.urls')),
    path('api-token-auth/', views.obtain_auth_token),
    path('api-token-auth/', CustomAuthToken.as_view()),
    path('over', consol_overall_view),
]
Вернуться на верх