Π― Π½Π°Π±Π»ΡΠ΄Π°Π» ΡΠ»Π΅Π΄ΡΡΡΠ΅Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅:
ΠΠ° ΠΌΠΎΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ Π΅ΡΡΡ Π΄Π²Π° Π²ΡΠ·ΠΎΠ²Π° ΡΠ΅Π³Π° ΡΠ°Π±Π»ΠΎΠ½Π° {% thumbnail %}
ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ
Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅Ρ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΠΈΡΡ
ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π² Π΄ΡΡΠ³ΠΎΠΌ ΡΠ°Π·ΠΌΠ΅ΡΠ΅. ΠΡΠ°Π²ΠΈΡΡΡ:
{% thumbnail user.get_profile.avatar_image "46x46" crop="center" as im %} .. {% endthumbnail %}
{% thumbnail user_profile.avatar_image "187x187" crop="center" as im %} .. {% endthumbnail %}
(Π²ΡΠ·ΠΎΠ²Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈΠ· ΡΠ°Π·Π½ΡΡ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Django)
ΠΡΠ»ΠΈ sorl-thumbnail Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π½Π°ΠΉΡΠΈ ΡΡΠΊΠΈΠ·Ρ, ΠΎΠ½ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΡ
, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ. ΠΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΊΠΈΠ·ΠΎΠ² Π½Π΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π΅ΡΡΡ Π² Π·Π°ΠΏΠΈΡΠΈ sorl-thumbnail||thumbnails||xxx
Π² Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»ΡΡΠ°.
ΠΠΎΡΠ»Π΅ ΡΠ΅Π½Π΄Π΅ΡΠΈΠ½Π³Π° ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»ΡΡΠ΅ΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ:
# select * from thumbnail_kvstore;
key | value
--------------------------------------------------------------+--------------------------------------------------------------------------------------------------------------------------------------------
sorl-thumbnail||image||3314722c993608c1dab30949d2504172 | {"storage": "outdoorish.storage.OverwriteStorage", "name": "profiles/avatars/2205.jpg", "size": [300, 423]}
sorl-thumbnail||image||4d545ece8fb09c9176996000cddc0fac | {"storage": "django.core.files.storage.FileSystemStorage", "name": "cache/7c/ab/7cab89bcadad6122d441e6d5443fccc2.jpg", "size": [187, 187]}
sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172 | ["4d545ece8fb09c9176996000cddc0fac"]
sorl-thumbnail||image||256cd182b71debc11e8aae0ed8ee1a9d | {"storage": "django.core.files.storage.FileSystemStorage", "name": "cache/b2/71/b27103adff0bdbba7d05fc98a51be131.jpg", "size": [46, 46]}
(4 rows)
ΠΠΎΡΠ΅ΠΌΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΈΡΡ
ΠΎΠ΄Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ? Π―Π²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΡΡΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½Π½ΡΠΌ? (ΠΠΎΡΠΎΠΌΡ ΡΡΠΎ Ρ Π΄ΡΠΌΠ°Ρ, ΡΡΠΎ ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ Π½Π΅ ΡΠ΄Π°Π»ΡΡΡΡΡ ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ sorl.thumbnail.delete
.)
Π― ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ sorl-thumbnail==11.12.1b
ΠΡΠΎ ΠΆΡΡΠ½Π°Π» ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΠΊΠΈΠ·ΠΎΠ² Django:
ΠΠΎΠ³ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ/ΡΠΎΠ·Π΄Π°Π½ΠΈΡ 1-ΠΉ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ:
2014-10-14 14:58:35,131 DEBUG base Getting thumbnail for file [profiles/avatars/2205.jpg] at [187x187] | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/sorl/thumbnail/base.py:67 (get_thumbnail), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,182 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||image||4d545ece8fb09c9176996000cddc0fac' ; args=(u'sorl-thumbnail||image||4d545ece8fb09c9176996000cddc0fac',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,210 DEBUG base Creating thumbnail file [cache/7c/ab/7cab89bcadad6122d441e6d5443fccc2.jpg] at [187x187] with [{'rounded': None, 'padding_color': '#ffffff', 'format': 'JPEG', 'colorspace': 'RGB', 'cropbox': None, 'padding': False, 'upscale': True, 'crop': u'center', 'image_info': {'jfif_version': (1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (72, 72), 'dpi': (72, 72)}, 'quality': 95}] | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/sorl/thumbnail/base.py:148 (_create_thumbnail), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,248 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||image||3314722c993608c1dab30949d2504172' ; args=(u'sorl-thumbnail||image||3314722c993608c1dab30949d2504172',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,273 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||image||3314722c993608c1dab30949d2504172' ; args=(u'sorl-thumbnail||image||3314722c993608c1dab30949d2504172',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,308 DEBUG util (0.001) INSERT INTO "thumbnail_kvstore" ("key", "value") VALUES ('sorl-thumbnail||image||3314722c993608c1dab30949d2504172', '{"storage": "outdoorish.storage.OverwriteStorage", "name": "profiles/avatars/2205.jpg", "size": [300, 423]}'); args=(u'sorl-thumbnail||image||3314722c993608c1dab30949d2504172', '{"storage": "outdoorish.storage.OverwriteStorage", "name": "profiles/avatars/2205.jpg", "size": [300, 423]}') | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,345 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||image||4d545ece8fb09c9176996000cddc0fac' ; args=(u'sorl-thumbnail||image||4d545ece8fb09c9176996000cddc0fac',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,371 DEBUG util (0.000) INSERT INTO "thumbnail_kvstore" ("key", "value") VALUES ('sorl-thumbnail||image||4d545ece8fb09c9176996000cddc0fac', '{"storage": "django.core.files.storage.FileSystemStorage", "name": "cache/7c/ab/7cab89bcadad6122d441e6d5443fccc2.jpg", "size": [187, 187]}'); args=(u'sorl-thumbnail||image||4d545ece8fb09c9176996000cddc0fac', '{"storage": "django.core.files.storage.FileSystemStorage", "name": "cache/7c/ab/7cab89bcadad6122d441e6d5443fccc2.jpg", "size": [187, 187]}') | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,426 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172' ; args=(u'sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,449 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172' ; args=(u'sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
2014-10-14 14:58:35,472 DEBUG util (0.000) INSERT INTO "thumbnail_kvstore" ("key", "value") VALUES ('sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172', '["4d545ece8fb09c9176996000cddc0fac"]'); args=(u'sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172', '["4d545ece8fb09c9176996000cddc0fac"]') | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412452124416
ΠΠΎΠ³ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ/ΡΠΎΠ·Π΄Π°Π½ΠΈΡ 2-Π³ΠΎ ΡΡΠΊΠΈΠ·Π°:
2014-10-14 14:58:37,314 DEBUG base Getting thumbnail for file [profiles/avatars/2205.jpg] at [46x46] | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/sorl/thumbnail/base.py:67 (get_thumbnail), PID:8096 Thread:140412426946304
2014-10-14 14:58:37,333 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||image||256cd182b71debc11e8aae0ed8ee1a9d' ; args=(u'sorl-thumbnail||image||256cd182b71debc11e8aae0ed8ee1a9d',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412426946304
2014-10-14 14:58:37,345 DEBUG base Creating thumbnail file [cache/b2/71/b27103adff0bdbba7d05fc98a51be131.jpg] at [46x46] with [{'rounded': None, 'padding_color': '#ffffff', 'format': 'JPEG', 'colorspace': 'RGB', 'cropbox': None, 'padding': False, 'upscale': True, 'crop': u'center', 'image_info': {'jfif_version': (1, 1), 'jfif': 257, 'jfif_unit': 1, 'jfif_density': (72, 72), 'dpi': (72, 72)}, 'quality': 95}] | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/sorl/thumbnail/base.py:148 (_create_thumbnail), PID:8096 Thread:140412426946304
2014-10-14 14:58:37,386 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||image||256cd182b71debc11e8aae0ed8ee1a9d' ; args=(u'sorl-thumbnail||image||256cd182b71debc11e8aae0ed8ee1a9d',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412426946304
2014-10-14 14:58:37,390 DEBUG util (0.001) INSERT INTO "thumbnail_kvstore" ("key", "value") VALUES ('sorl-thumbnail||image||256cd182b71debc11e8aae0ed8ee1a9d', '{"storage": "django.core.files.storage.FileSystemStorage", "name": "cache/b2/71/b27103adff0bdbba7d05fc98a51be131.jpg", "size": [46, 46]}'); args=(u'sorl-thumbnail||image||256cd182b71debc11e8aae0ed8ee1a9d', '{"storage": "django.core.files.storage.FileSystemStorage", "name": "cache/b2/71/b27103adff0bdbba7d05fc98a51be131.jpg", "size": [46, 46]}') | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412426946304
2014-10-14 14:58:37,429 DEBUG util (0.001) SELECT "thumbnail_kvstore"."key", "thumbnail_kvstore"."value" FROM "thumbnail_kvstore" WHERE "thumbnail_kvstore"."key" = 'sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172' ; args=(u'sorl-thumbnail||thumbnails||3314722c993608c1dab30949d2504172',) | File:/home/anton/.virtualenvs/outdoorish/lib/python2.7/site-packages/django/db/backends/util.py:50 (execute), PID:8096 Thread:140412426946304
ΠΡΡΡ Π»ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ? ΠΠΎΠΆΠ΅Ρ Π»ΠΈ ΠΊΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ ΠΎΠ±ΡΡΡΠ½ΠΈΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΎΠ΄Π½ΠΎ ΠΈΠ· ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ Π² Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΊΠ»ΡΡΠ°?
Π― Π±Ρ Ρ ΡΠ΄ΠΎΠ²ΠΎΠ»ΡΡΡΠ²ΠΈΠ΅ΠΌ ΠΏΠΎΠΌΠΎΠ³ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ, Π½ΠΎ ΠΌΠ½Π΅ Π½ΡΠΆΠ΅Π½ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, Ρ ΡΠ΅Π³ΠΎ Π½Π°ΡΠ°ΡΡ!
Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠΏΠ°Π»ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΎΡ
ΠΎΠΆΠ΅ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ KVStore._set_raw()
(Π² cached_db_kvstore.py
) (Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°: https://github.com/mariocesar/sorl- thumbnail/blob/master/sorl/thumbnail/kvstores/cached_db_kvstore.py#L43 )
ΠΡΠΎ ΡΠΈΡΡΠ°ΡΠΈΡ:
Π€ΡΠ½ΠΊΡΠΈΡ _set_raw()
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (A):
key: thumbnail||thumbnails||3314722c993608c1dab30949d2504172
value: ["4d545ece8fb09c9176996000cddc0fac", "256cd182b71debc11e8aae0ed8ee1a9d"]
Π Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ KV (Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Postgres) ΡΠΆΠ΅ Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (B):
key: thumbnail||thumbnails||3314722c993608c1dab30949d2504172
value: ["4d545ece8fb09c9176996000cddc0fac"]
ΠΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°:
Π’Π΅ΠΏΠ΅ΡΡ _set_raw()
Π²ΡΠ·ΡΠ²Π°Π΅Ρ KVStoreModel.objects.get_or_create()
ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π°ΠΏΠΈΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
((A), ΡΠ°, Π³Π΄Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΡΠΊΠΈΠ·). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡ ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π½Π° Π΄Π²Π΅ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ (B) Π² ΠΊΡΡ (ΡΡΠΎ django.core.cache.backends.locmem.LocMemCache
).
ΠΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ (B) Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠΎΡ
ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ
. ΠΡΠ»ΠΈ Ρ ΠΌΠ΅Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΊΠΈΠ·ΠΎΠ², Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π° Π½Π΅Π³ΠΎ Π½Π΅ ΡΡΡΠ»Π°Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ thumbnail||thumbnails||3314722c993608c1dab30949d2504172
.
Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΡ ΠΌΠΎΠ³ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΠΌΠ½Π΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ! Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!
Π― Π½Π΅ ΠΎΠ΄ΠΈΠ½ΠΎΠΊ :) ΠΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΡΠ»Π΅ΠΉΡΠ΅ ΡΡΠΎΡ ΡΠΈΠΊΡ, ΠΎΠ½ ΠΎΡΠ΅Π½Ρ Π½ΡΠΆΠ΅Π½!
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠΎΠΏΠ°Π»ΡΡ Π² ΠΊΠΎΠ΄Π΅ ΠΈ ΠΏΠΎΡ ΠΎΠΆΠ΅ Π΅ΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ
KVStore._set_raw()
(Π²cached_db_kvstore.py
) (Π‘ΡΡΠ»ΠΊΠ° Π½Π° ΡΡΡΠΎΠΊΡ ΠΊΠΎΠ΄Π°: https://github.com/mariocesar/sorl- thumbnail/blob/master/sorl/thumbnail/kvstores/cached_db_kvstore.py#L43 )ΠΡΠΎ ΡΠΈΡΡΠ°ΡΠΈΡ:
Π€ΡΠ½ΠΊΡΠΈΡ
_set_raw()
Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (A):Π Ρ ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ KV (Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Postgres) ΡΠΆΠ΅ Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ Ρ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ (B):
ΠΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°:
Π’Π΅ΠΏΠ΅ΡΡ
_set_raw()
Π²ΡΠ·ΡΠ²Π°Π΅ΡKVStoreModel.objects.get_or_create()
ΠΈ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π·Π°ΠΏΠΈΡΡ ΠΈΠ· Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ((A), ΡΠ°, Π³Π΄Π΅ ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΡΡΠ»ΠΊΠ° Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΡΠΊΠΈΠ·). ΠΠΎΡΠ»Π΅ ΡΡΠΎΠ³ΠΎ ΠΎΠ½ ΡΠΎΡ ΡΠ°Π½ΡΠ΅Ρ Π·Π°ΠΏΠΈΡΡ ΡΠΎ ΡΡΡΠ»ΠΊΠ°ΠΌΠΈ Π½Π° Π΄Π²Π΅ ΠΌΠΈΠ½ΠΈΠ°ΡΡΡΡ (B) Π² ΠΊΡΡ (ΡΡΠΎdjango.core.cache.backends.locmem.LocMemCache
).ΠΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ Π·Π°ΠΏΠΈΡΠΈ (B) Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ . ΠΡΠ»ΠΈ Ρ ΠΌΠ΅Π½ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΡΠΊΠΈΠ·ΠΎΠ², Π΄ΡΡΠ³ΠΎΠΉ ΠΎΡΡΠ°Π΅ΡΡΡ ΠΏΡΠ΅ΠΆΠ½ΠΈΠΌ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π½Π° Π½Π΅Π³ΠΎ Π½Π΅ ΡΡΡΠ»Π°Π΅ΡΡΡ Π·Π°ΠΏΠΈΡΡ
thumbnail||thumbnails||3314722c993608c1dab30949d2504172
.Π― Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ ΠΎΠΏΠΈΡΠ°Π» ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, ΡΡΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°ΡΡΠΈΡ ΠΌΠΎΠ³ Π²ΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅ΡΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΡΠ»ΠΎ Π±Ρ Π·Π΄ΠΎΡΠΎΠ²ΠΎ, Π΅ΡΠ»ΠΈ Π±Ρ Π²Ρ ΠΏΠΎΠΌΠΎΠ³Π»ΠΈ ΠΌΠ½Π΅ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ ΡΡΠΎ! Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ!