Бильярдный клуб "РУССКАЯ ПИРАМИДА".
Меню
  • Настольные игры
  • Свинтус
  • Правила игр
  • Шакал
  • Активити игры
  • Бэнг
  • Секреты побед
Menu

Джанго правила – . » — «. . .

Posted on 03.01.202028.01.2019 by alexxlab

Содержание

  • Что же представляет из себя Django? · Django Girls Tutorial
    • Зачем нам нужен фреймворк?
    • Что происходит, когда кто-то запрашивает веб-сайт у твоего сервера?
  • Django | Введение
    • Что такое Django
  • Почему не нужно начинать с Django
  • О пермишенах в Django
  • Что такое Django Framework и для чего он применяется » Блог. ArtKiev Design Studio
  • Как это снято: «Джанго освобожденный»
  • django — Django South: Как создать правила для настраиваемого поля?

Что же представляет из себя Django? · Django Girls Tutorial

Django (/ˈdʒæŋɡoʊ/ джанго) — бесплатный и свободный фреймворк для веб-приложений, написанный на Python. Фреймворк — это набор компонентов, которые помогают разрабатывать веб-сайты быстро и просто.

Каждый раз при разработке веб-сайтов требуются похожие компоненты: способ аутентифицировать пользователей (вход, выход, регистрация), панель управления сайтом, формы, инструменты для загрузки файлов и т. д.

К счастью для нас, другие люди обратили внимание на возникновение однотипных проблем при веб-разработке, так что они объединились и создали фреймворки (Django и другие), которые предлагают нам готовые шаблоны для использования.

Фреймворки существуют, чтобы облегчить процесс разработки и позволить нам не изобретать колесо.

Зачем нам нужен фреймворк?

Чтобы понять, для чего же нам нужен Django, нам нужно ближе познакомиться с серверами. Во-первых, сервер должен узнать о том, что мы ждём от него веб-страницу.

Представь себе почтовый ящик (порт), который проверяется на наличие новых писем (запросов). Это делает веб-сервер. Когда письмо приходит, сервер читает его и отправляет ответ с веб-страничкой. Однако чтобы что-то отправить, нам надо это что-то иметь. И Django как раз и отвечает за создание контента, который будет отправлен в ответе.

Что происходит, когда кто-то запрашивает веб-сайт у твоего сервера?

Когда на сервер приходит запрос, он переадресуется Django, который пытается сообразить, что же конкретно от него просят. Для начала он берет адрес веб-страницы и пробует понять — что же нужно сделать. Эту часть процесса в Django выполняет urlresolver (адрес веб-сайта называется URL — Uniform Resource Locator — Единый указатель ресурсов, так что название urlresolver, resolver == определитель, имеет определенный смысл). Он не слишком умён, поэтому просто берет список шаблонов и пытается сопоставить их с URL. Django сверяет шаблоны сверху вниз и, если что-то совпадает, он переправляет запрос соответствующей функции (которая называется view).

Представь себе почтальона с письмом. Она идет вниз по улице и сверяет номера домов с адресом на письме. Если они совпадают, то она оставляет письмо. Так же работает и urlresolver!

Но самые интересные вещи происходят в функции view: мы, например, можем обращаться к базе данных за определенной информацией. Может быть пользователь попросил изменить какую-нибудь информацию? Как будто в письме написано: «Пожалуйста, поменяйте описание моей работы.» Функция view может проверить, имеете ли вы разрешение делать это, а затем обновит описание работы и отправит обратно ответ: «Готово!». Затем функция view сгенерирует ответ, и Django сможет отправить его веб-браузеру пользователя.

В реальности все немного сложнее, однако тебе не обязательно знать все технические навороты прямо сейчас. Достаточно основной концепции.

Так что вместо погружения в пучины нюансов мы просто начнем работать с Django и познакомимся со всеми важными особенностями по мере продвижения!

tutorial.djangogirls.org

Django | Введение

Что такое Django

Последнее обновление: 14.02.2018

Django — это фреймворк для создания веб-приложений с помощью языка программирования Python.

