我有一个RESTful API,我使用EC2实例上的Elasticsearch实现来公开内容语料库.我可以通过从终端(MacOSX)运行以下命令来查询搜索:
curl -XGET 'http://ES_search_demo.com/document/record/_search?pretty=true' -d '{
"query": {
"bool": {
"must": [
{
"text": {
"record.document": "SOME_JOURNAL"
}
},
{
"text": {
"record.articleTitle": "farmers"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}'
Run Code Online (Sandbox Code Playgroud)
我如何使用python/requests或python/urllib2(不确定要使用哪一个 - 使用urllib2,但听到请求更好......)将上面变成API请求?我是否以标题或其他方式传递?
TLDR:我们必须通过为来自Lambda函数的响应创建新的缓存行为来欺骗CloudFront 307重定向缓存.
你不会相信我们有多接近实现这一目标.我们在最后一步中陷入了沉重的困境.
商业案例:
我们的应用程序将图像存储在S3中,并使用CloudFront为其提供服务,以避免全球任何地理上的减速.现在,我们希望对设计非常灵活,并能够直接在CouldFront URL中请求新的图像尺寸!每个新的图像大小将按需创建,然后存储在S3中,因此第二次请求时,它将非常快速地提供,因为它将存在于S3中,并且还将缓存在CloudFront中.
让我们说用户上传了图像chucknorris.jpg.只有原始图像将存储在S3中,并且将在我们的页面上提供,如下所示:
//xxxxx.cloudfront.net/chucknorris.jpg
我们计算出我们现在需要显示200x200像素的缩略图.因此我们将图像src放在我们的模板中:
//xxxxx.cloudfront.net/chucknorris-200x200.jpg
当请求这个新的大小时,亚马逊网络服务必须在同一个存储桶中使用所请求的密钥即时提供.这样,图像将直接加载到CloudFront的同一URL中.
我在架构概述和工作流程中制作了一幅丑陋的图纸,介绍了我们如何在AWS中执行此操作:
以下是Python Lambda的结束方式:
return {
'statusCode': '301',
'headers': {'location': redirect_url},
'body': ''
}
Run Code Online (Sandbox Code Playgroud)
问题:
如果我们将Lambda函数重定向到S3,它就像魅力一样.如果我们重定向到CloudFront,它将进入重定向循环,因为CloudFront缓存307(以及301,302和303).只要我们的Lambda函数重定向到CloudFront,CloudFront就会调用API Getaway URL而不是从S3获取图像:
我想在CloudFront的Behaviors设置选项卡中创建新的缓存行为.此行为不应缓存来自Lambda或S3的响应(不知道内部究竟发生了什么),但仍应将任何后续请求缓存到此相同的已调整大小的图像.我正在尝试设置路径模式-\d+x\d+\..+$,添加Lambda函数的ARN添加"Lambda函数关联"并设置事件类型Origin Response.接下来,我将"默认TTL"设置为0.
但由于一些错误,我无法保存行为:
我们是在正确的方式,还是这个"Lambda功能协会"的想法完全不同?
caching amazon-s3 amazon-web-services amazon-cloudfront aws-lambda
City和home类型是以下文档映射中的两个嵌套对象:
"mappings" : {
"home_index_doc" : {
"properties" : {
"city" : {
"type" : "nested",
"properties" : {
"country" : {
"type" : "nested",
"properties" : {
"name" : {
"type" : "text"
}
}
},
"name" : {
"type" : "keyword"
}
}
},
"home_type" : {
"type" : "nested",
"properties" : {
"name" : {
"type" : "keyword"
}
}
},
...
}
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试进行以下聚合:获取所有当前文档并显示每个城市的所有home_types.
我想它看起来应该类似于:
"aggregations": {
"all_cities": {
"buckets": [
{
"key": "Tokyo",
"doc_count": …Run Code Online (Sandbox Code Playgroud) 这绝对是我有史以来最致命的 5 个问题!我在 Django 中有一个工作正常的 ModelForm。问题是我想在此表单中添加一个额外的字段 - 用于图像上传的小型 Dropzone.js 区域。通过给定的代码示例,dropzone 预览 DIV 已正确嵌入到主窗体中。为了实现这一点,我当然以编程方式初始化了 Dropzone。
如果我发表评论, myDropzone.processQueue();提交按钮会将常规表单提交到视图,但不会使用 Dropzone 上传的图像。但是,如果processQueue()执行,它将覆盖主表单提交操作,并且仅提交图像。其余内容当然被忽略。
我只想在其余输入字段中提交图像,并且我想将 Dropzone 嵌入到我的 Django 表单中,因为如果我将整个表单设为 Dropzone 表单并在其中添加输入字段...整个表单将显示为拖放区域,并且造型也很乱。
为了使其更复杂,我有额外的图像数据库表,但我的视图准备额外处理请求中的图像并将它们处理到数据库。除此之外,我不得不以一种丑陋的方式在 Dropzone 中手动提供 CSRF(使用params: {..}),因为 Dropzone 无法识别表单模板引擎中的 CSRF(因为它显然是一种不同的形式):(
这是模板:
<h1 class="asdf-page-title">
Add Type
</h1>
<form id="gift-form" class="dropzone-form" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ g_form.title }}
<p class="asdf-form-title">Select Type:</p>
<div class="asdf-form-pic-select row collapse-outer-space ">
{% for choice in g_form.asdf_type %}
<div class="col-4">
<label class="type-{{ choice.choice_label }}">
{{ choice.tag }}
<span>{% trans …Run Code Online (Sandbox Code Playgroud) 我们有文件的完整路径:
/dir1/dir2/dir3/sample_file.tgz
Run Code Online (Sandbox Code Playgroud)
基本上,我想以这个字符串结束:
dir3/sample_file.tgz
Run Code Online (Sandbox Code Playgroud)
我们可以用regex或解决它,.split("/")然后将列表中的最后两个项目连接起来......但我想知道我们是否可以用os.path.dirname()或类似的东西做更时尚?
python ×2
aggregation ×1
amazon-s3 ×1
api ×1
aws-lambda ×1
caching ×1
directory ×1
django ×1
dropzone.js ×1
forms ×1
javascript ×1
nested ×1
path ×1
post ×1
rest ×1