跳至主要内容

Cannot cast AnonymousUser to int. Are you trying to use it in place of User

Cannot cast AnonymousUser to int. Are you trying to use it in place of User

代码

class BookViewSet(viewsets.ReadOnlyModelViewSet):
    permission_classes = (permissions.AllowAny,)
    queryset = Book.objects.all()
    serializer_class = BookSerializer

    def get_queryset(self):
        print(self.request.user)
        return UserPackage.objects.filter(user_id=self.request.user)

日志

...
  File "E:\Projects\PycharmProjects\PMSMback\ShareBook\api\api.py", line 26, in get_queryset
    return UserPackage.objects.filter(user_id=self.request.user)
...
  File "E:\Projects\PycharmProjects\PMSMback\venv\lib\site-packages\django\contrib\auth\models.py", line 388, in __int__
    raise TypeError('Cannot cast AnonymousUser to int. Are you trying to use it in place of User?')
TypeError: Cannot cast AnonymousUser to int. Are you trying to use it in place of User?

resolve
删除这个语句,或者修改过滤条件 user_id=self.request.user

    def get_queryset(self):
        print(self.request.user)
        return UserPackage.objects.filter(user_id=self.request.user)

原因

当你允许匿名用户访问的时候,self.request.user 的值是 AnonymousUser 对象。

匿名用户(AnonymousUser对象实例)是没有ID的

它是一个 <class ‘django.contrib.auth.models.AnonymousUser’>

UserPackage.objects.filter(user_id=self.request.user)

user_id 要求的是 User 实例 。

然而却传入了 AnonymousUser 的实例,类型不匹配抛出了一个无法把 AnonymousUser 转换 User 异常。

User & AnonymousUser 源代码

class User(AbstractUser):
    """
    Users within the Django authentication system are represented by this
    model.

    Username and password are required. Other fields are optional.
    """
    class Meta(AbstractUser.Meta):
        swappable = 'AUTH_USER_MODEL'


class AnonymousUser:
    id = None
    pk = None
    username = ''
    is_staff = False
    is_active = False
    is_superuser = False
    _groups = EmptyManager(Group)
    _user_permissions = EmptyManager(Permission)
    ...
    def __int__(self):
        raise TypeError('Cannot cast AnonymousUser to int. Are you trying to use it in place of User?')
    ...


此博客中的热门博文

Lambda can be replaced with method reference

Lambda can be replaced with method referenceAndroid开发的时候提示 Lambda can be replaced with method reference只需要按下 Alt + Enter 即可效果如下参考资料How to change Runnable to lambda expression in Java with IntelliJ shortcut

ffmpeg 音频淡出淡出并调整音量

ffmpeg 音频淡出淡出并调整音量1 淡出淡入ffmpeg -i 青花瓷.aac -filter_complex "[0:a]afade=t=in:ss=0:d=5[a1]; [a1]afade=t=out:st=60:d=5[a2]; [a2]volume=0.1" t.mp3 青花瓷.aac 是第0个输入文件
[0:a] 代表是处理第0个输入文件的(Audio)音频文件[0:a]afade=t=in:ss=0:d=5[a1] 处理 [0:a] 资源从第 0 秒开始淡入,持续5秒 ,并标记这个过滤器名为 [a1]
过滤器名字可以随便取,但要符合命名规范,请自行查询 ffmpeg 过滤器命令规范。[a1]afade=t=out:st=60:d=5[a2] 处理 [a1] 的资源,从第60秒开始淡出,持续5秒。注意:淡出结束后,后面的音频将全部静音[a2]volume=0.1 2 处理音频处理 [a2] 资源的音量,为原来的 0.1 倍音量。t.mp3 为输出的音频

ffmpeg-filter 使用指南

ffmpeg-filter 使用指南说明只是一份备份。查看原文作者:hguoFilter 思想filter 架构思想中第一个概念是 Graph,一般翻译为画布,如果 Graph 看做是桌子的话,那 filters 们就是桌子上的“悲剧”。所以先要有 Graph,然后再将 filter 摆在上面, filter是身上有 pin 接口, pin 的作用是统一数据接口,然后还需要一个 link 的动作, link 的作用是将指定的 2 个 filter 通过其 pin 接口连接起来,这样就形成了一个完整的 filter graph或是叫 filter link list。List item如果只有 filter graph 的存在,它只是一堆参数数据和代码,并不能运行,需要一个动力泵或是动力引擎将整个过程驱动起来,这就像人还缺一颗心脏一样,那人的血液就是filter graph 的数据流。这样 FFmpeg 就把驱动的能力交给了 filter 框架外面来做,通过向 filter graph 的首个 filter 推数据和从 filter graph 的末尾 filter 拉数据从而驱动整个 filter graph 的数据流动。命令行使用命令ffmpeg -i file_copy.ts -i logo.png -filter_complex " [1:v]scale=100:100[logo]; [0:v][logo]overlay=x=main_w-100:y=main_h-100" output.mp4 参数简记-filter_complex:滤镜必选参数,后面跟滤镜命令[1:v] :输入pin,表示视频的第1路scale=100:100 :对[1:v]输入pin的处理,缩放成100:100[logo] :输出pin; 每个滤镜分割0:v :两个输入,第一个视频,上一个滤镜的输出overlay=x=main_w-100:y=main_h-100 :滤镜动作