Django был создан в 2005 году, когда веб-разработчики из газеты Lawrence Journal-World стали использовать Python в качестве языка для создания веб-сайтов. А в 2008 году вышел публичный первый релиз фреймворка. На сегодняшний день он продолжает развиваться. Так, текущей версией фреймворка на момент написания этой статьи является версия 2.0, которая вышла 3 декабря 2017 года. Ну и также постоянно выходят подверсии.

Django довольно популярен. Он используется на многих сайтах, в том числе таких, как Pinterest, PBS, Instagram, BitBucket, Washington Times, Mozilla и многих других.

Фреймворк является бесплатным. Он развивается как open source, его исходный код открыт, его можно найти репозитории на githube.

Фреймворк Django реализует архитектурный паттерн Model-View-Template или сокращенно MVT, который по факту является модификацией распростаненного в веб-программировании паттерна MVC (Model=-View-Controller).

Схематично мы можем представить архитектуру MVT в Django следующим образом:

Основные элементы паттерна:

  • URL dispatcher: при получение запроса на основании запрошенного адреса URL определяет, какой ресурс должен обрабатывать данный запрос.

  • View: получает запрос, обрабатывает его и отправляет в ответ пользователю некоторый ответ. Если для обработки запроса необходимо обращение к модели и базе данных, то View взаимодействует с ними. Для создания ответа может применять Template или шаблоны. В архитектуре MVC этому компоненту соответствуют контроллеры (но не представления).

  • Model: описывает данные, используемые в приложении. Отдельные классы, как правило, соответствуют таблицам в базе данных.

  • Template: представляет логику представления в виде сгенерированной разметки html. В MVC этому компоненту соответствует View, то есть представления.

Когда к приложению приходит запрос, то URL dispatcher определяет, с каким ресурсом сопоставляется данный запрос и передает этот запрос выбранному ресурсу. Ресурс фактически представляет функцию или View, который получает запрос и определенным образом обрабатывает его. В процессе обработки View может обращаться к моделям и базе данных, получать из нее данные, или, наоборот, сохранять в нее данные. Результат обработки запроса отправляется обратно, и этот результат пользователь видит в своем браузере. Как правило, результат обработки запроса представляет сгенерированный html-код, для генерации которого применяются шаблоны (Template).

metanit.com

Почему не нужно начинать с Django

