Я использую Django Rest Framework в своем приложении Python и использую аутентификацию JNT для проверки подлинности веб-токена (DRF JWT) для аутентификации api.Проверка подлинности JWT не работает для настраиваемого контроллера в Django
Проблема возникает, когда я создаю пользовательский контроллер. Я указал конкретный URL-адрес функции в моем файле calculations.py
, который я создал. Вот как они выглядят.
urls.py
from django.conf.urls import patterns, include, url
from django.contrib import admin
from rest_framework import routers
from app.serializers import xxxViewSet, yyyViewSet
from app.calculations import getReturns
router = routers.DefaultRouter()
router.register(r"xxx", xxxViewSet)
router.register(r"yyy", yyyViewSet)
urlpatterns = patterns('',
url(r'^admin/', include(admin.site.urls)),
url(r'^api/auth/token/$', 'rest_framework_jwt.views.obtain_jwt_token'),
url(r'^api/auth/', include('rest_framework.urls', namespace='rest_framework')),
url(r'^api-token-verify/', 'rest_framework_jwt.views.verify_jwt_token'),
url(r'^api/', include(router.urls)),
**url(r'^getReturns/', getReturns),**
)
calculations.py
from django.http import HttpResponse
from .models import xxx, yyy, zzz, aaa
def getReturns(request):
data = request.GET('data')
**running calculations here on data and giving out response**
return HttpResponse(response)
serializers.py
from rest_framework.authentication import SessionAuthentication, BasicAuthentication
from rest_framework import routers, serializers, viewsets, permissions
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from .models import xxx, yyy, zzz, aaa
class xxxSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = xxx
fields = ('id', 'name')
class xxxViewSet(viewsets.ModelViewSet):
authentication_classes = [SessionAuthentication, BasicAuthentication, JSONWebTokenAuthentication]
permission_classes = [permissions.IsAuthenticated, permissions.IsAdminUser]
queryset = xxx.objects.all()
serializer_class = xxxSerializer
выше serializers.py
файл содержит классы Serializer для всех моих моделей, а также viewsets для того же. Я еще не передал viewsets в views.py
, так что теперь файл пуст.
В любом случае, мой calculations.py
отделен от этих файлов, и функция, определенная в этом файле, непосредственно вызывается URL-адресом/getReturns /, не просматривая представление. Как включить функции, определенные в файле моих вычислений, в представление, чтобы мои классы полномочий вызывались до того, как функция будет выполнена?
Теперь я вижу, что я не представил всю необходимую информацию.Я использую это для JWT https://github.com/GetBlimp/django-rest-framework-jwt. 'calculate.py' содержит только одну единственную функцию, которую я поставил в вопросе' getReturns'. Я не обволакивал его в любом виде. Как вы можете видеть в файле 'url.py', я просто вызываю эту функцию и привязываю ее к URL-адресу. Должен ли я помещать это в представление в мой 'views.py'? Если да, то как мне это сделать и настроить его с помощью аутентификации? – srthu
Я редактировал вопрос. Не могли бы вы сейчас взглянуть на него и ответить? – srthu
Ответ все тот же, вам нужно использовать оболочку классов @authentication для функции, это в моем ответе. – Withnail