Установка владельца объекта с универсальным create_object просматривает в django

(Этот ответ касается только Unix. Я не знаю, как он работает в Windows.)

Большинство разделяемых библиотек загружаются в ОЗУ до того, как управление достигает main, и библиотека, содержащая printf, определенно будет. Функции из dlfcn.h можно использовать для загрузки большего количества совместно используемых библиотек во время выполнения программы, это самое важное исключение.

Общие библиотеки никогда не загружались как часть «кучи», если под этим подразумевается область памяти, используемая для удовлетворения malloc запросов. Они загружаются с использованием системного примитива mmap и могут быть размещены где угодно в памяти. Как указал user3386109 в комментарии к вопросу, в современных системах их местоположение намеренно рандомизировано в качестве контрмеры для различных эксплойтов.

10
задан Gonzalo Quero 12 March 2009 в 18:57
поделиться

5 ответов

Во многих отношениях всеми решениями этого будет больше проблемы, чем они стоят. Этот квалифицирует как взлом. Для обновления django возможно бросить Вас, если они изменяются, путь create_update реализован. Для пользы простоты я предположу, что Вы пытаетесь установить пользователя по умолчанию, не тихо вынудить пользователя быть зарегистрированным пользователем.

Запишите процессор контекста:

from django.views.generic.create_update import get_model_and_form_class
def form_user_default(request):
    if request.method == 'GET':
        model, custom_form = get_model_and_form_class(Post,None)
        custom_form.author = request.user
        return {'form':custom_form}
    else: return {}

То, что это сделает, переопределить объект формы, который create_update передает шаблону. То, что это технически делает, воссоздает форму после того, как представление по умолчанию сделало это.

Затем в Вашем URL conf:

url(r'pattern_to_match', 'django.views.generic.create_update.create_object', kwargs={'context_processors':form_user_default})

Снова, я должен был копаться в исходном коде, чтобы выяснить, как сделать это. Могло бы действительно быть лучше попытаться писать Ваше собственное представление (но включить как можно больше пользовательских объектов Django). Нет никакого "простого" способа по умолчанию сделать это, потому что в django парадигме формы более тесно связываются с образцовым слоем, чем к представлениям, и только просматривает, имеют знание объекта запроса.

2
ответ дан 4 December 2019 в 03:17
поделиться

Если пользователь аутентифицируется, их пользовательский объект request.user объект.

Я не знаком с create_object... Я - все еще новичок к django и только что запустил мой первый реальный проект с него.

Обратите внимание, что необходимо проверить, чтобы удостовериться, что пользователь зарегистрирован перед использованием этого. Это может быть, покончили request.user.is_authenticated().

1
ответ дан 4 December 2019 в 03:17
поделиться

I would suggest to make a wrapper for the create_object, as this author suggest http://www.b-list.org/weblog/2006/nov/16/django-tips-get-most-out-generic-views/ in the view you'll have access to the user info. Afterwards, you will need to use the extra_context to pass the user to the template. Finally at the template you can add a hidden field with the user info. I haven't tried it, but I have been thinking of it for quite some time. Hope this solution suits you! ;) cheers!

0
ответ дан 4 December 2019 в 03:17
поделиться

Нет никакого хорошего способа сцепиться в сохранение объекта при использовании текущего Django универсальные представления. После того как они переписываются как классы, Вы сможете разделить на подклассы представление и рычаг в в надлежащем месте, не имея необходимость переписывать целое представление.

Я уже использую свои собственные основанные на классах универсальные представления поэтому.

0
ответ дан 4 December 2019 в 03:17
поделиться

Возможно, вы захотите рассмотреть возможность закрытия.

from django.forms import ModelForm
from django.views.generic.create_update import create_object, update_object

def make_foo_form(request):
    class FooForm(ModelForm):
        class Meta:
            model = Foo
            fields = ['foo', 'bar']

        def save(self, commit=True):
            f = super(FooForm, self).save(commit=False)
            if not f.pk: f.user = request.user
            if commit: f.save()
            return f

    return FooForm

def create_foo(request):
    FooForm = make_foo_form(request)
    return create_object(form_class=FooForm)

Здесь есть некоторая неэффективность, поскольку вам нужно создавать объект ModelForm для каждого запроса, но это позволяет вам внедрить функциональность в общий view.

Вам необходимо решить, стоит ли добавленная сложность для создания формы поддерживать простоту на стороне представления.

Однако преимущество здесь в том, что это также работает с случаем обновления практически без дополнительных усилий:

def update_foo(request, object_id):
    FooForm = make_foo_form(request)
    return update_object(form_class=FooForm, object_id=object_id)

Очевидно, вы можете использовать этот подход и для более сложных случаев.

3
ответ дан 4 December 2019 в 03:17
поделиться
Другие вопросы по тегам:

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