PHP форум на ПЫХА.РУ

PHP форум на ПЫХА.РУ

Языки программирования => Django => Тема начата: adw0rd от 14 Ноябрь, 2009, 02:24:55



Название: Django. ManyToMany
Отправлено: adw0rd от 14 Ноябрь, 2009, 02:24:55
Про связи в таблицах ManyToMany:
 
Например у нас есть приложение блог:
Python

 
class Post(models.Model):
    title = model.CharField(max_length=100)
    body = model.TextFileld()
 
class Tag(models.Model):
    title = model.CharField(max_length=30)
    url = model.CharField(max_length=10)
    post = model.ManyToManyField(Post)
 
 
На базе этой модели - вы можете сгененировать структуру БД и админку.
 
А во вьхе вот так выбираем все записи с определенным тегом:
Python

def showPostByTag(self, url):
    try:
        posts = Post.objects.filter(tag__url=url)
    except Post.DoesNotExist:
        raise Http404
    return render_to_response('list.html', {"posts":  posts})
 

Ну а дальше остается только шаблоны наклепать и все... Увас теперь есть блог :)
Спустя 1 минуту 24 секунды добавил

django дарит много вкусностей, не надо по 100 раз писать одно и тоже, объявил какие данные должны быть в модели,
далее структура БД сама сбилдится (можешь сам конечно это сделать ручками, никто не запретит),
потом можешь сгенерировать админку сразу (тоже на свое усмотрение, можешь и свою накидать, как тебе нравится...),
после можешь запросить у модели - форму, в соответствии с типами данных она соберет тебе html-форму, а фильтры дадут возможно отфильтровать что необходимо и т.д.
adw0rd, по большому счету почти все эти "вкусности" может подарить любой нормальный пхп фреймворк
1. Из нормальных - все уг, назови те, которые могут составлять конкуренцию
2. Нормальный фреймворк бы получился, если бы язык был тоже нормальным


Название: Django. ManyToMany
Отправлено: NRG от 13 Ноябрь, 2009, 04:31:34
adw0rd, ты реально написал функционал который есть в симфони.
я уверен что в других фреймворках он тоже есть...
 
точно так же в симфони описывается схема, на основании которой и админка генерится и формы....
просто там это не в самом коде пхп , а вотдельных файлах типа schema.yml  .     ну и естессно там синтакс YAML


Название: Django. ManyToMany
Отправлено: adw0rd от 13 Ноябрь, 2009, 04:42:23

adw0rd, ты реально написал функционал который есть в симфони.
я уверен что в других фреймворках он тоже есть...
 
точно так же в симфони описывается схема, на основании которой и админка генерится и формы....
просто там это не в самом коде пхп , а вотдельных файлах типа schema.yml  .     ну и естессно там синтакс YAML
А зачем там YML? Думаю из-за скудности самого PHP?
Спустя 1 минуту 2 секунды добавил
http://larin.in/archives/59
Спустя 4 минуты 13 секунд добавил
http://www.alrond.com/ru/2007/jan/25/rezultaty-testirovanija-6-frameworks/
Спустя 3 минуты 53 секунды добавил

народ конечно же жаждит
надо бы его для начала установить )))
а что там ставить то?
cd /usr/ports/lang/python
make install clean


Название: Django. ManyToMany
Отправлено: NRG от 13 Ноябрь, 2009, 04:48:54
А зачем там YML? Думаю из-за скудности самого PHP?
не говори глупости.
ямл туда впиздячили не по техническим причинам, хотя можно было смело и без него.
 

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


Название: Django. ManyToMany
Отправлено: adw0rd от 13 Ноябрь, 2009, 04:51:46
ясно, спорить не буду
Спустя 1 минуту 56 секунд добавил
NRG, не, немогу молчать... объясни мне зачем там ямл, если можно было сделать сразу в классах модели?
или покажи мне тоже самое приложение, но на симфони (шаблоны блога можешь не показывать)


Название: Django. ManyToMany
Отправлено: md5 от 13 Ноябрь, 2009, 04:56:51


народ конечно же жаждит
надо бы его для начала установить )))
а что там ставить то?
cd /usr/ports/lang/python
make install clean
ты меня еще поучи )))
я же сверхъестественный супер специалист по фрибздэ


Название: Django. ManyToMany
Отправлено: adw0rd от 13 Ноябрь, 2009, 04:59:50
md5, ну вот я и испугался ) думал тебя тоже поломали )


