我看到很多在GitHub上这个仓库的提交信息:Add files via upload
。
但我无法弄清楚这个(可能)自动提交消息是如何制作的。我环顾四周寻找线索,但找不到任何将此提交消息设置为默认值或其他内容的参考。
为什么以及如何使用此消息完成某些提交?
我有一个Post
类的序列化器,它有一个image
和一个link
属性.
media
是FileField
和link
是一个URLField
是一个网址到别的地方我分享我的帖子(在另一个网站.)
我想要:
提交我的帖子数据(文字和图片)
访问提交文件的URL以用于在其他位置共享它.
link
找到后更新值.
这是我试过的:
post = PostCreateSerializer(data=request.data, context={'request': request})
post.is_valid(raise_excpetions=True)
post.save()
media_url = post.data.get('media')
link = find_link_value(media_url)
post.link = link
post.save()
Run Code Online (Sandbox Code Playgroud)
这引起了例外.说:
You cannot call `.save()` after accessing `serializer.data`.If you need to access data before committing to the database then inspect 'serializer.validated_data' instead.
Run Code Online (Sandbox Code Playgroud)
问题是当我使用post.validated_data.get('media')
而不是.data
,它不会给我的网址.它给了我一个InMemoryUploadedFile
对象,当然,没有任何路径和网址.
我以为我可以使用object的name
属性InMemoryUploadedFile
来创建url(文件实际上保存在磁盘中,我想知道为什么会这样InMemory
!)但是当名称重复时,磁盘和url中文件的真实名称与它的原始名称不同(例如,name.jpg
和name_aQySbJu.jpg
)我不能将它用于我的目的.
如何才能访问该上传文件的URL,并 …
django django-models django-serializer django-rest-framework
我想输入一个 URL 并提取域名,该域名是 http:// 或 https:// 之后的字符串,包含字符串、数字、点、下划线或破折号。
我编写了正则表达式并使用了 python 的re
模块,如下所示:
import re
m = re.search('https?://([A-Za-z_0-9.-]+).*', 'https://google.co.uk?link=something')
m.group(1)
print(m)
Run Code Online (Sandbox Code Playgroud)
我的理解是,m.group(1)
会提取re.search中()之间的部分。
我期望的输出是:google.co.uk
但我得到的是:
<_sre.SRE_Match object; span=(0, 35), match='https://google.co.uk?link=something'>
Run Code Online (Sandbox Code Playgroud)
你能指出我如何使用re
来实现我的要求吗?
我使用的是自托管 Kubernetes 集群,并且没有使用 GitLab 的 Kubernetes 集成。SIGHUP
在我的 GitLab CI 工作中,我正在更改关联 ConfigMap 中 Prometheus 部署的配置,并且我希望通过向 Prometheus 进程发送信号来让 Prometheus 了解新配置。这是我更新 ConfigMap 并发送信号的作业脚本:
for x in *; do kubectl get configmap prometheus-config -o json | jq --arg name "$(echo $x)" --arg value "$(cat $x)" '.data[$name]=$value' | kubectl apply -f -; done;
kubectl exec deployments/prometheus -- /bin/sh -c "/bin/pkill -HUP prometheus"
Run Code Online (Sandbox Code Playgroud)
这种方法在我的本地终端上运行良好。在手动更改 ConfigMap 并通过上述命令发送信号后,我可以在 Prometheus 中看到之后的效果。
问题是,当我将这些命令放入我的 GitLab CI 作业脚本中时,它似乎什么也没做。该命令成功运行,我的 CI 工作已完成,但 Prometheus 中没有刷新任何内容。
我想知道 GitLab 执行其作业的方式(shell 的非交互性等)是否会导致这种行为,但我不知道我能对此做些什么。
我还尝试kubectl exec
在 …