У ме­ня слу­чи­лось огром­ное «го­ре» — проект, ко­то­рый был взра­щен мной и не­большой компа­ни­ей про­грам­ми­стов прак­ти­че­ски для лич­но­го поль­зо­ва­ния, вдруг стал по­пу­ля­рен, под­верг­ся ред­дит, дигг и стам­бла­пон эф­фек­там (и пере­жил их по­чти без даун­таймов, эта отдель­ная гор­дость и те­ма для дру­го­го по­ста), об­за­вел­ся се­рьезны­ми ин­ве­сто­ра­ми и на­пол­нил­ся хо­ро­шей ре­ле­вант­ной ак­тив­ной ауди­то­ри­ей. Обой­дем­ся без имен и на­зва­ний — нас ин­тере­сует ис­клю­чи­тель­но тех­но­ло­ги­че­ская сто­ро­на. Слу­чи­лось это око­ло го­да на­зад, под управ­ле­ни­ем та­лантли­во­го PMа всего че­рез 5 ме­ся­цев по­сле пуб­лич­но­го стар­та уда­лось мо­не­ти­зи­ро­вать сер­вис без по­терь ло­яль­но­сти кли­ен­тов — прав­да па­ру злых му­да­ков в бло­жи­ках все же плю­ну­ли злым слов­цом в сто­ро­ну на­шей корыстно­сти. И вот, в один пре­крас­ный день мы ут­кну­лись но­сом в сте­ну. Дан­ный пост по­мо­жет вам не по­вто­рять на­ши ошиб­ки и при­зван по­де­лить­ся опы­том вы­бо­ра инстру­мен­та­рия раз­ра­ботки и деплой­мен­та в самом на­ча­ле дол­го­го пу­ти.Ос­нов­ная пробле­ма в проек­тах на­ше­го ти­па — не­даль­но­вид­ность, по этим же при­чи­нам facebook в свое вре­мя был на­пи­сан на PHP, ко­то­рый в по­след­ствии пы­та­лись со­би­рать в С++ в HipHop, не знаю,чем там все за­кон­чи­лось, но подоб­ных при­ме­ров мил­лио­ны, к со­жа­ле­нию, лишь круп­ные компа­нии на эта­пе пер­вич­но­го пла­ни­ро­ва­ния мо­гут поз­во­лить се­бе раз­ра­ботку ар­хи­тек­ту­ры го­ри­зонталь­но­го и вер­ти­каль­но­го масшта­би­ро­ва­ния и пред­ви­деть даль­ней­шее раз­ви­тие проек­та. Все ма­лень­кие ко­манды со­зда­ют проек­ты на од­ной ле­вой ко­лен­ке с по­мо­щью про­сто­го и бы­стро­го инстру­мен­та­рия, а да­лее на­чи­на­ет дей­ство­вать пра­ви­ло снеж­но­го ко­ма — ста­рый код об­рас­та­ет но­вым и за­ме­нить яд­ро мож­но толь­ко пол­ность рас­ко­пав верх­ние слои. Не обо­шла сто­ро­ной эта пробле­ма и нас, для ре­а­ли­за­ции был вы­бран фрейм­ворк Django, воз­мож­но­стей ко­то­ро­го хва­та­ло при­мер­но с год, а дальше мы столк­ну­лись с пробле­мой большинства. При ку­че до­сто­инств у это­го инстру­мен­та есть один большу­щий ми­нус — уз­ко­лобое и со­вер­шен­но не гиб­кое ORM на ко­то­ром за­вя­за­но аб­со­лют­но все: CRUD ин­тер­фейс па­не­ли адми­ни­стри­ро­ва­ния, мо­дуль аутен­ти­фи­ка­ции, ге­не­ра­тор форм и то­му подоб­ное. Пробле­ма бы­ла до­ста­точ­но се­рьезная — нуж­но бы­ло ли­бо вне­дрять пря­мые SQL инъ­ек­ции, ис­поль­зуя сто­ронние raw sql бил­де­ры, све­дя на нет пере­но­си­мость, аб­стра­ги­ро­ван­ность от син­так­си­са и са­му идею ORM, ли­бо ис­кать аль­тер­на­тив­ные ре­ше­ния. Вто­рой ва­ри­ант по­ка­зал­ся нам бо­лее пред­по­чти­тель­ным, при­ни­мая во вни­ма­ние тот факт, что из Django мы ис­поль­зо­ва­ли лишь верх­ний слой ша­бло­ни­за­то­ра, URL Routing, ORM (ну и ге­не­ра­тор форм) и memcached backend. Для ша­бло­нов сра­зу был найден jinja2, прак­ти­че­ски пол­но­стью сов­ме­сти­мый с django-templates, не­большие син­так­си­че­ские раз­личия со­сто­я­ли лишь в пере­да­че па­ра­мет­ров фильтрам и от­сут­ствии не­ко­то­рых ме­то­дов (вро­де то­го же {% url %}, он по­все­мест­но ис­поль­зо­вал­ся на­ми для ге­не­ра­ции ссы­лок), ко­то­рые бы­ли на­пи­са­ны само­сто­я­тель­но с уче­том осо­бен­но­стей но­во­го ядра. Вто­рая часть ко­манды за­ни­ма­лась пор­ти­ро­ва­ни­ем контрол­ле­ров в но­вый фрейм­ворк Pyramid (про­дол­жа­тель идей Pylons), а мне оста­ва­лась са­мая «вкус­ная» ра­бо­та — пере­пи­сы­вать мо­де­ли с Django ORM на SQLAlchemy, ну и пере­но­сить дан­ные. Не бу­ду углуб­лять­ся в де­та­ли, ска­жу лишь, что ни­че­го не ме­ша­ло ис­поль­зо­вать ал­хи­мию по­верх та­блиц, ге­не­ри­ро­ван­ных джан­го — в от­личии от сво­е­го ин­ва­лид­но­го со­брата, sqlalchemy уме­ет custom database scheme, но хо­те­лось аб­стра­ги­ро­вать­ся от ужас­ных many-to-many relations с та­бли­цей в 500K за­пи­сей, остав­лен­ных в на­след­ство. Пробле­ма ге­не­ра­ции и ва­ли­да­ции форм то­же бы­ла све­де­на на нет с по­мо­щью formalchemy. В осталь­ном, это бы­ла впол­не вы­пол­ни­мая ру­ти­на. Че­рез 10 дней в SVN вет­ке с за­вет­ным на­зва­ни­ем migration уже бы­ла ра­бо­чая те­сто­вая вер­сия, ко­то­рую нуж­но бы­ло скарм­ли­вать обе­зьян­кам из отде­ла те­сти­ров­ки и QA.Те­перь по­го­во­рим про deployment. В да­та­цен­тре компа­ния арен­ду­ет несколь­ко сер­ве­ров в стой­ке — фронт­энд с nginx для про­стой про­пор­ци­о­наль­но­го upstream load-balancing, 2 backend-а для python и memcache, 3 сер­ве­ра для pgpool-II PostgreSQL кла­стера. Ста­ти­ка и файлы поль­зо­ва­телей хра­нят­ся в Amazon S3. Рань­ше на бэкэн­дах мы ис­поль­зо­ва­ли FastCGI ин­тер­фейс manage.py пря­мо из ко­роб­ки Django ру­ко­водству­ясь при­ци­пом «нам ле­ни­во», с пере­хо­дом на Pyramid был вы­бран род­ной для Python WSGI и Green Unicorn в ка­че­стве сер­ве­ра, ко­то­рый уме­ет ра­бо­тать с Paste-сов­ме­сти­мы­ми фрейм­вор­ка­ми. Для дан­но­го окру­же­ния был со­здан отдель­ный virtualenv на каж­дом сер­ве­ре, поз­во­ля­ю­щий ве­сти те­сти­ро­ва­ние и уста­нов­ку но­вых вер­сий необ­хо­ди­мых биб­лио­тек, не бо­ясь по­вре­дить хруп­кие dependancies для уже ра­бо­та­ю­ще­го проек­та. В ка­че­стве сто­ро­же­во­го пса бы­ла вы­бра­на то­же не чу­жая для python си­сте­ма контро­ля про­цес­са supervisord. Для управ­ле­ния на­ши­ми но­вы­ми окру­же­ни­я­ми бы­ло по­строе­но не­большое при­ло­же­ние на осно­ве fabric, ини­ци­и­ру­ю­щее svn up об­нов­ле­ние bleeding edge вер­сий че­рез SVN post-commit хук и пе­реза­гру­жа­ю­щее gunicorn workers про­стой и удоб­ной ком­мандой kill -HUP `cat /var/run/g_be.pid`. 

