我正在为超级用户创建一种方式来控制另一个用户的帐户,但允许日志记录显示此时执行的所有操作都是由超级用户完成的。
我目前的想法是在中间件中处理请求并查找特定的标头。如果该标头存在,我将用标头中指定的用户替换当前的 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) 我已经从 升级了 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) 我有一个用于使用 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 文件中有可用的变量,但不确定如何在值文件中设置它。
谢谢
尝试从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)
为什么呢?