Нет необходимости в переопределениях или настройках. DRF обрабатывает это автоматически. Взгляните на метод to_representation
из FileField
:
def to_representation(self, value):
if not value:
return None
use_url = getattr(self, 'use_url', api_settings.UPLOADED_FILES_USE_URL)
if use_url:
if not getattr(value, 'url', None):
# If the file has not been saved it may not have a URL.
return None
url = value.url
request = self.context.get('request', None)
if request is not None:
return request.build_absolute_uri(url)
return url
return value.name
Обратите внимание, что он не будет работать, если контекст сериализатора не установлен должным образом. Если вы используете ViewSet
, не беспокойтесь, все делается тихо, но если вы создаете экземпляр сериализатора вручную, вы должны передать запрос в контексте.
context = {'request': request}
serializer = ExampleSerializer(instance, context=context)
return Response(serializer.data)
https://www.django-rest-framework.org/community/3.0-announcement/#file-fields-as-urls
IBM опубликовала здесь статью об обеих этих средах вместе с Zend для сравнения, см .:
http://www.ibm.com/developerworks/opensource/library/os-php -fwk1 /? S_TACT = 105AGX44 & S_CMP = ART
Я лично использую CakePHP, это довольно круто по сравнению с простым PHP. Легко встраивать, очень ориентирован на MVC, разумная интеграция со сторонними компонентами. Однако у меня были некоторые проблемы с отсутствием какого-либо заметного пути обновления между версиями. Я не могу говорить от имени Symfony, но я считаю, что он более тяжелый, чем CakePHP.
Взгляните также на скринкасты для CakePHP, они дают хороший обзор:
Я рекомендую прочитать правильный ответ на этот вопрос . В нем упоминается Zend Framework как лучший выбор и приводятся некоторые правильные аргументы в его обоснование.
Я хотел бы опровергнуть некоторые из приведенных выше аргументов. Я много работал с Zend Framework и symfony, и я кратко ознакомился с CakePHP.
Прежде всего, по сравнению с symfony, документация ZF не «обширна» - с другой стороны, она довольно поверхностна. Во-вторых, я думаю, что сообщество Symfony намного более доступно и полезно, чем структура ZF в целом, и процесс разработки намного более прозрачен.
Однако я согласен с тем, что Zend Framework пользуется преимуществом поддержки Zend, что может быть весомым аргументом для корпоративных проектов.
По моему опыту, Symfony - это скорее фреймворк. чем ZF. В symfony вы используете весь пакет - или весь фрейм, в то время как в ZF вы можете использовать инструменты по своему вкусу, делая его больше похожим на «набор инструментов», чем на фреймворк.
Также помните, что если вам нравятся некоторые из инструментов в ZF, вы сможете использовать их в проектах symfony (и, возможно, также CakePHP), наряду с symfony / CakePHP.
Это не совсем ответ, а скорее общий комментарий к приведенным выше ответам.
что может быть веским аргументом в пользу корпоративных проектов.По моему опыту, symfony - это больше фреймворк, чем ZF. В symfony вы используете весь пакет - или весь фрейм, в то время как в ZF вы можете использовать инструменты по своему вкусу, делая его больше похожим на «набор инструментов», чем на фреймворк.
Также помните, что если вам нравятся некоторые из инструментов в ZF, вы сможете использовать их в проектах symfony (и, возможно, также CakePHP), наряду с symfony / CakePHP.
Это не совсем ответ, а скорее общий комментарий к приведенным выше ответам.
что может быть веским аргументом в пользу корпоративных проектов.По моему опыту, symfony - это больше фреймворк, чем ZF. В symfony вы используете весь пакет - или весь фрейм, в то время как в ZF вы можете использовать инструменты по своему вкусу, делая его больше похожим на «набор инструментов», чем на фреймворк.
Также помните, что если вам нравятся некоторые из инструментов в ZF, вы сможете использовать их в проектах symfony (и, возможно, также CakePHP), наряду с symfony / CakePHP.
Это не совсем ответ, а скорее общий комментарий к приведенным выше ответам.
Позвольте мне начать с того, что у меня нет опыта работы с CakePHP или Zend, за исключением того, что я просматривал код фреймворка и их документацию. Я начал использовать Symfony около 15 месяцев назад и перед тем, как исследовать, какой фреймворк использовать. Я решил выбрать Symfony, потому что я обнаружил, что ядро Symfony написано красиво и упорядоченно. Мне казалось, что я легко могу понять структуру, прочитав сам код. Кроме того, я нашел огромное количество документации, которая действительно сосредоточена на работе с фреймворком для реализации определенных функций. Очень прагматично так сказать. CakePHP, похоже, не подходит моему личному стилю, и я считал ядро очень хакерским. Опять же, я могу ошибаться, но я так думал об этом в прошлом. После 15 месяцев написания кода на Symfony я все еще очень доволен. Часто вы читаете комментарии или блоги, в которых говорится, что это слишком сложно. Я считаю, что эти люди оскорбляют собственный разум. На самом деле требуется некоторое время, прежде чем вы получите четкое представление о внутреннем устройстве фреймворка и подходах к решению проблем, но как только вы пройдете этот этап, это действительно отличный инструмент. Сообщество очень полезно, и будущее выглядит светлым. В общем, я могу только посоветовать вам действовать интуитивно, когда вы смотрите на подходы, используемые фреймворками, их кодом и стилями кодирования. Вы будете проводить много времени в этих фреймворках, поэтому вы должны чувствовать себя непринужденно, глядя на их код и их решения для общих проблем. Любой фреймворк ужасен, если вы начнете с ним бороться, и если вы будете следовать ему, каждый из них станет отличным инструментом. Некоторые в конце концов могут оказаться лучше, чем другие. Я полагаю, ты'
Вероятно, Zend Framework. Если вам нужно что-то другое, попробуйте codeigniter.com
или это oo-версия на php5 www.kohanaphp.com
Я не использовал другие фреймворки, но использую Zend Framework , и это здорово. преимуществами являются:
У меня был минимальный опыт работы с обоими фреймворками, но все, что я когда-либо слышал о Symfony, - это жалобы (хотя кажется, что она используется очень часто!). Вероятно, просто люди не тратят время на полное изучение фреймворка.
По моему опыту, оба они кажутся достойными фреймворками, но, как любой хороший разработчик, вы должны понимать, по крайней мере, уровень абстракции ниже того, который вы используете, чтобы быть эффективный.
Мои решения по фреймворку сводятся к следующему (обратите внимание, что я в основном использую Cake, маленький Zend и возился с CodeIgniter и symfony).
Zend - самый предприимчивый. У вас есть люди в @ Zend, которые его поддерживают - я думаю, что график разработки - самый надежный шаг вперед. Он также имеет несколько отличных модулей, таких как программы чтения PDF-файлов и т. Д.
CakePHP (IMO) специализируется на быстрой разработке. Но это неизменно одно из худших с точки зрения производительности - если вы собираетесь иметь интенсивно используемое приложение, я думаю, что у Пола М. Джонса есть несколько сообщений о тестах. Zend примерно в 2-2,5 раза быстрее, чем Cake, IIRC. Если у вас нет опыта работы с MVC, Cake может быть хорошим выбором b / c it def. блокирует вас в MVC. Тем не менее, я обнаружил, что мне постоянно нужно мыслить не по их шаблону - вот почему я медленно перехожу к Zend.
У других фреймворков тоже разные сильные стороны. На PHP | Tek в Чикаго о CodeIgniter говорили участники конференции, так что в ближайшие год или два он может получить большой импульс.
Cake и Zend также имеют суперсильную интеграцию с некоторыми другими корпоративными вещами, такими как модульные тесты, и т. д.