Django REST Framework: изменение URL-адреса на метод .list () только в ModelViewSet - PullRequest
0 голосов
/ 14 апреля 2020

Я делаю регистрационный API, и, следуя документам, он рекомендовал использовать ViewSets, поэтому я использовал ModelViewSet, теперь, если я POST на URL '*/api/register/', я ' Я сделаю регистрацию, если предоставлены действительные поля (используя .create() метод), что идеально подходит для моего случая именно то, что мне нужно. но когда я хочу перечислить всех пользователей для администратора, запрос должен быть на тот же URL с методом GET, что немного странно для доступа к '*/api/register/', чтобы увидеть пользователей ... поэтому я хотел изменить URL-адрес метода .list() будет выглядеть примерно так: '*/api/users/', но я не могу найти, как это сделать. вот что я делаю до сих пор:

apis.py:

class RegisterApi(ModelViewSet):
    serializer_class = UserSerializer
    queryset = User.objects.filter(is_active=True)

    def get_permissions(self):
        if self.action == 'create':
            return [permissions.AllowAny()]
        else:
            return [permissions.IsAdminUser()]

    def create(self, request, *args, **kwargs):
        response = super().create(request, *args, **kwargs)
        if response:
            response.data = dict(status=True, code=1)
        return response

urls.py:

api_router = SimpleRouter()
api_router.register('register', apis.RegisterApi, basename='users')

extra_urls = [path('login/', apis.LoginApi.as_view()), ]

urlpatterns = [
    # views urls
    path('', views.Home.as_view(), name='home'),
    path('dashboard/', views.Dashboard.as_view(), name='dashboard'),
    path('login/', views.LoginView.as_view(), name='login'),
    path('register/', views.RegistrationView.as_view(), name='register'),

    # api urls
    path('api/', include(extra_urls + api_router.urls)),
 ]

Любые намеки на это?

1 Ответ

0 голосов
/ 15 апреля 2020

Вы должны переименовать API в /users. Тогда метод http POST предназначен для создания (или регистрации) нового пользователя, метод GET - для перечисления пользователей.

Подробнее о соглашении об именах restful api, например: https://restfulapi.net/resource-naming/

...