Django-使参数可选
在我的URL文件中,我指定了视图的路径-Django-使参数可选,django,django-rest-framework,Django,Django Rest Framework,在我的URL文件中,我指定了视图的路径- urlpatterns = [ path('users/userdetails', PersonalUserDetailView.as_view(), name='hello'), path('stores/<int:store_id>', StoreDetailView.as_view(), name='hello2'), ] urlpatterns=[ 路径('users/userdetails',PersonalUse
urlpatterns = [
path('users/userdetails', PersonalUserDetailView.as_view(), name='hello'),
path('stores/<int:store_id>', StoreDetailView.as_view(), name='hello2'),
]
urlpatterns=[
路径('users/userdetails',PersonalUserDetailView.as_view(),name='hello'),
路径('stores/',StoreDetailView.as_view(),name='hello2'),
]
但是,我想让
存储id
成为可选的。如何操作?在视图方法中设置默认参数
class StoreDetailView(...):
def get(self, request, store_id=None):
...
def post(self, request, store_id=None):
...
class StoreDetailView(…):
def get(self、request、store_id=None):
...
def post(自我、请求、存储标识=无):
…
另外,您需要稍微更新URL模式
urlpatterns = [
path('users/userdetails', PersonalUserDetailView.as_view(), name='hello'),
path('stores/<int:store_id>', StoreDetailView.as_view(), name='hello2'),
path('stores/', StoreDetailView.as_view(), name='hello-default'),
]
urlpatterns=[
路径('users/userdetails',PersonalUserDetailView.as_view(),name='hello'),
路径('stores/<int:store\u id>',StoreDetailView.as\u view(),name='hello2'),
路径('stores/',StoreDetailView.as_view(),name='hello-default'),
]
在视图方法中设置默认参数
class StoreDetailView(...):
def get(self, request, store_id=None):
...
def post(self, request, store_id=None):
...
class StoreDetailView(…):
def get(self、request、store_id=None):
...
def post(自我、请求、存储标识=无):
…
另外,您需要稍微更新URL模式
urlpatterns = [
path('users/userdetails', PersonalUserDetailView.as_view(), name='hello'),
path('stores/<int:store_id>', StoreDetailView.as_view(), name='hello2'),
path('stores/', StoreDetailView.as_view(), name='hello-default'),
]
urlpatterns=[
路径('users/userdetails',PersonalUserDetailView.as_view(),name='hello'),
路径('stores/<int:store\u id>',StoreDetailView.as\u view(),name='hello2'),
路径('stores/',StoreDetailView.as_view(),name='hello-default'),
]
您可以使用正则表达式非捕获括号,类似的问题
从django.url导入重新路径
URL模式=[
...
re_path(r'stores/(?:(?P\d+)/)?$”,StoreDetailView.as_view(),name=“hello2”),#非捕获
]
您可以使用正则表达式非捕获括号,类似的问题
从django.url导入重新路径
URL模式=[
...
re_path(r'stores/(?:(?P\d+)/)?$”,StoreDetailView.as_view(),name=“hello2”),#非捕获
]
URL
path('stores/',storeapieview.as_view(),name='hello2')
您还可以使用更好的视图集:
from django.shortcuts import get_object_or_404
from myapps.serializers import StoreSerializer
from rest_framework import viewsets
from rest_framework.response import Response
class StoreViewSet(viewsets.ViewSet):
def list(self, request):
queryset = Store.objects.all()
serializer = StoreSerializer(queryset, many=True)
return Response(serializer.data)
def retrieve(self, request, pk=None):
queryset = Store.objects.all()
store = get_object_or_404(queryset, pk=pk)
serializer = StoreSerializer(store)
return Response(serializer.data)
url.py
from myapp.views import StoreViewSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'stores', UserViewSet, basename='store')
urlpatterns = router.urls
URL
path('stores/',storeapieview.as_view(),name='hello2')
您还可以使用更好的视图集:
from django.shortcuts import get_object_or_404
from myapps.serializers import StoreSerializer
from rest_framework import viewsets
from rest_framework.response import Response
class StoreViewSet(viewsets.ViewSet):
def list(self, request):
queryset = Store.objects.all()
serializer = StoreSerializer(queryset, many=True)
return Response(serializer.data)
def retrieve(self, request, pk=None):
queryset = Store.objects.all()
store = get_object_or_404(queryset, pk=pk)
serializer = StoreSerializer(store)
return Response(serializer.data)
url.py
from myapp.views import StoreViewSet
from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register(r'stores', UserViewSet, basename='store')
urlpatterns = router.urls