SlideShare a Scribd company logo
1 of 29
Създаване на уеб приложения с Catalyst и Perl Свилен Иванов (svilen@netclime.com)
Какво ще Ви представя днес? ,[object Object],[object Object],[object Object]
Какво е Rose::DB::Object? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Какво е Rose::DB::Object? ,[object Object],[object Object],[object Object],[object Object],[object Object]
Какво е Rose::DB::Object? ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
MyBlog – Структура на базата данни
MyBlog - Конфигуриране ,[object Object],package MyBlog::Model::DB; use base (Rose::DB); __PACKAGE__->register_db( domain  => 'development', type  => 'testing', driver  => 'mysql', database => 'test', host  => 'localhost', username => 'root', password => '', server_time_zone => 'UTC', ); __PACKAGE__->default_domain('development'); __PACKAGE__->default_type('testing');
MyBlog - Конфигуриране ,[object Object],[object Object],package MyBlog::Model::Base; use base (Rose::DB::Object); use MyBlog::Model::DB; sub init_db { MyBlog::Model::DB->new }  package MyBlog::Model::Posting; use base (MyBlog::Model::Base); __PACKAGE__->meta->table('postings'); __PACKAGE__->meta->auto_initialize; __PACKAGE__->meta->make_manager_class('postings');
MyBlog - добавяне на тема ,[object Object],use MyBlog::Model::Posting; use DateTime; my $posting = MyBlog::Model::Posting->new(); $posting->title('Linux-BG conference!'); $posting->date(DateTime->now); $posting->save(); mysql> select * from postings *************************** 1. row ******************* id: 1 date: 2006-04-11 20:59:54 title: Linux-BG conference!
MyBlog – добавяне на коментар my $posting = MyBlog::Model::Posting->new(); $posting->title('Linux-BG conference!'); my $comment = MyBlog::Model::Comment->new(); $comment->email('mlekonadoi@tkzs.org'); $comment->content('I liked it'); $posting->add_comments($comment); $posting->save(); ,[object Object],[object Object],package MyBlog::Model::Comment; use base (MyBlog::Model::Base); __PACKAGE__->meta->table('comments'); __PACKAGE__->meta->auto_initialize;
MyBlog – добавяне на коментар mysql> select * from postings *************************** 1. row ************* id: 1 date: NULL title: Linux-BG conference! content: 1 row in set (0.01 sec) mysql> select * from comments *************************** 1. row *********** id: 1 post_id: 1 date: NULL email: mlekonadoi@tkzs.org content: I liked it 1 row in set (0.00 sec)
MyBlog – Списък на всички теми my $postings = MyBlog::Model::Posting::Manager-> get_postings( with_objects => 'comments', sort_by => 'date DESC', query => [ date => { gt => '2006-03-11' }, ]); foreach my $posting (@{$postings}) { print $posting->title; foreach my $comment ($posting->comments) { print $comment->content; } } ,[object Object]
Нека да направим този модел като уеб приложение!
Какво е Catalyst  ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Catalyst – Възможности ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Дефиниране на действия (actions) ,[object Object],[object Object],[object Object],[object Object],package MyApp::C::Foo; sub hello :Local { my ($self, $c) = @_; $c->res->body("Hello world!"); } # Answers /foo/hello
Още действия (за напреднали) package MyApp::C::Foo;   sub login : Global {  # /login sub one : Path("foo") {  # /foo/foo sub two : Path("/bar") {  # /bar sub three : Path {  # /foo/* # Съвпаденията на RE са достъпни в $c->snippets sub foo :Regex("/foo/(.*)/bar") { # /foo/baz/(.*)/quux sub bar :LocalRegex("baz/(.*)/quux") { ,[object Object]
Верига на изпълнение ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
MyBlog като Catalyst приложение $ cpan Catalyst ... $ catalyst.pl MyBlog ... $ cd MyBlog $ script/myblog_server.pl -r ... [Thu Apr 13 23:58:20 2006] [catalyst] [info] MyBlog powered by Catalyst 5.66 You can connect to your server at http://pink:3000
 
MyBlog като Catalyst приложение ,[object Object],[object Object],$ script/myblog_create.pl controller MyBlog lib/MyBlog/Controller/MyBlog.pm sub list : Local { my ( $self, $c ) = @_; $c->stash->{postings} = MyBlog::Model::Posting::Manager->get_postings( with_objects => 'comments', sort_by => 'date DESC'); }
MyBlog като Catalyst приложение ,[object Object],[object Object],[object Object],$ script/myblog_create.pl view TT TT sub default : Private { my ( $self, $c ) = @_; $c->forward('list'); }  sub end : Private { my ( $self, $c ) = @_; $c->stash->{template} = 'blog.tt'; $c->forward('TT'); }
 
Какво стана? ,[object Object],[% FOREACH posting = c.stash.postings() %] <div class=&quot;posting&quot;> <h1> [% posting.title() | html %]</h1> [% posting.content() | html %] <div class=&quot;comment&quot;> [% FOREACH comment = posting.comments() %] [% comment.date() %] [% comment.email() %] [% comment.content() %] [% END %] </div> </div> [% END %]
 
Да добавим коментари ,[object Object],sub add_comment : Local { my ( $self, $c ) = @_; MyBlog::Model::Comment->new( 'email'  => $c->req->param('comment_email'), 'post_id' => $c->req->param('post_id'), 'content' => $c->req->param('comment_content'), 'date'  => DateTime->now() )->save(); $c->res->redirect('list'); }
Да добавим коментари ,[object Object],<form method=&quot;POST&quot;  action=&quot;[% c.uri_for('add_comment') %]&quot;> <input type=&quot;hidden&quot; name=&quot;post_id&quot; value=&quot;[% posting.id() %]&quot;> <input type=&quot;text&quot; name=&quot;comment_email&quot;> <textarea name=&quot;comment_content&quot;></textarea> <input type=&quot;Submit&quot; value=&quot;Add Comment&quot;> </form>
 
Заключение ,[object Object],[object Object],[object Object]

More Related Content

Similar to Web applications with Catalyst BG

ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиsvilen.ivanov
 
OnPage SEO
OnPage SEOOnPage SEO
OnPage SEONetpeak
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11DAVID Academy
 
AJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузърAJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузърsvilen.ivanov
 
Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)
Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)
Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)Netpeak
 

