SlideShare une entreprise Scribd logo
1  sur  23
Gdy Ember spotka DjangoGdy Ember spotka Django
Ember:
A framework for creating ambitious web applications
Django:
The web framework for perfectionists with deadlines
● Tworzenie dynamicznych aplikacji „na jednej stronie”
● Sposób na uporządkowanie kodu JavaScript aplikacji
Co to jest ember.js?Co to jest ember.js?
A jak to wygląda w praktyce?A jak to wygląda w praktyce?
ModeleModele
class Category(models.Model):
name = models.CharField(unique=True, max_length=100)
slug = models.SlugField(unique=True)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=200)
slug = models.SlugField(unique=True)
text = models.TextField()
category = models.ForeignKey(Category)
posted_date = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title Blog.Category = DS.Model.extend({
name: DS.attr('string'),
slug: DS.attr('string')
});
Blog.Post = DS.Model.extend({
title: DS.attr('string'),
slug: DS.attr('string'),
text: DS.attr('string'),
category: DS.belongsTo('category', {async: true}),
posted_date: DS.attr('date')
});
Routing - URLeRouting - URLe
urlpatterns = patterns(
'blog.views',
url(r'^$', 'home_view', name='posts'),
url(r'^(?P<slug>[w-_]+)/$', 'post_view', name='post'),
)
Blog.Router.map(function() {
this.route('posts');
this.route('post', {path: 'posts/:id'});
});
Generic ViewsGeneric Views
class HomeView(generic.ListView):
def get_queryset(self):
return models.Post.objects.all().order_by('-posted_date')
home_view = HomeView.as_view()
class PostView(generic.DetailView):
model = models.Post
post_view = PostView.as_view()
Blog.PostsRoute = Ember.Route.extend({
model: function() {
return this.get('store').find('post');
}
});
Blog.PostRoute = Ember.Route.extend({
model: function(params) {
return this.get('store').find('post', params.id);
}
});
KontekstKontekst
def get_context_data(self, **kwargs):
context = super().get_context_data()
context['is_python'] = self._get_is_python()
return context
def _get_is_python(self):
return ('python' in self.object.category.name.lower()
or 'python' in self.object.title)
Blog.PostController = Ember.ObjectController.extend({
isPython: function() {
var title = this.get('content.title').toLowerCase();
var category = this.get('content.category.name');
if (category) {
category = category.toLowerCase();
return title.indexOf('python') != -1 || category.indexOf('python') != -1;
}
}.property('content.title', 'content.category.name')
});
SzablonySzablony
{% for post in post_list %}
<h2><a href="{% url 'post' post.slug %}">{{ post.title }}</a></h2>
<blockquote>
{{ post.text|safe }}
<p>{{ post.posted_date|date:"Y.m.d H:i" }}, {{ post.category.name}}</p>
</blockquote>
{% endfor %}
{% verbatim %}
{{#each post in content}}
<h2>{{#link-to "post" post.id}}{{post.title}}{{/link-to}}</h2>
<blockquote>
{{{post.text}}}
<p>{{post.posted_date}}, {{post.category.name}}</p>
</blockquote>
{{/each}}
{% endverbatim %}
Co jeszcze?Co jeszcze?
●
WidokiWidoki – do integracji kodu opartego o
zdarzenia z aplikacją emberową
●
AkcjeAkcje – wysokopoziomowa reprezentacja tych
zdarzeń
●
Różne adapteryRóżne adaptery ember-data
(inne frameworki, języki)
●
Django-javascript-settingsDjango-javascript-settings – przekazywanie
konfiguracji, ścieżek itd.
http://emberjs.com/ember-users/
A gdzie tkwi haczyk?A gdzie tkwi haczyk?
Asynchroniczna aplikacjaAsynchroniczna aplikacja
wykorzystująca bindingiwykorzystująca bindingi
(property) a nie zdarzenia (events)(property) a nie zdarzenia (events)
Learning curveLearning curve
http://bigemployee.com/9-things-you-should-know-before-starting-your-next-ember-js-and-ember-data-application/
Sentry + Raven.JSSentry + Raven.JS
KonkurencjaKonkurencja
KonkurencjaKonkurencja
https://www.airpair.com/js/javascript-framework-comparison
Jak zacząć?Jak zacząć?
●
emberjs.comemberjs.com
●
stackoverflow.comstackoverflow.com
●
github.com/dustinfarris/ember-django-adaptergithub.com/dustinfarris/ember-django-adapter
●
www.youtube.comwww.youtube.com
●
www.python.rk.edu.plwww.python.rk.edu.pl
Pytania?Pytania?

Contenu connexe

En vedette

Mes Rosiers
Mes RosiersMes Rosiers
Mes Rosiers
chlud
 
What Is The Atmosphere
What Is The AtmosphereWhat Is The Atmosphere
What Is The Atmosphere
srenshaw
 
Atoms, Molecules & Stoichometry (III)
Atoms, Molecules & Stoichometry (III)Atoms, Molecules & Stoichometry (III)
Atoms, Molecules & Stoichometry (III)
Bernard Ng
 
Meet On The Street
Meet On The StreetMeet On The Street
Meet On The Street
NL.M.S.R
 
HYPE on presentations
HYPE on presentationsHYPE on presentations
HYPE on presentations
Tom Theys
 
Atomic Structure (IV)
Atomic Structure (IV)Atomic Structure (IV)
Atomic Structure (IV)
Bernard Ng
 
401+Powerpoint[1]
401+Powerpoint[1]401+Powerpoint[1]
401+Powerpoint[1]
adusard
 
Toolkit Workshop [V2]
Toolkit Workshop [V2]Toolkit Workshop [V2]
Toolkit Workshop [V2]
srenshaw
 

En vedette (15)

Mes Rosiers
Mes RosiersMes Rosiers
Mes Rosiers
 
What Is The Atmosphere
What Is The AtmosphereWhat Is The Atmosphere
What Is The Atmosphere
 
Atoms, Molecules & Stoichometry (III)
Atoms, Molecules & Stoichometry (III)Atoms, Molecules & Stoichometry (III)
Atoms, Molecules & Stoichometry (III)
 
Setting Your Terms
Setting Your TermsSetting Your Terms
Setting Your Terms
 
Copiii Lumii
Copiii LumiiCopiii Lumii
Copiii Lumii
 
Meet On The Street
Meet On The StreetMeet On The Street
Meet On The Street
 
Introduction to intellectual property handlout
Introduction to intellectual property handloutIntroduction to intellectual property handlout
Introduction to intellectual property handlout
 
HYPE on presentations
HYPE on presentationsHYPE on presentations
HYPE on presentations
 
Søkeskolen
SøkeskolenSøkeskolen
Søkeskolen
 
Leeds inventors group
Leeds inventors groupLeeds inventors group
Leeds inventors group
 
Introduction to IP: Useful Websites
Introduction to IP: Useful WebsitesIntroduction to IP: Useful Websites
Introduction to IP: Useful Websites
 
Atomic Structure (IV)
Atomic Structure (IV)Atomic Structure (IV)
Atomic Structure (IV)
 
401+Powerpoint[1]
401+Powerpoint[1]401+Powerpoint[1]
401+Powerpoint[1]
 
Toolkit Workshop [V2]
Toolkit Workshop [V2]Toolkit Workshop [V2]
Toolkit Workshop [V2]
 
Moving Forward: Redesigning UNC's Library Website
Moving Forward: Redesigning UNC's Library WebsiteMoving Forward: Redesigning UNC's Library Website
Moving Forward: Redesigning UNC's Library Website
 

Similaire à Gdy Ember spotka Django

Netguru Friday Talks - DRY, REST i DRO
Netguru Friday Talks - DRY, REST i DRONetguru Friday Talks - DRY, REST i DRO
Netguru Friday Talks - DRY, REST i DRO
Netguru
 
Domain Driven Design, czyli progamowanie przez modelowanie
Domain Driven Design, czyli progamowanie przez modelowanieDomain Driven Design, czyli progamowanie przez modelowanie
Domain Driven Design, czyli progamowanie przez modelowanie
SzymonPobiega
 

Similaire à Gdy Ember spotka Django (10)

Mongodb with Rails
Mongodb with RailsMongodb with Rails
Mongodb with Rails
 
JavaScript, Moduły
JavaScript, ModułyJavaScript, Moduły
JavaScript, Moduły
 
Modularny JavaScript - meet.js
Modularny JavaScript - meet.jsModularny JavaScript - meet.js
Modularny JavaScript - meet.js
 
Wordpress dla każdego
Wordpress dla każdegoWordpress dla każdego
Wordpress dla każdego
 
CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012CQRS, ES, Scala @ Confitura 2012
CQRS, ES, Scala @ Confitura 2012
 
Netguru Friday Talks - DRY, REST i DRO
Netguru Friday Talks - DRY, REST i DRONetguru Friday Talks - DRY, REST i DRO
Netguru Friday Talks - DRY, REST i DRO
 
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
Wprowadzenie do języka Swift, czyli nowe podejście do programowania aplikacji...
 
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarkaThymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
Thymeleaf - szablony, które bez przetworzenia zrozumie twoja przeglądarka
 
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
[TestWarez 2017] Architektura testów automatycznych dla wielomodułowej aplika...
 
Domain Driven Design, czyli progamowanie przez modelowanie
Domain Driven Design, czyli progamowanie przez modelowanieDomain Driven Design, czyli progamowanie przez modelowanie
Domain Driven Design, czyli progamowanie przez modelowanie
 

Gdy Ember spotka Django