def upload_image(request):
if request.method != '<STR_LIT:POST>':<EOL><INDENT>return HttpResponseNotAllowed(('<STR_LIT:POST>',))<EOL><DEDENT>result = {'<STR_LIT>': [], '<STR_LIT>': []}<EOL>files = request.FILES.getlist('<STR_LIT>')<EOL>if not files:<EOL><INDENT>result['<STR_LIT>'].append(str(ERROR_MESSAGES['<STR_LIT>']))<EOL>return send_json(result)<EOL><DEDENT>try:<EOL><INDENT>profile = request.POST.get('<STR_LIT>', '<STR_LIT:default>')<EOL>conf = get_profile_configs(profile)<EOL><DEDENT>except ValueError as e:<EOL><INDENT>result['<STR_LIT>'].append(str(e))<EOL>return send_json(result)<EOL><DEDENT>for i in range(min(len(files), dju_settings.DJU_IMG_UPLOAD_MAX_FILES)):<EOL><INDENT>f = files[i]<EOL>if not is_image(f, types=conf['<STR_LIT>']):<EOL><INDENT>result['<STR_LIT>'].append(<EOL>str(ERROR_MESSAGES['<STR_LIT>']) %<EOL>{'<STR_LIT:name>': f.name, '<STR_LIT>': '<STR_LIT:U+002CU+0020>'.join([t.upper() for t in conf['<STR_LIT>']])}<EOL>)<EOL>continue<EOL><DEDENT>adjust_image(f, max_size=conf['<STR_LIT>'], new_format=conf['<STR_LIT>'],<EOL>jpeg_quality=conf['<STR_LIT>'], fill=conf['<STR_LIT>'], stretch=conf['<STR_LIT>'])<EOL>img_id = generate_img_id(profile, ext=image_get_format(f),<EOL>label=request.POST.get('<STR_LIT:label>'), tmp=True)<EOL>relative_path = get_relative_path_from_img_id(img_id)<EOL>full_path = media_path(relative_path)<EOL>save_file(f, full_path)<EOL>data = {<EOL>'<STR_LIT:url>': settings.MEDIA_URL + relative_path,<EOL>'<STR_LIT>': relative_path,<EOL>'<STR_LIT>': img_id,<EOL>'<STR_LIT>': {},<EOL>}<EOL>for v_conf in conf['<STR_LIT>']:<EOL><INDENT>label = v_conf['<STR_LIT>']<EOL>if not label:<EOL><INDENT>label = get_variant_label(v_conf)<EOL><DEDENT>v_f = adjust_image(f, max_size=v_conf['<STR_LIT>'], new_format=v_conf['<STR_LIT>'],<EOL>jpeg_quality=v_conf['<STR_LIT>'], fill=v_conf['<STR_LIT>'],<EOL>stretch=v_conf['<STR_LIT>'], return_new_image=True)<EOL>v_relative_path = get_relative_path_from_img_id(img_id, variant_label=label,<EOL>ext=image_get_format(v_f))<EOL>v_full_path = media_path(v_relative_path)<EOL>save_file(v_f, v_full_path)<EOL>data['<STR_LIT>'][label] = {<EOL>'<STR_LIT:url>': settings.MEDIA_URL + v_relative_path,<EOL>'<STR_LIT>': v_relative_path,<EOL>}<EOL><DEDENT>result['<STR_LIT>'].append(data)<EOL><DEDENT>return send_json(result)<EOL>
Вюха, яка зберігає завантажений файл.
Структура запиту:
    FILES
        images[]: файли зображеннь
    POST DATA
        profile: назва профілю (для визначення налаштувань збреження) (опціонально)
        label: додаток до назви файлу при збереженні (опціонально)
Структура відповіді:
    Тип відповіді: JSON
    {
        'uploaded': [
            {
                'url': 'повний url до головного файла',
                'rel_url': 'відносний від MEDIA url головного файла',
                'img_id': 'ідентифікатор для збереження в БД',  // 'profilename:abcdef_abcd_label.png',
                'variants': {
                    'variant label': {
                        'url': 'повний url до варіанта',
                        'rel_url': 'відносний від MEDIA url головного файла'
                    },
                    ...
                }
            },
            ...
        ],
        'errors': ['error message', ...]
    }