Название: Django. ManyToMany
Отправлено: md5 от 13 Ноябрь, 2009, 05:01:17

md5, ну вот я и испугался ) думал тебя тоже поломали )
всмысле тоже? кого поломали? )


Название: Django. ManyToMany
Отправлено: adw0rd от 13 Ноябрь, 2009, 05:04:09
md5, да это просто такое выражение )


Название: Django. ManyToMany
Отправлено: NRG от 13 Ноябрь, 2009, 05:16:52
NRG, не, немогу молчать... объясни мне зачем там ямл, если можно было сделать сразу в классах модели?
adw0rd, я же говорю, можно было смело без него.
 
или покажи мне тоже самое приложение, но на симфони (шаблоны блога можешь не показывать)
сори, но не покажу, так как проектов на симфони у меня сейчас нету, а к тем которые я делал нету доступа.
 
Там в ихней доке(симфони) кажется были примеры какието, где описывается эта шняга...
 
и я не говорю что питон или джанга хуйня, наоброт очень хорошие вещи.
просто фразы типа:
-скудность пхп
-нормальные вещи пишутся только на нормальных языках
-все уг
 
как-то меня выводят и заставляют грубо на них отвечать.
отвечать я тебе грубо не хочу, так как вместе прожили на этом форуме не один год.
 
просто такая реакция у многих кто переходит на другую техноголоию.
типа : "у меня полный рот адуванчиков, а вы все лохи сидите и ебитесь на свое недодроченом пехапе.."
 
адворд, не становись таким =)


Название: Django. ManyToMany
Отправлено: adw0rd от 13 Ноябрь, 2009, 05:23:11
сори, но не покажу, так как проектов на симфони у меня сейчас нету, а к тем которые я делал нету доступа.
у меня тоже нет проекта блога на джанге, я его составил прямо сейчас, набивая пост.... раз ты говоришь что симфони тоже очень удобен - то покажи это так, как сделал я
Спустя 55 секунд добавил
как-то меня выводят и заставляют грубо на них отвечать.
отвечать я тебе грубо не хочу, так как вместе прожили на этом форуме не один год.
Спустя 2 минуты 12 секунд добавил
просто такая реакция у многих кто переходит на другую техноголоию.
типа : "у меня полный рот адуванчиков, а вы все лохи сидите и ебитесь на свое недодроченом пехапе.."
 
адворд, не становись таким =)
честное слово, полгода назад я тоже воспринимал это как и ты, когда говорили "хахаха, пхп это вообще пиздец и недоязык" - то я тоже возмущался, а потом попробовал пайтон и понял что по сути они отчасти правы....
 
пиэйчпи это конечно язык, которому не один год, однако в нем концепции заложенные не удовлетворяют текущим тенденциям уже как пару лет
он действительно недоязык, к сожалению
 


Название: Django. ManyToMany
Отправлено: NRG от 13 Ноябрь, 2009, 05:23:42
у меня тоже нет проекта блога на джанге, я его составил прямо сейчас, набивая пост.... раз ты говоришь что симфони тоже очень удобен - то покажи это так, как сделал я
ок, но только на досуге, а то я щас на работе и времени на это тут нету   =)


Название: Django. ManyToMany
Отправлено: md5 от 13 Ноябрь, 2009, 05:25:07
ну да, ссыкло, а изпиздеть весь форум флудом у него время есть ))
получил хуй — не уворачивайся!


Название: Django. ManyToMany
Отправлено: adw0rd от 13 Ноябрь, 2009, 05:26:37
Я сам продолжаю программировать на PHP, делаю движок для сателитов-магазинов, то есть морда на PHP и их очень много и ее ставят "сеошники" и прочие недопрограммисты
А на пайтоне реализовываю центральную часть приложения (бекенд), который рассылает апдейты для продукции


Название: Django. ManyToMany
Отправлено: NRG от 13 Ноябрь, 2009, 05:28:42

ну да, ссыкло, а изпиздеть весь форум флудом у него время есть ))
получил хуй — не уворачивайся!
ладно, давай сюда хуй   =)


Название: Django. ManyToMany
Отправлено: md5 от 13 Ноябрь, 2009, 05:40:26
8===========================================э


Название: Django. ManyToMany
Отправлено: Sinkler от 14 Ноябрь, 2009, 12:12:07


