小编Ham*_*adi的帖子

当 PermissionDenied 异常引发时,Django 打印错误

在我们的项目中,我们使用 djangoSessionMiddleware来处理用户会话,并且运行良好。这里唯一的问题是当PermissionDenied异常发生时,错误及其回溯将在控制台中打印出来!然而,正如预期的那样,通过引发该异常,403页面将显示给用户,但我认为这似乎不合理,因为这里的中间件正在处理异常!就像未找到异常一样,我希望控制台中不会出现错误。有什么不对的吗?!

这是中间件设置:

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django_otp.middleware.OTPMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'axes.middleware.AxesMiddleware',
]
Run Code Online (Sandbox Code Playgroud)

这是打印的错误:

Forbidden (Permission denied): /the/not_allowed/page
Traceback (most recent call last):
  File "/venv/lib/python3.8/site-packages/django/core/handlers/exception.py", line 34, in inner
    response = get_response(request)
  File "/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "/venv/lib/python3.8/site-packages/django/core/handlers/base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/python3.8/contextlib.py", line 75, in inner
    return func(*args, **kwds)
  File "/our_project/base/decorators.py", line 88, in wrapper
    return view_func(request, *args, **kwargs)
  File …
Run Code Online (Sandbox Code Playgroud)

python django django-middleware django-sessions

5
推荐指数
1
解决办法
2740
查看次数

Django 管理器查询不能在查询链中工作。AttributeError:“QuerySet”对象没有属性<管理器方法>

问题:我已经为一个模型实现了一个自定义管理器,只有一个命名的自定义查询集get_by_tag,如果我这样使用它,它就可以正常工作:

ViewStatistic.objects.get_by_tag('some-tag-name').filter(user=user_id)
Run Code Online (Sandbox Code Playgroud)

但是当我改变查询的顺序时,以这种方式:

ViewStatistic.objects.filter(user=user_id).get_by_tag('some-tag-name')
Run Code Online (Sandbox Code Playgroud)

它不起作用!并引发此错误:

AttributeError: 'QuerySet' object has no attribute 'get_by_tag'
Run Code Online (Sandbox Code Playgroud)

我是不是错过了什么?!我怎样才能按照这样的顺序做到这一点?

PS:自定义管理器是这样的:

AttributeError: 'QuerySet' object has no attribute 'get_by_tag'
Run Code Online (Sandbox Code Playgroud)

python django django-models django-orm django-managers

4
推荐指数
1
解决办法
1842
查看次数

Django Rest Framework:在 modelviewset 创建中创建不需要的字段

我有一个模型,有一个用于显示其创建时间的字段,名为created_time. 我不想created_time在创建模型时被要求,但我希望它位于从模型检索的数据中!

这是它的序列化器:

class MyModelSerializer(ModelSerializer):
    class Meta:
        model = Model
        fields = ['name', 'created_time']
Run Code Online (Sandbox Code Playgroud)

这是它的视图集:

class ModelApiView(ModelViewSet):
    serializer_class = MyModelSerializer

    def get_queryset(self):
        return Model.objects.filter(user=self.request.user.id)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user, created_time=datetime.now())
Run Code Online (Sandbox Code Playgroud)

现在,根据get请求,它发送一个模型对象列表,其中namecreated_time是完美的。但是,当我发布要创建的新模型(仅包含其)时name,它会向我发送以下错误消息:

{
    "datetime": [
        "This field is required."
    ]
}
Run Code Online (Sandbox Code Playgroud)

python django datetime django-serializer django-rest-framework

3
推荐指数
1
解决办法
1271
查看次数

当我尝试作为客户端请求时,DRF 以 403 错误响应我 [客户端凭据授权]

settings.py文件中我写了这个设置:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
    ),
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
}
Run Code Online (Sandbox Code Playgroud)

当我使用password grant应用程序中的令牌调用任何 API 时,它工作正常,但是当我尝试使用client credential grant应用程序中的令牌调用相同的 API 时,它不起作用并且它响应 403 错误:

{ "detail": "You do not have permission to perform this action." }. 
Run Code Online (Sandbox Code Playgroud)

是因为默认权限吗?我不知道我必须使用什么权限来代替!?

python django oauth-2.0 django-rest-framework

2
推荐指数
1
解决办法
427
查看次数