第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

Django rest framework 的實(shí)踐筆記(二)

標(biāo)簽:
Python
base_name

使用viewsets.ModelViewSet时可以没有base_name,但是使用viewsets.ViewSet就必须要base_name

router = routers.DefaultRouter()
router.register(r'users', UserViewSet,base_name='user')
两个报错

法一

class UserViewSet(viewsets.ModelViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer

图片描述
法二

class UserViewSet(viewsets.ViewSet):
    def list(self,request):
        queryset = User.objects.all()
        serializers = UserSerializer(queryset,many=True)
        return Response(serializers.data)

AssertionError: Cannot apply DjangoModelPermissions on a view that does not set .queryset or have a .get_queryset() method.
法三

class UserViewSet(viewsets.ViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    # def list(self, request):
    #     queryset = User.objects.all()
    #     serializer = UserSerializer(queryset, many=True)
    #     return Response(serializer.data)

图片描述
法四

# ViewSets define the view behavior.
class UserViewSet(viewsets.ViewSet):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    def list(self, request):
        queryset = User.objects.all()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)
AssertionError: `HyperlinkedIdentityField` requires the request in the serializer context. Add `context={'request': request}` when inst
antiating the serializer.

法五

class UserViewSet(viewsets.ViewSet):
    queryset = User.objects.all()
    serializer = UserSerializer(queryset, many=True)
    def list(self, request):
        return Response(self.serializer.data)
AssertionError: `HyperlinkedIdentityField` requires the request in the serializer context. Add `context={'request': request}` when inst
antiating the serializer.

法六

class UserViewSet(viewsets.ViewSet):
    def list(self, request):
        queryset = User.objects.all()
        serializer = UserSerializer(queryset, many=True)
        return Response(serializer.data)
AssertionError: Cannot apply DjangoModelPermissions on a view that does not set `.queryset` or have a `.get_queryset()` method.

图片描述
解决:DjangoModelPermissions
去除以下配置

REST_FRAMEWORK = {
    # Use Django's standard `django.contrib.auth` permissions,
    # or allow read-only access for unauthenticated users.
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.DjangoModelPermissionsOrAnonReadOnly'
    ]
}

默认permission阻止了没有get_queryset()或queryset属性的viewset被访问
报错变为HyperlinkedIdentityField
根据stackoverflow的回答修改
法七

    def list(self, request):
        # queryset = User.objects.all()
        # serializer = UserSerializer(queryset, many=True)
        serializer = UserSerializer(User, context={'request':request})
        return Response(serializer.data)

或则

    def list(self, request):
        queryset = User.objects.all()
        # serializer = UserSerializer(queryset, many=True)
        serializer = UserSerializer(queryset, context={'request':request}, many=True)
        return Response(serializer.data)```
Could not resolve URL for hyperlinked relationship using view name "user-detail". You may
have failed to include the related model in your API, or incorrectly configured the `lookup_field` attribute on this field.

图片描述
stackoverflow上解决办法
因为它是HyperlinkedModelSerializer,没有定义好相关的view就没有办法通过HyperlinkedModelSerializer获得资源,所以报错了。你应该指明UserSerializer而不是修改URL。
然而我继承的就是系统自带的User

from django.contrib.auth.models import User
點(diǎn)擊查看更多內(nèi)容
5人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消