如何制作不同的 Django Api Url 路径
How to make a different Django Api Url path
Django 2.1,python3.6,djangorestframework。
当我转到以下 url 时,我可以看到我的数据(太棒了!)http://127.0.0.1:8000/api/cards/1
这是我在 api 页面上看到的 -
HTTP 200 OK
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"id": "1",
"card_title": "Hello"
},
]
我希望能够转到此 url 以获取相同的数据 - http://127.0.0.1:8000/api/cards/title/Hello
我如何更新我的观点和 url 才能做到这一点?
基地url
urlpatterns = [
...
path('api/cards/', include('cards.api.urls')),
]
cards.api.urls.py
urlpatterns = [
path('', CardListView.as_view()),
path('<str:pk>/', CardDetailView.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
cards.api.views.py
class CardList(generics.ListCreateAPIView):
permission_classes = ()
queryset = Card.objects.all()
serializer_class = CardSerializer
class CardDetail(generics.RetrieveUpdateDestroyAPIView):
#permisssion_classes = (UserPermission,) # set the permission class
permission_classes = ()
queryset = Card.objects.all()
serializer_class = CardSerializer
我尝试将其添加到 cards.api.urls.py path('api/cards/title/<str:pk>/', CardDetail.as_view()),
中,但它仍在查看 id
变量而不是 card_title
变量。
我想这对你有帮助,
# base urls.py
urlpatterns = [
...
path(<b>'api/',</b> include('cards.api.urls')), <b># remove "cards/" from url</b>
]
和
如下所示创建新视图 class、CardTitleDetail
并添加 lookup_field
属性
<b>class CardTitleDetail(generics.RetrieveUpdateDestroyAPIView):
lookup_field = 'card_title'</b>
permission_classes = ()
queryset = Card.objects.all()
serializer_class = CardSerializer
# cards.api.urls.py
urlpatterns = [
path(<b>'cards/',</b> CardListView.as_view()), <b># add "cards/" to the url</b>
path(<b>'cards/<str:pk>/',</b> CardDetailView.as_view()), <b># add "cards/" to the url</b>
<b>path('cards/title/<str:card_title>/', CardTitleDetail.as_view()), # this is the new url</b>
]
urlpatterns = format_suffix_patterns(urlpatterns)
注意
card_title
属性在数据库中应该是 unique
,否则会引发异常!
您可以在 cards.api.urls.py 文件中添加另一个 url,重定向到相同的 api 以获得相同的响应。
将此添加到您的 urls.py 文件 urlpatterns。
path('title/<str:pk>/', CardDetailView.as_view()),
Django 2.1,python3.6,djangorestframework。
当我转到以下 url 时,我可以看到我的数据(太棒了!)http://127.0.0.1:8000/api/cards/1
这是我在 api 页面上看到的 -
HTTP 200 OK
Allow: GET, PUT, PATCH, DELETE, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept
[
{
"id": "1",
"card_title": "Hello"
},
]
我希望能够转到此 url 以获取相同的数据 - http://127.0.0.1:8000/api/cards/title/Hello
我如何更新我的观点和 url 才能做到这一点?
基地url
urlpatterns = [
...
path('api/cards/', include('cards.api.urls')),
]
cards.api.urls.py
urlpatterns = [
path('', CardListView.as_view()),
path('<str:pk>/', CardDetailView.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
cards.api.views.py
class CardList(generics.ListCreateAPIView):
permission_classes = ()
queryset = Card.objects.all()
serializer_class = CardSerializer
class CardDetail(generics.RetrieveUpdateDestroyAPIView):
#permisssion_classes = (UserPermission,) # set the permission class
permission_classes = ()
queryset = Card.objects.all()
serializer_class = CardSerializer
我尝试将其添加到 cards.api.urls.py path('api/cards/title/<str:pk>/', CardDetail.as_view()),
中,但它仍在查看 id
变量而不是 card_title
变量。
我想这对你有帮助,
# base urls.py
urlpatterns = [
...
path(<b>'api/',</b> include('cards.api.urls')), <b># remove "cards/" from url</b>
]
和
如下所示创建新视图 class、CardTitleDetail
并添加 lookup_field
属性
<b>class CardTitleDetail(generics.RetrieveUpdateDestroyAPIView):
lookup_field = 'card_title'</b>
permission_classes = ()
queryset = Card.objects.all()
serializer_class = CardSerializer
# cards.api.urls.py
urlpatterns = [
path(<b>'cards/',</b> CardListView.as_view()), <b># add "cards/" to the url</b>
path(<b>'cards/<str:pk>/',</b> CardDetailView.as_view()), <b># add "cards/" to the url</b>
<b>path('cards/title/<str:card_title>/', CardTitleDetail.as_view()), # this is the new url</b>
]
urlpatterns = format_suffix_patterns(urlpatterns)
注意
card_title
属性在数据库中应该是 unique
,否则会引发异常!
您可以在 cards.api.urls.py 文件中添加另一个 url,重定向到相同的 api 以获得相同的响应。
将此添加到您的 urls.py 文件 urlpatterns。
path('title/<str:pk>/', CardDetailView.as_view()),