Sorl-thumbnail: рдердВрдмрдиреЗрд▓ рдореБрдЦреНрдп рдореВрд▓реНрдп рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕реНрд░реЛрдд рдЫрд╡рд┐ рд╕реЗ рд▓рд┐рдВрдХ рдирд╣реАрдВ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдЕрдХреНрддреВре░ 2014  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: jazzband/sorl-thumbnail

рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦрд╛:

рдореЗрд░реЗ рдкреГрд╖реНрда рдореЗрдВ {% 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||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 рд▓реЙрдЧ рд╣реИ:

рдкрд╣рд▓рд╛ рдердВрдмрдиреЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛/рдмрдирд╛рдирд╛ рд▓реЙрдЧ рдХрд░реЗрдВ:

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

рджреВрд╕рд░рд╛ рдердВрдмрдиреЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛/рдмрдирд╛рдирд╛ рд▓реЙрдЧ рдХрд░реЗрдВ:

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- рдердВрдмрдиреЗрд▓/рдмреНрд▓реЙрдм/рдорд╛рд╕реНрдЯрд░/рд╕реЙрд░рд▓/рдердВрдмрдиреЗрд▓/kvstores/cached_db_kvstore.py#L43 )

рдпрд╣ рд╣реИ рд╕реНрдерд┐рддрд┐:
_set_raw() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ (рдП) рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

key: thumbnail||thumbnails||3314722c993608c1dab30949d2504172
value: ["4d545ece8fb09c9176996000cddc0fac", "256cd182b71debc11e8aae0ed8ee1a9d"]

рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ (рдмреА) рдХреЗ рд╕рд╛рде рдХреЗрд╡реА рд╕реНрдЯреЛрд░ (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдбреЗрдЯрд╛рдмреЗрд╕) рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ:

key: thumbnail||thumbnails||3314722c993608c1dab30949d2504172
value: ["4d545ece8fb09c9176996000cddc0fac"]

рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:
рдЕрдм _set_raw() KVStoreModel.objects.get_or_create() рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ ((рдП), рдЬрд╣рд╛рдВ рдПрдХ рдердВрдмрдиреЗрд▓ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ)ред рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдХреИрд╢ рдореЗрдВ рджреЛ рдердВрдмрдиреЗрд▓ (рдмреА) рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ django.core.cache.backends.locmem.LocMemCache )ред

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг (рдмреА) рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрднреА рднреА рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЫрд╡рд┐ рдмрджрд▓рддрд╛ рд╣реВрдВ рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдердВрдмрдиреЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ thumbnail||thumbnails||3314722c993608c1dab30949d2504172 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХреЗрдВ! рдзрдиреНрдпрд╡рд╛рдж!

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИрдВ? рдХреНрдпрд╛ рдХреЛрдИ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЫрд╡рд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреБрдВрдЬреА рдореВрд▓реНрдп рд╕реНрдЯреЛрд░ рдореЗрдВ рд╕реНрд░реЛрдд рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдХреНрдпреЛрдВ рдХрдиреЗрдХреНрдЯ рдирд╣реАрдВ рд╣реИ?

рдореБрдЭреЗ рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд▓рдЧреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдкреЙрдЗрдВрдЯрд░ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд╣рд╛рдВ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдП!

рдореИрдВрдиреЗ рдХреЛрдб рдореЗрдВ рдереЛрдбрд╝рд╛ рдЦреБрджрд╛рдИ рдХреА рдФрд░ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди KVStore._set_raw() ( cached_db_kvstore.py ) рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдХреЛрдб рд▓рд╛рдЗрди рд╕реЗ рд▓рд┐рдВрдХ: https://github.com/mariocesar/sorl- рдердВрдмрдиреЗрд▓/рдмреНрд▓реЙрдм/рдорд╛рд╕реНрдЯрд░/рд╕реЙрд░рд▓/рдердВрдмрдиреЗрд▓/kvstores/cached_db_kvstore.py#L43 )

рдпрд╣ рд╣реИ рд╕реНрдерд┐рддрд┐:
_set_raw() рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрди рдкреИрд░рд╛рдореАрдЯрд░ (рдП) рдХреЗ рд╕рд╛рде рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

key: thumbnail||thumbnails||3314722c993608c1dab30949d2504172
value: ["4d545ece8fb09c9176996000cddc0fac", "256cd182b71debc11e8aae0ed8ee1a9d"]

рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ (рдмреА) рдХреЗ рд╕рд╛рде рдХреЗрд╡реА рд╕реНрдЯреЛрд░ (рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬ рдбреЗрдЯрд╛рдмреЗрд╕) рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рд╣реИ:

key: thumbnail||thumbnails||3314722c993608c1dab30949d2504172
value: ["4d545ece8fb09c9176996000cddc0fac"]

рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:
рдЕрдм _set_raw() KVStoreModel.objects.get_or_create() рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ ((рдП), рдЬрд╣рд╛рдВ рдПрдХ рдердВрдмрдиреЗрд▓ рд╕рдВрджрд░реНрднрд┐рдд рд╣реИ)ред рдЗрд╕рдХреЗ рдмрд╛рдж рдпрд╣ рдХреИрд╢ рдореЗрдВ рджреЛ рдердВрдмрдиреЗрд▓ (рдмреА) рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХреЛ рд╕рд╣реЗрдЬрддрд╛ рд╣реИ (рдЬреЛ рдХрд┐ django.core.cache.backends.locmem.LocMemCache )ред

рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдХрд╛ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг (рдмреА) рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдХрднреА рднреА рд╕рд╣реЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ рдЫрд╡рд┐ рдмрджрд▓рддрд╛ рд╣реВрдВ рддреЛ рдХреЗрд╡рд▓ рдПрдХ рдердВрдмрдиреЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рджреВрд╕рд░рд╛ рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕реЗ thumbnail||thumbnails||3314722c993608c1dab30949d2504172 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджреНрд╡рд╛рд░рд╛ рд╕рдВрджрд░реНрднрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХреЗред рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХреЗрдВ! рдзрдиреНрдпрд╡рд╛рдж!

рдореИрдВ рдЕрдХреЗрд▓рд╛ рдирд╣реАрдВ рд╣реВрдБ :) рдХреГрдкрдпрд╛, рдЗрд╕ рдлрд┐рдХреНрд╕ рдХреЛ рдорд░реНрдЬ рдХрд░реЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЬрд░реВрд░реА рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dbrgn picture dbrgn  ┬╖  14рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jplehmann picture jplehmann  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Flimm picture Flimm  ┬╖  10рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

int-ua picture int-ua  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

awidgery picture awidgery  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