Пред­ва­ри­тель­ные вы­во­ды по­ка де­лать до­ста­точ­но ра­но — но­вая вер­сия все еще не ушла в production, но син­те­ти­че­ские на­груз­ки с по­мо­щью ути­лит аля siege по­ка­за­ли за­мет­ную эко­но­мию на вре­ме­ни ге­не­ра­ции стра­ни­цы и ре­сур­сах CPU\RAM. Что ка­са­е­мо Django — по­ис­ти­не ве­ли­ко­леп­ный инстру­мент, Ruby On Rails, но толь­ко для Python и я ни в ко­ем слу­чае не спи­сы­ваю его со сче­тов. Этот блог был це­ли­ком и пол­но­стью на­пи­сан на Django за 5 ча­сов, но если вы пла­ни­ру­е­те со­здать что-то, что ги­по­те­ти­че­ски бу­дет услож­нять­ся струк­тур­но — вам необ­хо­ди­мо смот­реть в сто­ро­ну аль­тер­на­тив­ных инстру­мен­тов. Удач­ный при­мер ми­гра­ции, опи­сан­ный в этом по­сте — ско­рее success story и большая уда­ча, чем пра­ви­ло. Про­сто большинство на­ше­го функ­ци­о­на­ла бы­ло вы­не­се­но в packages, а Django был про­сто про­слой­кой для со­зда­ния ло­ги­ки. Вам же мо­жет по­вез­ти на­много мень­ше.

