Как сделать частную область загрузки с django?

В моем случае (у меня была та же проблема), но было неуместно использовать привязку к свойству IsSelected объекта Data, а также я не мог легко получить путь к элементу дерева, поэтому следующий код отлично справился с задачей:

  private void SelectTreeViewItem(object item)
    {
        try
        {
            var tvi = GetContainerFromItem(this.MainRegion, item);

            tvi.Focus();
            tvi.IsSelected = true;

            var selectMethod =
                typeof(TreeViewItem).GetMethod("Select",
                System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance);

            selectMethod.Invoke(tvi, new object[] { true });
        }
        catch { }
    }

  private TreeViewItem GetContainerFromItem(ItemsControl parent, object item)
    {
        var found = parent.ItemContainerGenerator.ContainerFromItem(item);
        if (found == null)
        {
            for (int i = 0; i < parent.Items.Count; i++)
            {
                var childContainer = parent.ItemContainerGenerator.ContainerFromIndex(i) as ItemsControl;
                TreeViewItem childFound = null;
                if (childContainer != null && childContainer.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
                {
                    childContainer.ItemContainerGenerator.StatusChanged += (o, e) =>
                        {
                             childFound = GetContainerFromItem(childContainer, item);
                        };
                }
                else
                {
                     childFound = GetContainerFromItem(childContainer, item);                            
                }
                if (childFound != null)
                    return childFound;                 
            }
        }
        return found as TreeViewItem;
    }
10
задан luc 22 October 2009 в 21:03
поделиться

3 ответа

Итак, поиск я нашел эту ветку обсуждения.

Было сказано, что вас могут заинтересовать три вещи in.

Сначала идет метод mod_python
Затем идет метод mod_wsgi

Оба варианта кажутся не такими уж хорошими.

Лучше заголовок X-Sendfile который не является полностью стандартным, но работает, по крайней мере, в apache и lighttpd.

kibbitzing из здесь , у нас есть следующее.

@login_required
def serve_file(request, context):
    if <check if they have access to the file>:
        filename = "/var/www/myfile.xyz" 
        response = HttpResponse(mimetype='application/force-download') 
        response['Content-Disposition']='attachment;filename="%s"'%filename
        response["X-Sendfile"] = filename
        response['Content-length'] = os.stat("debug.py").st_size
        return response
    return <error state>

, и это должно быть почти то, что вам нужно.Просто убедитесь, что вы включили поддержку X-Sendfile во всем, что вы используете.

10
ответ дан 3 December 2019 в 23:13
поделиться

XSendfile кажется правильным подходом, но выглядит немного сложным в настройке . Я решил использовать более простой способ.

Основываясь на ответе emeryc и фрагментах django http://www.djangosnippets.org/snippets/365/ , я написал следующий код, и кажется чтобы сделать то, что я хочу:

@login_required
def serve_file(request, filename):
    fullname = myapp.settings.PRIVATE_AREA+filename
    try:
        f = file(fullname, "rb")
    except Exception, e:
        return page_not_found(request, template_name='404.html')
    try:
        wrapper = FileWrapper(f)
        response = HttpResponse(wrapper, mimetype=mimetypes.guess_type(filename)[0])
        response['Content-Length'] = os.path.getsize(fullname)
        response['Content-Disposition'] = 'attachment; filename={0}'.format(filename)
        return response
    except Exception, e:
        return page_not_found(request, template_name='500.html')
3
ответ дан 3 December 2019 в 23:13
поделиться

Существует множество руководств о том, как включить аутентификацию в Django. Вам нужна помощь? Если да, запустите здесь .

Следующим шагом является создание представления, в котором перечислены ваши файлы. Так что сделайте это, это все базовый Django. Если у вас возникли проблемы с этим шагом, вернитесь и просмотрите учебник Django . Вы получите это.

Наконец, вернитесь к первой ссылке (здесь снова: аутентификационные документы ) и внимательно посмотрите на декоратор LOGIN_REQUIRED. Защитите свой вид с помощью этого декоратора.

Это все довольно простые вещи Django. Если вы сделали это и у вас есть конкретный вопрос , разместите его здесь. Но вы задаете SO довольно открытый вопрос, и это не лучший способ получить помощь.

1
ответ дан 3 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: