小编Kat*_*ops的帖子

有没有办法在django中间件中编辑请求用户?

我正在为超级用户创建一种方式来控制另一个用户的帐户,但允许日志记录显示此时执行的所有操作都是由超级用户完成的。

我目前的想法是在中间件中处理请求并查找特定的标头。如果该标头存在,我将用标头中指定的用户替换当前的 request.user 。目前中间件如下所示:

class ControlledUserMiddleware(MiddlewareMixin):

def process_request(self, request):
    controlled_user = request.META.get('HTTP_CONTROLLED_USER', None)
    if controlled_user:
        request.user = User.objects.get(uuid=controlled_user)
Run Code Online (Sandbox Code Playgroud)

我发现 - 尽管我已将其放在设置文件中的身份验证中间件之后 - 请求中的用户在到达此函数时始终是“匿名用户”。

此方法当前不起作用,我想知道是否可以在 request.user 到达视图逻辑之前对其进行编辑。

根据评论中的要求进行编辑,以下是REST_FRAMEWORK设置:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated'
    ],
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.JSONParser',
        'rest_framework.parsers.MultiPartParser',
        'rest_framework.parsers.FormParser',
    ]
}
Run Code Online (Sandbox Code Playgroud)

django django-middleware python-3.x django-rest-framework

7
推荐指数
1
解决办法
3380
查看次数

升级boto3后Moto似乎停止嘲笑

我已经从 升级了 boto3 boto3==1.7.48 to 1.13.11,这破坏了我使用 Moto 的所有测试。看起来(令人担忧)模拟已经完全停止工作并正在尝试实际访问 s3,这是以前工作的示例测试函数:

def upload_video(self, video):
    s3 = boto3.client("s3")
    s3.create_bucket(Bucket=settings.AWS_STORAGE_BUCKET_NAME)
    for media_key in video.upload_media_keys:
        s3.upload_file(
            os.path.join(
                os.path.dirname(os.path.realpath(__file__)), "assets/test.mp4"
            ),
            settings.AWS_STORAGE_BUCKET_NAME,
            media_key,
        )
Run Code Online (Sandbox Code Playgroud)

但它现在给出了这个错误

  File "{path}", line 52, in upload_video
    s3.create_bucket(Bucket=settings.AWS_STORAGE_BUCKET_NAME)
  File "{path}/lib/python3.7/site-packages/botocore/client.py", line 316, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "{path}/lib/python3.7/site-packages/botocore/client.py", line 635, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (IllegalLocationConstraintException) when calling the CreateBucket operation: The unspecified location constraint is incompatible for the region specific endpoint this request was sent …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services python-3.x boto3 moto

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

如何将变量传递给 heml.tf 中的 yaml 文件?

我有一个用于使用 helm 创建 terraform 资源的文件helm.tf

在这个文件中,我创建了一个蜂窝代理,需要传入一些观察者,所以我使用了一个 yaml 文件进行配置。这是 helm.tf 的片段:

resource "helm_release" "honeycomb" {
  version = "0.11.0"
  depends_on = [module.eks]
  repository = "https://honeycombio.github.io/helm-charts"
  chart = "honeycomb"
  name = "honeycomb"

  values = [
    file("modules/kubernetes/helm/honeycomb.yml")
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是yaml文件

agent:
  watchers:
    - labelSelector: "app=my-app"
      namespace: my-namespace
      dataset: {{$env}}
      parser:
        name: nginx
        dataset: {{$env}}
        options:
          log_format: "blah"
Run Code Online (Sandbox Code Playgroud)

不幸的是,我尝试设置变量的尝试{{$x}}没有奏效,那么我将如何将env变量发送到 yaml 值文件?我在 tf 文件中有可用的变量,但不确定如何在值文件中设置它。

谢谢

android-3.0-honeycomb terraform kubernetes-helm amazon-eks

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

使用列表推导或django的“ values_list”函数,哪种方法更有效?

尝试从django对象返回值列表时,使用列表理解将使性能更好:

[x.value for x in Model.objects.all()]
Run Code Online (Sandbox Code Playgroud)

或在Django的values_list函数上调用list():

list(Model.objects.values_list('value', flat=True))
Run Code Online (Sandbox Code Playgroud)

为什么呢?

django performance python-3.x

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