+ All Categories
Home > Technology > Ajaxujme přátelé

Ajaxujme přátelé

Date post: 05-Jul-2015
Category:
Upload: michal-valousek
View: 506 times
Download: 0 times
Share this document with a friend
Description:
Ligthtalk o jednoduché implementaci Ajaxových dotazů ve frameworku Django, prezentovaný 30.3.2011 na django-cs meetup #2 v Praze.
53
Ajaxujme přátelé Michal Valoušek @msgre 30.března 2011
Transcript
Page 1: Ajaxujme přátelé

Ajaxujme přátelé

Michal Valoušek@msgre

30.března 2011

Page 2: Ajaxujme přátelé

Ligthtalk o jednoduché implementaci Ajaxových dotazů

ve frameworku Django pro pražské sdružení

nenáročných matematiků

Page 3: Ajaxujme přátelé

Ligthtalk o jednoduché implementaci Ajaxových dotazů

ve frameworku Django pro pražské sdružení

nenáročných matematiků

Page 4: Ajaxujme přátelé

Dynamické změny na stránce

Page 5: Ajaxujme přátelé

Dynamické změny na stránce

Page 6: Ajaxujme přátelé

Dynamické změny na stránce

Page 7: Ajaxujme přátelé

Proč?

Page 8: Ajaxujme přátelé

Proč?

• Rychlost ➞ lepší UX

Page 9: Ajaxujme přátelé

Proč?

• Rychlost ➞ lepší UX

• Méně přenášených dat

Page 10: Ajaxujme přátelé

Proč?

• Rychlost ➞ lepší UX

• Méně přenášených dat

• Méně práce pro prohlížeč

Page 11: Ajaxujme přátelé

Implementace

Page 12: Ajaxujme přátelé

Implementacehodně naivní

Page 13: Ajaxujme přátelé

Implementace

• Pověsíme se na odkaz

Page 14: Ajaxujme přátelé

