Я использую инструментарий Django OAuth, чтобы ограничить доступ к моему API. Проблема в том, что я не уверен, как использовать это для своих собственных взглядов. У него есть свои собственные встроенные представления «Приложения», для которых я вижу, что он работает, но не уверен, как он может работать для меня.
Я пытался использовать их общие классы (https://django -oauth-toolkit.readthedocs.io / en / latest / views / class_based.html ), но безрезультатно:
views.py:
class PostCarFax(ReadWriteScopedResourceMixin, ProtectedResourceView):
queryset = CarFax.objects.all()
serializer_class = CarFaxSerializer
Это дает мне AttributeError: type object 'PostCarFax' has no attribute 'get_extra_actions'
ошибку
Интересно, это так, как он определяет свои URL? Из их кода:
urls.py:
from django.conf.urls import url
from . import views
app_name = "oauth2_provider"
base_urlpatterns = [
url(r"^authorize/$", views.AuthorizationView.as_view(), name="authorize"),
url(r"^token/$", views.TokenView.as_view(), name="token"),
url(r"^revoke_token/$", views.RevokeTokenView.as_view(), name="revoke-token"),
url(r"^introspect/$", views.IntrospectTokenView.as_view(), name="introspect"),
]
management_urlpatterns = [
# Application management views
url(r"^applications/$", views.ApplicationList.as_view(), name="list"),
url(r"^applications/register/$", views.ApplicationRegistration.as_view(), name="register"),
url(r"^applications/(?P<pk>[\w-]+)/$", views.ApplicationDetail.as_view(), name="detail"),
url(r"^applications/(?P<pk>[\w-]+)/delete/$", views.ApplicationDelete.as_view(), name="delete"),
url(r"^applications/(?P<pk>[\w-]+)/update/$", views.ApplicationUpdate.as_view(), name="update"),
# Token management views
url(r"^authorized_tokens/$", views.AuthorizedTokensListView.as_view(), name="authorized-token-list"),
url(r"^authorized_tokens/(?P<pk>[\w-]+)/delete/$", views.AuthorizedTokenDeleteView.as_view(),
name="authorized-token-delete"),
]
Думаю, я мог бы определить свои собственные взгляды там? Вот мой urls.py:
router = routers.DefaultRouter()
router.register(r'post_carfax', views.PostCarFax)
admin.autodiscover()
from rest_framework import generics, permissions, serializers
from oauth2_provider.contrib.rest_framework import TokenHasReadWriteScope, TokenHasScope
urlpatterns = [
url(r'^api/v1/', include(router.urls)),
url(r'^admin/', admin.site.urls),
url('o/', include('oauth2_provider.urls', namespace='oauth2_provider')),
]