И в ка­че­стве по­сле­сло­вия: опыт­ный про­грам­мист и си­стем­ный ар­хи­тек­тор (оху­и­ти­тель­но же зву­чит) в ли­це ме­ня ищет ин­терес­ную ра­бо­ту на рас­сто­я­нии. Ин­терес­ную не в смыс­ле де­неж­ной компен­са­ции или комплекс­ных обе­дов, ин­терес­ным и тех­ни­че­ски слож­ным дол­жен быть проект и ко­манда. Хо­тя ко­манда мо­жет быть и не слож­ной, про­сто опыт­ной и при­ят­ной в об­ще­нии. Рассмот­рю лю­бые предло­же­ния, от­прав­лен­ные мне на элек­трон­ную по­чту, ука­зан­ную в шап­ке.

www.mindcollapse.com

О пермишенах в Django

Дисклеймер: этот пост не про встроенную в Django систему пермишенов (модель auth.Permission), она ущербная и предназначена только для управления админкой.

Один из вопросов, которые я всегда задаю на собеседовании, посвящён управлению пермишенами в Django. Я не спрашиваю об этом напрямую, а даю задачу, в которой надо использовать пермишены, и смотрю, как человек справляется. Вот эта задача:

Сделать движок для коллективного ведения блога. Залогиненный пользователь может добавлять записи в блог. Редактировать или удалить запись может её автор или суперюзер.

Решение кандидата, обычно, выглядит примерно так:

class AddPostView(...):

    def dispatch(self, request, *args, **kwargs):
        if not request.is_authenticated():
            return django.http.HttpResponseForbidden()
        return super(...)

class EditPostView(...):

    def dispatch(self, request, *args, **kwargs):
        ...
        if not (
            request.user.is_authenticated() or
            request.user.is_superuser or
            request.user == self.object.author
        ):
            return django.http.HttpResponseForbidden()
        return super(...)

Возможны также варианты с использованием LoginRequiredMixin или декоратора login_required, но сути дела это не меняет.

Ещё надо проверить пермишены в шаблоне, чтобы определить, надо ли показывать кнопку для редактирования записи:

{% if request.user.is_authenticated or request.user.is_superuser or request.user == post.author %}
  <a href="...">Edit</a>
{% endif %}

Допустим, что мы захотели добавить новую фичу: в первый день каждого месяца дать возможность всем пользователям (даже анонимным) редактировать любую запись в блоге. Для этого надо просто добавить одну строку во вьюху, так?

if not (
    datetime.date.today().day == 1 or
    request.user.is_authenticated() or
    request.user.is_superuser or
    request.user == self.object.author
):
    ...

Добавили, всё классно. А потом приходит багрепорт, что кнопка редактирования не отображается в первый день месяца как положено, потому что мы забыли обновить шаблон.

Этот пример показывает существенный изъян такого подхода: у нас есть один и тот же набор правил, который надо поддерживать актуальным как минимум в двух местах. А если эти правила будут более сложными, то реализовать их в шаблонах может быть просто невозможно.

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

Специально для этого есть отличная библиотека rules.

Перепишем наш пример с использованием этой библиотеки. Сначала надо задекларировать наш набор правил:

# apps/blog/rules.py
from __future__ import absolute_import
import rules
import datetime

@rules.predicate
def is_first_day_in_month():
    return datetime.date.today().day == 1

@rules.predicate
def is_author(user, obj):
    return obj.author == user

rules.add_perm("blog.add_post", rules.is_authenticated)
rules.add_perm("blog.edit_post", is_first_day_in_month | rules.is_superuser | is_author)

потом подправить вьюхи:

# apps/blog/views.py
from rules.contrib.views import PermissionRequiredMixin


class AddPostView(PermissionRequiredMixin, ...):

    permission_required = "blog.add_post"