Similar to Web applications with Catalyst BG (20)

ИнтеRESTни уеб услуги
ИнтеRESTни уеб услугиИнтеRESTни уеб услуги
ИнтеRESTни уеб услуги
 
Php sec
Php secPhp sec
Php sec
 
B3 t3 cookies
B3 t3 cookiesB3 t3 cookies
B3 t3 cookies
 
B3 t3 cookies
B3 t3 cookiesB3 t3 cookies
B3 t3 cookies
 
JavaScipt and AJAX Programming
JavaScipt and AJAX ProgrammingJavaScipt and AJAX Programming
JavaScipt and AJAX Programming
 
Web Programming with JavaScript and Ajax
Web Programming with JavaScript and AjaxWeb Programming with JavaScript and Ajax
Web Programming with JavaScript and Ajax
 
Anti SQLi
Anti SQLiAnti SQLi
Anti SQLi
 
Drupal7
Drupal7Drupal7
Drupal7
 
B1 t1 php_basics
B1 t1 php_basicsB1 t1 php_basics
B1 t1 php_basics
 
B1 t1 php_basics
B1 t1 php_basicsB1 t1 php_basics
B1 t1 php_basics
 
OnPage SEO
OnPage SEOOnPage SEO
OnPage SEO
 
OnPage SEO
OnPage SEOOnPage SEO
OnPage SEO
 
Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11Училищен курс по програмиране на C# (2013/2014), занятие №11
Училищен курс по програмиране на C# (2013/2014), занятие №11
 
Microdata
MicrodataMicrodata
Microdata
 
AJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузърAJAX и създаване на богати потребителски интерфейси в браузър
AJAX и създаване на богати потребителски интерфейси в браузър
 
Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)
Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)
Оптимизация на Crawling бюджет (Indit Black Hat Conference 2017)
 
