示例#1
0
 def dispatch(self, request, *args, **kwargs):
     if request.is_ajax():
         resp = self._ajax()
         if not isinstance(resp, HttpResponseBase):
             resp = send_json(resp)
         return resp
     return super(TemplateViewWithAjax, self).dispatch(request, *args, **kwargs)
示例#2
0
 def dispatch(self, request, *args, **kwargs):
     if request.is_ajax():
         resp = self._ajax()
         if not isinstance(resp, HttpResponseBase):
             resp = send_json(resp)
         return resp
     return super(TemplateViewWithAjax,
                  self).dispatch(request, *args, **kwargs)
示例#3
0
def upload_image(request):
    """
    Вюха, яка зберігає завантажений файл.
    Структура запиту:
        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', ...]
        }
    """
    if request.method != 'POST':
        return HttpResponseNotAllowed(('POST',))
    result = {'uploaded': [], 'errors': []}
    files = request.FILES.getlist('images[]')
    if not files:
        result['errors'].append(unicode(ERROR_MESSAGES['no_uploaded_files']))
        return send_json(result)
    try:
        profile = request.POST.get('profile', 'default')
        conf = get_profile_configs(profile)
    except ValueError, e:
        result['errors'].append(unicode(e))
        return send_json(result)
示例#4
0
def upload_image(request):
    """
    Вюха, яка зберігає завантажений файл.
    Структура запиту:
        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', ...]
        }
    """
    if request.method != "POST":
        return HttpResponseNotAllowed(("POST",))
    result = {"uploaded": [], "errors": []}
    files = request.FILES.getlist("images[]")
    if not files:
        result["errors"].append(unicode(ERROR_MESSAGES["no_uploaded_files"]))
        return send_json(result)
    try:
        profile = request.POST.get("profile", "default")
        conf = get_profile_configs(profile)
    except ValueError, e:
        result["errors"].append(unicode(e))
        return send_json(result)
示例#5
0
        adjust_image(f, max_size=conf['MAX_SIZE'], new_format=conf['FORMAT'],
                     jpeg_quality=conf['JPEG_QUALITY'], fill=conf['FILL'], stretch=conf['STRETCH'])
        img_id = generate_img_id(profile, ext=image_get_format(f),
                                 label=request.POST.get('label'), tmp=True)
        relative_path = get_relative_path_from_img_id(img_id)
        full_path = media_path(relative_path)
        save_file(f, full_path)
        data = {
            'url': settings.MEDIA_URL + relative_path,
            'rel_url': relative_path,
            'img_id': img_id,
            'variants': {},
        }
        for v_conf in conf['VARIANTS']:
            label = v_conf['LABEL']
            if not label:
                label = get_variant_label(v_conf)
            v_f = adjust_image(f, max_size=v_conf['MAX_SIZE'], new_format=v_conf['FORMAT'],
                               jpeg_quality=v_conf['JPEG_QUALITY'], fill=v_conf['FILL'],
                               stretch=v_conf['STRETCH'], return_new_image=True)
            v_relative_path = get_relative_path_from_img_id(img_id, variant_label=label,
                                                            ext=image_get_format(v_f))
            v_full_path = media_path(v_relative_path)
            save_file(v_f, v_full_path)
            data['variants'][label] = {
                'url': settings.MEDIA_URL + v_relative_path,
                'rel_url': v_relative_path,
            }
        result['uploaded'].append(data)
    return send_json(result)
示例#6
0
            max_size=conf["MAX_SIZE"],
            new_format=conf["FORMAT"],
            jpeg_quality=conf["JPEG_QUALITY"],
            fill=conf["FILL"],
            stretch=conf["STRETCH"],
        )
        img_id = generate_img_id(profile, ext=image_get_format(f), label=request.POST.get("label"), tmp=True)
        relative_path = get_relative_path_from_img_id(img_id)
        full_path = media_path(relative_path)
        save_file(f, full_path)
        data = {"url": settings.MEDIA_URL + relative_path, "rel_url": relative_path, "img_id": img_id, "variants": {}}
        for v_conf in conf["VARIANTS"]:
            label = v_conf["LABEL"]
            if not label:
                label = get_variant_label(v_conf)
            v_f = adjust_image(
                f,
                max_size=v_conf["MAX_SIZE"],
                new_format=v_conf["FORMAT"],
                jpeg_quality=v_conf["JPEG_QUALITY"],
                fill=v_conf["FILL"],
                stretch=v_conf["STRETCH"],
                return_new_image=True,
            )
            v_relative_path = get_relative_path_from_img_id(img_id, variant_label=label, ext=image_get_format(v_f))
            v_full_path = media_path(v_relative_path)
            save_file(v_f, v_full_path)
            data["variants"][label] = {"url": settings.MEDIA_URL + v_relative_path, "rel_url": v_relative_path}
        result["uploaded"].append(data)
    return send_json(result)