class AddPostView(PermissionRequiredMixin, ...):

    permission_required = "blog.edit_post"

и шаблон:

{% load rules %}
{% has_perm "blog.edit_post" request.user post as can_edit %}
{% if can_edit %}
  <a href="...">Edit</a>
{% endif %}

Чтобы всё это заработало, надо добавить rules в INSTALLED_APPS и rules.permissions.ObjectPermissionBackend в AUTHENTICATION_BACKENDS.

В заключение хочу добавить, что в моём текущем проекте мы не используем именованные пермишены типа blog.edit_post. Вместо этого мы определяем ещё один предикат:

can_edit_post = is_first_day_in_month | rules.is_superuser | is_author

и напрямую вызываем его там, где надо проверить пермишен:

if can_edit_post(user, post):
    ...

Опубликовано March 17, 2018

andreyfedoseev.ru

Что такое Django Framework и для чего он применяется » Блог. ArtKiev Design Studio

Сравнительно недавно программистам был представлен фреймворк Django, который использует язык программирования Python как основу. Рассказывать вам о всех преимуществах разработки сайта на данном языке нет смысла т.к. те, кто обладает знаниями питона прекрасно понимают это. Django Framework использует концепцию MVC(Model-View-Controller), что позволяет достичь высокой скорости написания кода и эффективности его работы и качественной отладке приложения.Разделяя проект на 3 части, а именно описание базы данных, внешний вид и логику работы, Django Framework становится легким в понимании каждому, даже начинающему разработчику.

Код написанный на языке Python сравнительно легок в понимании, особенно если у вас есть опыт программирования на таких языках как PHP, JavaScript и прочие.

Приведем пример кода, используемого в Django Framework, который вызывается из шаблона и позволяет заменить все пробелы в строке на знак +:

def shripf_plus(self):
return self.shrift.replace(' ','+')

Django Framework является полностью Объектно Ориентированным, поэтому работать с ним намного приятнее (конечно для тех кто любит ООП).

В качестве модулей сайта, например, статей или новостей, Django использует специально настроенные программистом приложения, которые заточены под какие-либо нужды.

Простейшее приложение в Django состоит, как минимум из 2 файлов, а именно:
__init__.py — проще говоря, это очень важный файл, который нужен для того, что бы Python рассматривал директорию, где лежит этот файл, как приложение
views.py — логика приложения.

Как правило, файл views.py содержит в себе набор функций, которые может вызывать Django в процессе обращения к приложению.

Например нам нужно создать сайт компании, которая занимается разработкой сайтов. Создадим файл site.py (файл может иметь абсолютно любое имя) и впишем в него простейшую функцию, которая отвечает за вывод шаблона главной страницы:

def mainpage(request):

return render_to_response('mainpage.html',{}, context_instance = RequestContext(request),)

В случае, если приложение подразумевает работу с базой данных, то добавляется еще один файл — models.py

С каждым днем в мире появляются все новые Django программисты! Эта система развивается, поэтому все чаще привлекает внимание профессиональных программистов.

К главным преимуществам Django Framework относится скорость создания, как легких, так и сложных проектов!

Django для того и создавался, что бы можно было разрабатывать качественные, защищенные и оптимизированные сайты в кратчайшие сроки. 😉

artkiev.com

Как это снято: «Джанго освобожденный»