C++ OpenFest 2015
C++ OpenFest 2015C++ OpenFest 2015
C++ OpenFest 2015
 
B7 t7 arrays
B7 t7 arraysB7 t7 arrays
B7 t7 arrays
 
B7 t7 arrays
B7 t7 arraysB7 t7 arrays
B7 t7 arrays
 
Wordcamp2011
Wordcamp2011Wordcamp2011
Wordcamp2011
 

More from svilen.ivanov

Redis - BlagoevgradConf 2013
Redis - BlagoevgradConf 2013Redis - BlagoevgradConf 2013
Redis - BlagoevgradConf 2013svilen.ivanov
 
Безмилостно тестване на уеб приложения със Selenium
Безмилостно тестване на уеб приложения със SeleniumБезмилостно тестване на уеб приложения със Selenium
Безмилостно тестване на уеб приложения със Seleniumsvilen.ivanov
 
Web applications with Catalyst
Web applications with CatalystWeb applications with Catalyst
Web applications with Catalystsvilen.ivanov
 
The Art Of Debugging
The Art Of DebuggingThe Art Of Debugging
The Art Of Debuggingsvilen.ivanov
 
Writting Better Software
Writting Better SoftwareWritting Better Software
Writting Better Softwaresvilen.ivanov
 
Автоматизирано функционално тестване на уеб приложения със Selenium
Автоматизирано функционално тестване на уеб приложения със SeleniumАвтоматизирано функционално тестване на уеб приложения със Selenium
Автоматизирано функционално тестване на уеб приложения със Seleniumsvilen.ivanov
 

More from svilen.ivanov (7)

Redis - BlagoevgradConf 2013
Redis - BlagoevgradConf 2013Redis - BlagoevgradConf 2013
Redis - BlagoevgradConf 2013
 
Безмилостно тестване на уеб приложения със Selenium
Безмилостно тестване на уеб приложения със SeleniumБезмилостно тестване на уеб приложения със Selenium
Безмилостно тестване на уеб приложения със Selenium
 
Web applications with Catalyst
Web applications with CatalystWeb applications with Catalyst
Web applications with Catalyst
 
The Art Of Debugging
The Art Of DebuggingThe Art Of Debugging
The Art Of Debugging
 
Xen virtualization
Xen virtualizationXen virtualization
Xen virtualization
 
Writting Better Software
Writting Better SoftwareWritting Better Software
Writting Better Software
 
Автоматизирано функционално тестване на уеб приложения със Selenium
Автоматизирано функционално тестване на уеб приложения със SeleniumАвтоматизирано функционално тестване на уеб приложения със Selenium
Автоматизирано функционално тестване на уеб приложения със Selenium
 

Web applications with Catalyst BG

  • 1. Създаване на уеб приложения с Catalyst и Perl Свилен Иванов (svilen@netclime.com)
  • 2.
  • 3.
  • 4.
  • 5.
  • 6. MyBlog – Структура на базата данни
  • 7.
  • 8.
  • 9.
  • 10.
  • 11. MyBlog – добавяне на коментар mysql> select * from postings *************************** 1. row ************* id: 1 date: NULL title: Linux-BG conference! content: 1 row in set (0.01 sec) mysql> select * from comments *************************** 1. row *********** id: 1 post_id: 1 date: NULL email: mlekonadoi@tkzs.org content: I liked it 1 row in set (0.00 sec)
  • 12.
  • 13. Нека да направим този модел като уеб приложение!
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19. MyBlog като Catalyst приложение $ cpan Catalyst ... $ catalyst.pl MyBlog ... $ cd MyBlog $ script/myblog_server.pl -r ... [Thu Apr 13 23:58:20 2006] [catalyst] [info] MyBlog powered by Catalyst 5.66 You can connect to your server at http://pink:3000
  • 20.  
  • 21.
  • 22.
  • 23.  
  • 24.
  • 25.  
  • 26.
  • 27.
  • 28.  
  • 29.