• Pověsíme se na odkaz$(‘a.next’).click(function(){ $(‘#left’).load(URL); return false;});

Implementace

Page 15: Ajaxujme přátelé

• Pověsíme se na odkaz$(‘a.next’).click(function(){ $(‘#left’).load(URL); return false;});

• Napíšeme view a šablonuv Djangu

Implementace

Page 16: Ajaxujme přátelé

Realita

Page 17: Ajaxujme přátelé

Mění se více než jen jeden blok

Page 18: Ajaxujme přátelé

Mění se více než jen jeden blok

Page 19: Ajaxujme přátelé

Mění se více než jen jeden blok

Page 20: Ajaxujme přátelé

Mění se více než jen jeden blok

Page 21: Ajaxujme přátelé

• Mění se více než jen jeden blok

Realita

Page 22: Ajaxujme přátelé

• Mění se více než jen jeden blok

• Složitost kódu roste

Realita

Page 23: Ajaxujme přátelé

• Mění se více než jen jeden blok

• Složitost kódu roste

• Začínáme nepříjemně vlhnout *

Realita

Page 24: Ajaxujme přátelé

• Mění se více než jen jeden blok

• Složitost kódu roste

• Začínáme nepříjemně vlhnout *

Realita

* Rozumíme si že? Jakože stále častěji se porušuje princip DRY...

Page 25: Ajaxujme přátelé

Co s tím

Page 26: Ajaxujme přátelé

• jQuery Taconite

Co s tím

Page 27: Ajaxujme přátelé

• jQuery Taconite

• Zachovat view, ale pro Ajax dotazy použít jinou šablonu

Co s tím

Page 28: Ajaxujme přátelé

• jQuery Taconite

• Zachovat view, ale pro Ajax dotazy použít jinou šablonu

• nebo…

Co s tím

Page 29: Ajaxujme přátelé

Využít sílu{% extends %}

Page 30: Ajaxujme přátelé

Třívrstvá architektura šablon

bone.html

<html> <head> … </head> <body> … </body> </html>

Page 31: Ajaxujme přátelé

Třívrstvá architektura šablon

bone.html

<html> <head> … </head> <body> … </body> </html>

base.html {% extends “bone.html”%} {% block navigation %} … {% endblock %}

Page 32: Ajaxujme přátelé

Třívrstvá architektura šablon

bone.html

<html> <head> … </head> <body> … </body> </html>

base.html {% extends “bone.html”%} {% block navigation %} … {% endblock %}

catalogue.html {% extends “base.html”%} {% block content %} … {% endblock %}

Page 33: Ajaxujme přátelé

Využít sílu{% extends %}

Page 34: Ajaxujme přátelé

Jak?

Page 35: Ajaxujme přátelé

Třemi změnamitrpasličími

Page 36: Ajaxujme přátelé

Třemi změnamišablony + view + javascript

trpasličími

Page 37: Ajaxujme přátelé

1. Drobná úprava šablon

bone.html

<html> <head> … </head> <body> … </body> </html>

base.html {% extends “bone.html”%} {% block navigation %} … {% endblock %}

catalogue.html {% extends “base.html”%} {% block content %} … {% endblock %}

Page 38: Ajaxujme přátelé

1. Drobná úprava šablon

base.html {% extends “bone.html”%} {% block navigation %} … {% endblock %}

catalogue.html {% extends “base.html”%} {% block content %} … {% endblock %}

json.html{% jsonblock %} {% jsonitem "content" %} {% block content %} {% endblock %} {% endjsonitem %}

{% endjsonblock %}

Page 39: Ajaxujme přátelé

1. Drobná úprava šablon

catalogue.html {% extends “base.html”%} {% block content %} … {% endblock %}

json.html{% jsonblock %} {% jsonitem "content" %} {% block content %} {% endblock %} {% endjsonitem %}

{% endjsonblock %}

base.html {% extends “bone.html”%} {% block navigation %} … {% endblock %}

Page 40: Ajaxujme přátelé

json.html{% jsonblock %} {% jsonitem "content" %} {% block content %} {% endblock %} {% endjsonitem %}

{% endjsonblock %}

1. Drobná úprava šablon

catalogue.html {% extends “base.html”%} {% block content %} … {% endblock %}

base.html {% extends bone_tmpl %} {% block navigation %} … {% endblock %}

{% extends bone_tmpl %}

Page 41: Ajaxujme přátelé

2. µ-změna view def catalogue(request): … context_dict = { … ‘bone_tmpl’: ‘json.html‘ if request.is_ajax() \ else ‘bone.html’ } … return render_to_response( 'catalogue.html', context_dict, context_instance = RequestContext(request), mimetype = ‘application/json’ if request.is_ajax() \ else ‘text/html’ )

Page 42: Ajaxujme přátelé

3. Javascripteček

• Na sledované odkazy pověsíme vlastní obsluhu…

$('#regions a').live('click', function() { return ajax_content_handler( $(this).attr('href'), ['categories'] ); }

Page 43: Ajaxujme přátelé

3. Javascriptečekfunction ajax_content_handler(url, exclude) { $.getJSON(url, function(data) { var cufonize_it = false; // navigace 1st level -- kategorie if ($.inArray('categories', exclude) == -1) { $('#categories').replaceWith(data.categories); cufonize_it = true; } // <title>...</title> $('title').empty().append(data.title) // udrzba... if (cufonize_it) do_cufonize(); } return false;}

Page 44: Ajaxujme přátelé

Výsledek

Page 45: Ajaxujme přátelé

Po kliknutí na odkaz...

Page 46: Ajaxujme přátelé

...získáváme namísto HTML...

Page 47: Ajaxujme přátelé

… JSON strukturu!

Page 48: Ajaxujme přátelé

Změny v šablonách se opravují na jediném místě!

Page 49: Ajaxujme přátelé

Bonus

Page 50: Ajaxujme přátelé

json.html{% jsonblock %}

{% jsonitem "categories" %} {% block categories %}{% endblock %} {% endjsonitem %}

{% jsonitem "content" %} {% block content %}{% endblock %} {% endjsonitem %}

{% endjsonblock %}

Page 51: Ajaxujme přátelé

json.html{% jsonblock %}

{% jsonitem "categories" %} {% block categories %}{% endblock %} {% endjsonitem %}

{% jsonitem "content" %} {% block content %}{% endblock %} {% endjsonitem %}

{% endjsonblock %}

Page 52: Ajaxujme přátelé

json.html{% jsonblock %}

{% jsonitem "categories" %} {% block categories %}{% endblock %} {% endjsonitem %}

{% jsonitem "content" %} {% block content %}{% endblock %} {% endjsonitem %}

{% endjsonblock %}

Page 53: Ajaxujme přátelé

Dýky!


Recommended