лично мне переход на питон пока не светит
я в гуглах не работаю и для личных сайтов не нужен
я в гуглах тоже не работаю, но если честно, то на python/django проще программировать, синтаксис более читабелен, голова меньше болит (по себе знаю) и меньше времени тратиться на разработку любого проекта
 
django дарит много вкусностей, не надо по 100 раз писать одно и тоже, объявил какие данные должны быть в модели,
далее структура БД сама сбилдится (можешь сам конечно это сделать ручками, никто не запретит),
потом можешь сгенерировать админку сразу (тоже на свое усмотрение, можешь и свою накидать, как тебе нравится...),
после можешь запросить у модели - форму, в соответствии с типами данных она соберет тебе html-форму, а фильтры дадут возможно отфильтровать что необходимо и т.д.
Спустя 1 минуту 23 секунды добавил
Блин надо десяток статей по этой теме накидать будет.... Народ чувствую жаждит и его терзают вопросы и сомнения )

напомнило мне кейк, только там БД не генерится, а, наоборот, от неё все пляшет...


Название: Django. ManyToMany
Отправлено: adw0rd от 14 Ноябрь, 2009, 12:23:05
phpdude, покажи пример, интересно, может идею какую заюзаю для panjo
Sinkler, покажи пример такого же приложения на CakePHP


Название: Django. ManyToMany
Отправлено: Sinkler от 14 Ноябрь, 2009, 12:28:11
adw0rd, у меня есть недоделанный блог с наспехусверстанномговнокодом
Спустя 14 секунд добавил
блог в офлайне
Спустя 3 минуты 8 секунд добавил

Немного про принт в пайтоне:
Python

print 'a'
# 'a'
 
print 'a', 'b'
# 'a b\n'
 
print 'a', 'b',
# 'a b'

это типа если есть запятая, то \n не прописывается, а если нету, то прописывается?


Название: Django. ManyToMany
Отправлено: phpdude от 14 Ноябрь, 2009, 12:40:02

phpdude, покажи пример, интересно, может идею какую заюзаю для panjo
Sinkler, покажи пример такого же приложения на CakePHP
ну там тоже конструкторы форм по объекту, очень схожая реалити, только там еще групповые политики на аминистраторов распределяются к примеру и можно админу запретить выполнять например редактирование обэекта, но разрешить создание и удаление =)))
 
ну или например редактироват можно, но нельзя смотреть список )))
 
в общем веселая вещица)


Название: Django. ManyToMany
Отправлено: Sinkler от 14 Ноябрь, 2009, 12:41:27
да, списки контроля доступа, вроде acl называется... ни разу не использовал =)


Название: Django. ManyToMany
Отправлено: adw0rd от 14 Ноябрь, 2009, 12:53:04
phpdude, Sinkler, да, это охуенно, так примеры будут?
Спустя 47 секунд добавил
это типа если есть запятая, то \n не прописывается, а если нету, то прописывается?
Да, но все это ты сможешь сам переопределить, если захочешь... меня например это устраивает


Название: Django. ManyToMany
Отправлено: Sinkler от 14 Ноябрь, 2009, 01:14:12
краткий мануал о списках контроля доступа (для старой версии 1.1, в 1.2 практически то же самое). на мой взгляд, это самое сложное в кейке.


Название: Django. ManyToMany
Отправлено: adw0rd от 14 Ноябрь, 2009, 02:24:18
Мне примеры вот такого приложения на ваших предложенных фреймворках:
 

Про связи в таблицах ManyToMany:
 
Например у нас есть приложение блог:
Python

 
class Post(models.Model):
    title = model.CharField(max_length=100)
    body = model.TextFileld()
 
class Tag(models.Model):
    title = model.CharField(max_length=30)
    url = model.CharField(max_length=10)
    post = model.ManyToManyField(Post)
 
 
На базе этой модели - вы можете сгененировать структуру БД и админку.
 
А во вьхе вот так выбираем все записи с определенным тегом:
Python

def showPostByTag(self, url):
    try:
        posts = Post.objects.filter(tag__url=url)
    except Post.DoesNotExist:
        raise Http404
    return render_to_response('list.html', {"posts":  posts})
 

Ну а дальше остается только шаблоны наклепать и все... Увас теперь есть блог :)

Мне просто интересно посмотреть, ибо я сам реализовываю на PHP фреймворк похожий на Django