Практика 
  • Продажа
    • Видео
      • Ручные камкордеры
      • Наплечные камкордеры
      • Кинокамеры
      • Студийные камеры
      • Все видео
    • Звук
      • Микрофоны и радиосистемы
      • Микшерные пульты
      • Рекордеры и плееры
      • Наушники и гарнитуры
      • Все звук
    • Свет
      • Постоянный видео-свет
      • Постоянный и импульсный фото-свет
      • Накамерные светильники
      • Отражатели и рассеиватели
      • Все свет
    • Штативы и системы стабилизации
      • Фотоштативы
      • Штативные головки для фотоаппаратов
      • Системы стабилизации
      • Моноподы
      • Все штативы и системы стабилизации
    • Операторское оборудование
      • Краны и тележки
      • Компендиумы для камкордеров
      • Слайдеры
      • Риг
      • Все операторское оборудование
    • Видеомонтаж
    • Радиовещание
    • Источники питания, аккумуляторы и зарядные устройства
    • Передача видео по IP сетям
    • Измерительное оборудование
    • Коммутационно-распределительное оборудование
    • Кабели и разъемы
    • Генераторы спецэффектов
    • Аксессуары для мобильных устройств
    • Чистящие средства
  • Аренда
    • Аудио
      • Микрофоны
      • Рекордеры/плееры
      • Микшерные пульты
      • Все аудио
    • Видео
      • Видеокамеры и камкордеры
      • Операторское оборудование
      • Объективы
      • Все видео
    • Осветительное оборудование
      • Направленные светильники
      • Заполняющие светильники
      • Гелиосферы
      • Все осветительное оборудование
    • Фотоаппараты
    • Проекционное оборудование
      • Проекторы
      • Экраны
      • Светодиодные экраны
      • Все проекционное оборудование
    • IT оборудование
      • Системы захвата и оцифровки видеоматериала (ingest)
      • Все it оборудование
    • Системы служебной связи
    • Генераторы
    • Автомобили для съемок
    • Генераторы эффектов
    • Камеры 360 градусов
  • Конструктор
  • Статьи
  • Новости
  • События
  • Вход
  • Регистрация
  • Вход

tvkinoradio.ru

django — Django South: Как создать правила для настраиваемого поля?

Я создал настраиваемое поле «Private FileField». Я не могу заставить его работать с джанго-югом.

Мое понимание правил Южного поля основано на http://south.aeracode.org/docs/tutorial/part4.html#tutorial-part-4 и http://south.aeracode.org/docs/customfields.html

Соответствующие фрагменты:

class FileField(models.CharField):
    __metaclass__ = models.SubfieldBase

    def __init__(self, *args, **kwargs):
        if not 'upload_to' in kwargs:
            raise Exception("%s expects one keyword arg 'upload_to'" % (self.__class__))
        self.upload_to = kwargs['upload_to']
        del kwargs['upload_to']
        kwargs['max_length'] = 255
        super(FileField, self).__init__(*args, **kwargs)

и

rules = [
  (
    (FileField,),
    [],
    {
        "upload_to": ["upload_to", {}],
    },
  )
]

from south.modelsinspector import add_introspection_rules
add_introspection_rules(rules, ["^private_filefield\."])

Запуск управляющего файла. my_app_name —auto не удалось выполнить следующее сообщение:

Exception: <class 'private_filefield.fields.FileField'> expects one keyword arg 'upload_to'

(это происходит, когда вызывается сайт-пакеты/юг/orm.py «, строка 46, в FakeORM)

Полный код можно найти на: http://bitbucket.org/vanschelven/django_private_filefield/src/tip/private_filefield/fields.py

=== Изменить: текст ниже добавлен ===

Это соответствующий раздел сгенерированного раздела «модели» автоматически сгенерированной миграции:

    'mailfile.mailfile': {
        'Meta': {'object_name': 'MailFile'},
        'creation_date': ('django.db.models.fields.DateField', [], {'auto_now_add': 'True', 'blank': 'True'}),
        'expires_on': ('django.db.models.fields.DateField', [], {'default': 'datetime.date(2010, 7, 16)'}),
        'file': ('private_filefield.fields.FileField', [], {'max_length': '255'}),
        'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
        'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}),
        'secret': ('django.db.models.fields.CharField', [], {'max_length': '40'})
    }

Обратите внимание на отсутствие «upload_to» в качестве параметра в «файл».

qaru.site

Добавить комментарий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Рубрики

  • Активити
  • Активити игры
  • Бэнг
  • Диксит
  • Каркассон
  • Клуэдо
  • Колонизаторы
  • Манчкин
  • Разное
  • Свинтус
  • Секреты побед
  • Шакал
  • Шакал -правила игры
  • Эволюция
  • Эволюция — секреты игры
2019 © Все права защищены. Карта сайта