我在这个问题上发现了两篇略有冲突的博文,在这里我总结一下:
更令人困惑的是,这个 Reddit线程表明mozjpeg使用jpegcrush中使用的相同算法,并且jpegcrush是jpegtran的包装器...所以我们已经完全循环了?我只能假设那些Reddit评论是错误的,任何人都可以确认吗?
文档说要重用ClientSession:
不要为每个请求创建会话.很可能每个应用程序都需要一个会话来完成所有请求.
会话内部包含连接池,连接重用和保持活动(两者都默认打开)可以加快总体性能.1
但是在文档中似乎没有任何解释如何做到这一点?有一个例子可能是相关的,但它没有说明如何在其他地方重用池:http://aiohttp.readthedocs.io/en/stable/client.html#keep-alive-connection-pooling-and-cookie-分享
这样的事情是正确的做法吗?
@app.listener('before_server_start')
async def before_server_start(app, loop):
app.pg_pool = await asyncpg.create_pool(**DB_CONFIG, loop=loop, max_size=100)
app.http_session_pool = aiohttp.ClientSession()
@app.listener('after_server_stop')
async def after_server_stop(app, loop):
app.http_session_pool.close()
app.pg_pool.close()
@app.post("/api/register")
async def register(request):
# json validation
async with app.pg_pool.acquire() as pg:
await pg.execute() # create unactivated user in db
async with app.http_session_pool as session:
# TODO send activation email using SES API
async with session.post('http://httpbin.org/post', data=b'data') as resp:
print(resp.status)
print(await resp.text())
return HTTPResponse(status=204)
Run Code Online (Sandbox Code Playgroud) 到目前为止,我一直将我的图像文件名存储在CharField中,并将实际文件直接保存到S3.这对我自己的用法来说是个很好的解决方案.我想重新考虑使用ImageField,因为现在将有其他用户和文件输入验证是合适的.
在阅读了文档和FileField 的源代码(看起来基本上是ImageField减去Pillow检查和维度字段更新功能)之后,我有几个问题没有得到完全解答.
1)为什么要使用ImageField?或者更确切地说,为什么要使用FileField?当然,它便于快速简便的表单,方便插入Django模板.但是有没有实质性的原因,例如.它是否明显受到攻击和恶意上传的保护?
2)如何写入字段文件?如果文件可以被读取instance.imagefield(或者是instance.imagefield.file?)是正确的,如果我想写它,我可以简单地执行以下操作吗?
@receiver(pre_save, sender=Image)
def pre_save_image(sender, instance, *args, **kwargs):
instance.imagefield = process_image(instance.imagefield)
Run Code Online (Sandbox Code Playgroud)
3)如何尝试使用特定文件名保存,如果随机生成的文件名已经存在,请使用新文件名再次尝试?例如我现在用我的代码执行此操作,如何使用ImageField完成?我想在模型层执行此操作,因为如果我在视图层重复尝试,则pre_save处理将再次运行,这是贫民窟(即使它不太可能在服务的生命周期中进行第二次尝试) .
for i in range(tries):
try:
name = generate_random_name()
media_storage.save(name + '.jpg', ContentFile(final_bytes))
break
except:
pass
Run Code Online (Sandbox Code Playgroud)
4)在models.py pre_save和signal 以及post_save实际模型中save(),如何判断文件是否随请求一起传入?即我想知道是否要保存新图像,或者是否没有图像(对象中的某些其他字段正在更新且图像本身保持不变).
默认情况下,图像在左侧对齐.使用设置centerMode: true,图像从左侧对齐几个像素,下一个图像的边缘从右侧窥视,如图所示:
这些是使用的设置:
for (var i in data.image_set) {
sc.append('<div><img src="' + data.image_set[i].image + '" height="' + data.image_set[i].height + '" width="' + data.image_set[i].width + '"></div>');
}
sc.slick({
dots: true,
speed: 150,
centerMode: true
});
Run Code Online (Sandbox Code Playgroud)
我想让滑块在中心只显示一个图像,并且可选地分别在左侧和右侧部分可见前一图像和下一图像.如何实现这一目标?
$(document).ready(function() {
$('.sc').slick({
dots: true,
speed: 150,
centerMode: true
});
});Run Code Online (Sandbox Code Playgroud)
.sc img {
height: calc(50vh - 100px);
width: auto;
}Run Code Online (Sandbox Code Playgroud)
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.5.9/slick.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.5.9/slick-theme.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.0.0-alpha1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.5.9/slick.min.js"></script>
<div class="sc">
<div>
<img src="https://lespider-ca.s3.amazonaws.com:443/I152rUr6ZBih.png?Signature=YFF9BB8dlAe7okzBHnRLWgYmFI8%3D&Expires=1452236979&AWSAccessKeyId=AKIAIS4C7GGEGJPLLSMA" height="900" width="674">
</div>
<div>
<img src="https://lespider-ca.s3.amazonaws.com:443/HvAQty35hkNv.png?Signature=8HQKRBefUe%2B4f3sKX1vag78dCbQ%3D&Expires=1452236979&AWSAccessKeyId=AKIAIS4C7GGEGJPLLSMA" height="673" …Run Code Online (Sandbox Code Playgroud)我一直在阅读和尝试Django的各种缩略图应用程序.这些是要求:
所有生成的缩略图必须保存在与原始图像分开的S3存储桶中,即单独的存储类
删除图像实例时,还必须删除原始图像文件以及所有生成的缩略图
最大限度地减少昂贵的低效率,例如 获取缩略图的URL以在DRF中序列化不应该在S3存储桶中查看它是否每次都存在,等等.
VersatileImageField未能满足第一个要求.ImageKit未能满足第二个要求.第三个要求是我最困惑的地方; 我试图告诉自己最佳实践,但信息是分散的,我没有信心根据我迄今学到的知识做出决定.
根据我的阅读,我的印象是最有效的行为如下:
我最感兴趣的学习那么简单,缩略图和SORL-缩略图取(如果它们与过程对准我非常简要地高于或如果他们有一些更有效的概述)在方法上的差异,人和的优势/劣势在他们的每个方法中.
这看起来应该是非常简单的事情,但我不确定如此安全而不是抱歉.
我创建了一个证书mywebsite.com和www.mywebsite.com使用https://gethttpsforfree.com/
我现在要添加static.mywebsite.com,media.mywebsite.com,cache.mywebsite.com,和这些点到AWS S3桶.
我对这个过程有几个问题:
是否只是使用我上次生成的相同帐户和域私钥,并创建新的证书签名请求?
如果是这样,CSR应该拥有我想要的所有域/子域,还是只有新域?
由于这些指向S3存储桶,我是否必须暂时将它们引导到网络服务器进行验证,或者有没有办法在S3上验证?
假设没有其他问题,我是否应该用新的版本替换我的Load Balancer上的现有公共证书,现有的域名将继续有效?
如果需要续订,是否所有域名/子域名从今天起90天,或者仅今天签署的新子域名为90天?
visible = models.BooleanField()
owner = models.ForeignKey(User, null=True)
def update_address(**kwargs):
address = Address.objects.get(address=kwargs.get('address'))
try:
address.visible = kwargs.get('visible')
except:
pass
try:
address.owner = kwargs.get('owner')
except:
pass
Run Code Online (Sandbox Code Playgroud)
update_address()应该导致没有发生任何事情address.visible或address.owner.
update_address(owner=None) 应删除已设置的任何现有所有者对象.
令我困惑的是如何判断是否owner=None已明确设置,因此我知道删除现有的所有者对象,或者如果调用它而没有owner设置为任何东西,那么我应该保留所有者的原样.
apt-get的virtualenv与pip的virtualenv有什么区别?它们可以互换吗?
apt-get install virtualenv
The following extra packages will be installed:
python-chardet-whl python-colorama-whl python-distlib-whl python-html5lib-whl python-pip-whl python-requests-whl
python-setuptools-whl python-six-whl python-urllib3-whl python3-virtualenv
The following NEW packages will be installed:
python-chardet-whl python-colorama-whl python-distlib-whl python-html5lib-whl python-pip-whl python-requests-whl
python-setuptools-whl python-six-whl python-urllib3-whl python3-virtualenv virtualenv
Run Code Online (Sandbox Code Playgroud) 我试图添加一个键serializer.data['test'] = 'asdf',这似乎没有做任何事情.
我想转换键值的表示.为此,我尝试使用该值来计算新值并替换字典中的旧值.
这是我想要完成的,但我不知道为什么价值没有被替换.没有抛出错误,结果字典没有证据表明我试图替换任何东西:
class PlaceDetail(APIView):
def get(self, request, pk, format=None):
place = Place.objects.select_related().get(pk=pk)
serializer = PlaceSerializer(place)
#serializer.data['tags'] = pivot_tags(serializer.data['tags'])
serializer.data['test'] = 'asdf'
print(serializer.data['test'])
return Response(serializer.data)
Run Code Online (Sandbox Code Playgroud)
终奌站: KeyError: 'test'
我通过打印观察到这serializer.data是一本字典.
我还测试了我尝试使用的语法应该工作:
>>> test = {'a': 'Alpha'}
>>> test
{'a': 'Alpha'}
>>> test['a']
'Alpha'
>>> test['a'] = 'asdf'
>>> test
{'a': 'asdf'}
Run Code Online (Sandbox Code Playgroud)
如何正确修改serializer.data字典?
可以拖动中心分隔线来调整左右 div 的大小。似乎拖动分隔线会将 CSSwidth值更改为百分比,但我不知道是什么导致该值发生变化。
我想创建与此类似的东西,其中可以拖动分隔线来调整左右 div 的大小,并且这些 div 中的任何内容都将被拟合。如何才能做到这一点?
要避免的潜在兼容性问题:最终,我还想让它在移动屏幕上响应,使用@media在左侧可见时隐藏右侧 div,并在右侧可见时隐藏左侧 div。
django ×3
python ×3
css ×2
aiohttp ×1
apt-get ×1
carousel ×1
dictionary ×1
html ×1
javascript ×1
jpeg ×1
jpegoptim ×1
jpegtran ×1
lets-encrypt ×1
mozjpeg ×1
pip ×1
sanic ×1
slick.js ×1
virtualenv ×1