Название: Django. ManyToMany
Отправлено: Sinkler от 14 Ноябрь, 2009, 01:52:36
Пример для кейка со связью hasAndBelongsToMany (или ManyToMany, как у эдво).
 
Есть блог. Так как все пляшет от базы данных, то сделаем три таблицы. Для постов, для тегов и дополнительную для связи постов с тегами.
 
SQL
--
-- Table structure for table `posts`
--
 
CREATE TABLE `posts` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `user_id` int(10) DEFAULT NULL,
  `title` varchar(50) DEFAULT NULL,
  `body` text,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  `status` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;
 
-- --------------------------------------------------------
 
--
-- Table structure for table `posts_tags`
--
 
CREATE TABLE `posts_tags` (
  `post_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  `tag_id` int(10) UNSIGNED NOT NULL DEFAULT '0',
  PRIMARY KEY  (`post_id`,`tag_id`)
) TYPE=MyISAM;
 
-- --------------------------------------------------------
 
--
-- Table structure for table `tags`
--
 
CREATE TABLE `tags` (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `tag` varchar(100) DEFAULT NULL,
  PRIMARY KEY  (`id`)
) TYPE=MyISAM;

Дальше объявим в модели Post ассоциацию с моделью Tag
 
PHP

<?php
class Post extends AppModel
{
    var $name = 'Post';
 
    /* тут филды могут быть. а могут и не быть */
    var $hasAndBelongsToMany = array('Tag' =>
                               array('className'    => 'Tag',
                                     'joinTable'    => 'posts_tags',
                                     'foreignKey'   => 'post_id',
                                     'associationForeignKey'=> 'tag_id',
                                     'conditions'   => '',
                                     'order'        => '',
                                     'limit'        => '',
                                     'unique'       => true,
                                     'finderQuery'  => '',
                                     'deleteQuery'  => '',
                               )
                               );
}
?>

Теперь выполняя find() или findAll() запросы в контролере, используя модель Post, мы должны увидеть также ассоциированную модель Tag:
 
PHP
<?
$post = $this->Post->read(null, '2');
print_r($post);
?>

Text
Array
(
    [Post] => Array
        (
            [id] => 2
            [user_id] => 25
            [title] => Cake Model Associations
            [body] => Time saving, easy, and powerful.
            [created] => 2006-04-15 09:33:24
            [modified] => 2006-04-15 09:33:24
            [status] => 1
        )
 
    [Tag] => Array
        (
            [0] => Array
                (
                    [id] => 247
                    [tag] => CakePHP
                )
 
            [1] => Array
                (
                    [id] => 256
                    [tag] => Powerful Software
                )
        )
)
Спустя 3 минуты 48 секунд добавил
если делать выборку, используя модель Tag, и установить recursive в значение 1, то с тегами будут выбираться так же и посты
Спустя 28 секунд добавил
пример взят из официальной кукбук
Спустя 18 секунд добавил
опять же, старая версия 1.1
Спустя 1 минуту 2 секунды добавил
как-то так
Спустя 12 секунд добавил
=)


Название: Django. ManyToMany
Отправлено: adw0rd от 14 Ноябрь, 2009, 02:06:46
Sinkler, тебе самому не кажется что у меня попроще в разы?)


Название: Django. ManyToMany
Отправлено: Sinkler от 14 Ноябрь, 2009, 02:10:39

Sinkler, тебе самому не кажется что у меня попроще в разы?)
да мне не кажется, я уже давно понял =)
 
кейк вобще тяжел...
 
но до питона не знаю когда доберусь, в ближайших планах в общих чертах джаву изучить и более-менее си шарп


Название: Django. ManyToMany
Отправлено: adw0rd от 14 Ноябрь, 2009, 02:25:33
В продолжение темы ManyToMany для джанги http://habrahabr.ru/blogs/django/74967/


Название: Django. ManyToMany
Отправлено: adw0rd от 14 Ноябрь, 2009, 01:18:50
Причины выбора Django для разработки сайта


Название: Django. ManyToMany
Отправлено: krasun от 14 Ноябрь, 2009, 02:13:45
после Haskell, обязательно попробую python


Название: Django. ManyToMany
Отправлено: adw0rd от 18 Ноябрь, 2009, 08:44:11
1. NRG где пример?
2. NRG где SQL-beautifier?


PHP форум на ПЫХА.РУ