1. boblefrag
  2. django avancé présentation du 5 Novembre

Commits

Yohann Gabory  committed 886cd43 Draft

first commit.

  • Participants
  • Branches default

Comments (0)

Files changed (8)

File beamerthemecustom.sty

View file
+%%
+ % Manhattan theme for LaTeX Beamer 3.07 or later   2009-03-31
+ % Meant to resemble a look known from Keynote by Apple Inc.
+ % Enable with \usetheme{Manhattan}
+ %
+ % Copyright (C) 2009 Sebastian Pipping <sebastian@pipping.org>
+ %
+ % Dual-licensed under
+ %  1) Creative Commons Attribution-Noncommercial-ShareAlike 3.0 License
+ %     http://creativecommons.org/licenses/by-nc-sa/3.0/
+ %
+ %  2) GNU General Public License 3.0 or later
+ %     http://www.fsf.org/licensing/licenses/gpl.html
+ %
+ % Inspired by previous work by Shawn Lankton:
+ % http://www.shawnlankton.com/2008/02/beamer-and-latex-with-keynote-theme/
+ %%
+
+% Default theme as a base
+\usetheme{default}
+\logo{\includegraphics[height=0.5cm]{presentation_img/outscale.jpg}}
+
+\usepackage{listings}
+\usepackage{listingsutf8}
+\usepackage{verbatim}
+\usepackage{euler}
+
+%% % define colors
+\definecolor{bgcolor}{HTML}{131313}
+\definecolor{titlecolor}{HTML}{FFFFFF}
+\definecolor{comment}{HTML}{BEBEBE}
+\definecolor{hilite}{HTML}{63beb2}
+\definecolor{string}{HTML}{e3dc66}
+\definecolor{code}{HTML}{474747}
+\definecolor{author}{HTML}{39cc86}
+\definecolor{framet}{HTML}{cc9825}
+\setbeamercolor{background canvas}{bg=bgcolor}
+%% Code extract
+
+\lstset{
+  inputencoding=utf8,
+  showstringspaces=false,
+  language=python,
+  basicstyle=\footnotesize,
+  showspaces=false,
+  breaklines=true,
+  backgroundcolor=\color{code},
+  keywordstyle=\color{hilite},
+  commentstyle=\color{comment},
+  stringstyle=\color{string},
+}
+% Font
+\renewcommand\sfdefault{phv}
+\renewcommand\familydefault{\sfdefault}
+\setbeamerfont{title}{size=\Huge}
+\setbeamerfont{section}{size=\Huge}
+\setbeamerfont{frametitle}{size=\huge}
+\setbeamerfont{author}{size=\small}
+\setbeamerfont{date}{size=\small}
+%colors
+\setbeamercolor{frametitle}{bg=, fg=framet}
+\setbeamercolor{headline}{bg=, fg=framet}
+\setbeamercolor{title}{bg=, fg=white}
+\setbeamercolor{author}{bg=, fg=author}
+\setbeamercolor{date}{bg=, fg=author}
+\setbeamercolor{normal text}{bg=, fg=white}
+\hypersetup{colorlinks,linkcolor=,urlcolor=author}
+% Structure
+\setbeamertemplate{itemize item}[body][center]
+\setbeamertemplate{itemize item}[square]
+\setbeamertemplate{itemize subitem}[square]
+\setbeamercolor{structure}{fg=white}
+\setbeamercolor{itemize/enumerate body}{fg=white}
+
+\setbeamercolor{itemize item}{fg=framet}
+\setbeamercolor{itemize subitem}{fg=author}
+\setbeamercolor{itemize subsubitem}{fg=white}
+
+% Features
+\setbeamertemplate{headline}{
+  \begin{beamercolorbox}
+    {section in head/foot}\vskip2pt\insertsection
+    {\paperwidth}\vskip2pt
+  \end{beamercolorbox}
+}
+\setbeamertemplate{navigation symbols}{}
+\setbeamertemplate{footline}{}

File presentation.org

View file
+#+STARTUP: beamer
+#+LaTeX_CLASS: beamercustom
+#+MACRO: BEAMERTHEME custom
+#+LaTeX_CLASS_OPTIONS: [presentation]
+#+BEAMER_FRAME_LEVEL: 2
+#+OPTIONS:   H:3 num:t toc:nil \n:nil @:t ::t |:t ^:t -:t f:t *:t <:t
+#+OPTIONS:   TeX:t LaTeX:t skip:nil d:nil todo:t pri:nil tags:not-in-toc
+#+LaTeX_HEADER: \titlegraphic{\includegraphics[height=3cm]{presentation_img/livre.jpg}}
+#+DATE:
+#+COLUMNS: %35ITEM %10BEAMER_env(Env) %10BEAMER_envargs(Args) %4BEAMER_col(Col) %8BEAMER_extra(Ex)
+#+LANG:fr
+#+TITLE: Django Avancé
+#+AUTHOR: Yohann Gabory
+* Présentation de l'auteur
+** Yohann Gabory
+- Webdeveloper Outscale
+#+LaTeX:\centering\includegraphics[height= 10mm]{presentation_img/outscale.jpg}
+
+- Auteur chez Eyrolles
+#+LaTeX:\includegraphics[height= 10mm]{presentation_img/eyrolles.jpg}
+
+- Djangonaute depuis la version 0.95
+#+LaTeX:\begin{center}\includegraphics[height= 30mm]{presentation_img/django.jpg}\end{center}
+** Collaboration
+- Préface de Nicolas Ferrari, co-fondateur d'alwaysdata (https://www.alwaysdata.com/)
+- Relecture de Thomas Petillon, consultant senior IT et expert
+  python/django
+- Éditions Eyrolles
+* Pourquoi un livre en français ?
+** Aider les nouveaux arrivants
+*** Le _premier contact_ est plus facile en français
+*** Le succès d'un outils tiens a sa _documentation_
+*** La documentation française n'est plus à jour depuis _looooongtemps_
+** Proposer de nouvelles choses
+*** Le framework a _beaucoup évolué_ depuis les parutions anglophones
+*** C'est un framework de plus en plus _largement utilisé_
+*** Il est temps d'aller plus loin
+- Les CBV
+- Les "Reusable Apps"
+- Les besoins ont changés API, Oauth etc...
+
+** "Apprendre la programmation web avec Python et Django"
+*** Un livre didactique pour les débutants
+*** Les base de la programation web
+*** Les notions essentielles
+*** Mise en application avec Django
+* Un avant-goût du contenu du livre
+** Des tutoriels
+*** Un Bug Tracker
+**** Parce que les bonnes pratiques se prennent dès le départ
+*** Un Agenda Partagé
+**** Tremble Google Agenda, les poneys arrivent!
+*** Des exemples de "la vraie vie"
+**** Parce c'est au pied du mur...
+*** Une volonté d'aller au fond des choses
+** Des bonnes pratiques
+*** Comment structurer ses modèles
+*** Le principe du DRY : partout
+*** Découplez!
+*** Les bonnes façons de résoudre les problèmes
+** Des exemples avancés
+*** une API Oauth2 avec Tastypie et Slumber
+*** une application de prototypage sans modèles
+*** Des hacks!
+* Les bonnes pratiques
+** La documentation d'un projet python/django
+*** RestructuredText par l'exemple
+*** Sphinx
+*** Le module "admindoc"
+** Comment hériter correctement les templates
+*** Par application
+**** un dossier template
+**** un fichier base.html
+**** un dossier template/includes
+*** Par Projet
+**** Un dossier template
+**** des dossiers par application sur-classées
+**** penser "réutilisable
+* Les patterns utiles
+** L'héritage dans les modèles
+*** Abstract
+**** Des applications facilement surclassables
+*** Multi-table
+**** Moins de code/Plus de clarté
+*** Proxy
+**** Le plus oublié des héritages... Et pourtant!
+*** Profitez de la souplesse de Python
+**** Héritage de classes
+**** Création de classes ou d'objet à la volée
+**** Monkey patching: quand le besoin est impérieux
+* Exemple: Un blog ultra rapide.
+** L'idée
+*** Profiter de ce qu'une installation de base peut offrir
+*** Le concept "Livré avec des piles" par l'exemple
+*** un tour rapide sur les "contrib" que l'on oublie bien souvent
+** Initialisation
+#+BEGIN_LaTeX
+\begin{lstlisting}
+
+$ django-admin.py startproject blogging
+$ cd blogging
+$ python manage.py startapp blog
+
+\end{lstlisting}
+#+END_LaTeX
+** Configuration: base de données
+#+BEGIN_LaTeX
+\begin{lstlisting}
+
+#blogging/blogging/settings.py (django >= 1.4)
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.sqlite3',
+        'NAME': 'devel.db',
+    }
+}
+
+\end{lstlisting}
+#+END_LaTeX
+** Configuration: applications
+
+#+BEGIN_LaTeX
+\begin{lstlisting}
+
+INSTALLED_APPS = (
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.sites',
+    'django.contrib.messages',
+    'django.contrib.staticfiles',
+    'django.contrib.admin',
+    'django.contrib.admindocs',
+    'django.contrib.comments',
+    'django.contrib.sitemaps',
+    'django.contrib.syndication',
+    'blog'
+)
+\end{lstlisting}
+#+END_LaTeX
+
+** Configuration: urls
+
+#+BEGIN_LaTeX
+\begin{lstlisting}
+
+from django.conf.urls import patterns, include, url
+from django.contrib import admin
+admin.autodiscover()
+
+urlpatterns = patterns('',
+    url(r'^blog/', include('blog.urls')),
+    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
+    url(r'^admin/', include(admin.site.urls)),
+    url(r'^comments/', include('django.contrib.comments.urls')),
+)
+
+\end{lstlisting}
+#+END_LaTeX
+** Les modèles : Catégorie
+#+BEGIN_LaTeX
+\begin{lstlisting}
+#blog/models.py
+
+from django.db import models
+from django.contrib.auth.models import User
+
+
+class Categorie(models.Model):
+    name = models.CharField(max_length=250)
+    slug = models.SlugField(max_length=250)
+
+    def __unicode__(self):
+        return self.name
+
+\end{lstlisting}
+#+END_LaTeX
+** Les models : les articles
+#+BEGIN_LaTeX
+\begin{lstlisting}
+#blog/models.py
+
+class Article(models.Model):
+    title = models.CharField(max_length=250)
+    slug = models.SlugField(max_length=500)
+    author = models.ForeignKey(User)
+    categorie = models.ForeignKey(Categorie)
+    published_date = models.DateField(auto_now_add=True)
+    content = models.TextField()
+
+    def __unicode__(self):
+        return self.title
+
+    def get_absolute_url(self):
+        return "/blog/article/%s" % self.slug
+
+\end{lstlisting}
+#+END_LaTeX
+
+** Les urls: liste des derniers articles
+#+BEGIN_LaTeX
+\begin{lstlisting}
+urlpatterns = patterns('',
+    url(r'^$', ArchiveIndexView.as_view(
+            model=Article,
+            date_field="published_date"),
+        name='home'),
+)
+\end{lstlisting}
+#+END_LaTeX
+** Les urls: Vue en liste
+#+BEGIN_LaTeX
+\begin{lstlisting}
+    url(r'^articles/$', ListView.as_view(model=Article), name='articles'),
+    url(r'^categories/$', ListView.as_view(model=Categorie),
+        name='categories'),
+\end{lstlisting}
+#+END_LaTeX
+** Les urls: détails des objets
+#+BEGIN_LaTeX
+\begin{lstlisting}
+    url(r'article/(?P<slug>[\w-]+)/$', DetailView.as_view(model=Article),
+        name='article'),
+    url(r'categorie/(?P<slug>[\w-]+)/$', DetailView.as_view(model=Categorie),
+        name='categorie'),
+\end{lstlisting}
+#+END_LaTeX
+** L'admin
+#+BEGIN_LaTeX
+\begin{lstlisting}
+from django.contrib import admin
+from blog.models import Categorie, Article
+
+
+class ArticleAdmin(admin.ModelAdmin):
+    prepopulated_fields = {"slug": ("title",)}
+
+
+class CategorieAdmin(admin.ModelAdmin):
+    prepopulated_fields = {"slug": ("name",)}
+
+
+admin.site.register(Categorie, CategorieAdmin)
+admin.site.register(Article, ArticleAdmin)
+
+\end{lstlisting}
+#+END_LaTeX
+** Les templates : un menu
+#+BEGIN_LaTeX
+\begin{lstlisting}[language=html]
+#blog/templates/includes/menu.html
+<ul>
+  <li><a href="{%url home %}">Accueil</a></li>
+  <li><a href="{%url categories %}">Catégories</a></li>
+  <li><a href="{%url articles %}">Tous les articles</a></li>  
+</ul>
+\end{lstlisting}
+#+END_LaTeX
+** Les templates : un article
+#+BEGIN_LaTeX
+\begin{lstlisting}
+#blog/templates/includes/prototype.html
+par <i>{{elem.author}}</i> dans la catégorie
+<a href="{% url categorie elem.categorie.slug %}">
+  {{elem.categorie}}
+</a>
+<p>{{elem.content}}</p>
+\end{lstlisting}
+#+END_LaTeX
+** Les templates : un fichier "base.html" minimal
+#+BEGIN_LaTeX
+\begin{lstlisting}
+#blog/templates/base.html
+{% include "includes/menu.html" %}
+{% block content %}
+{% endblock content %}
+\end{lstlisting}
+#+END_LaTeX
+** Les templates: vue "archive"
+#+BEGIN_LaTeX
+\begin{lstlisting}
+
+{% extends "base.html" %}
+{% block content %}
+  {% for elem in latest %}
+    <h2>
+      <a href='{% url article elem.slug %}'>
+        {{elem.title}}
+      </a>
+    </h2>
+    {% include "includes/prototype.html" %}
+  {% endfor %}
+{% endblock content %}
+\end{lstlisting}
+#+END_LaTeX
+** Les templates: vue ArticleS
+#+BEGIN_LaTeX
+\begin{lstlisting}
+{% extends "base.html" %}
+{% block content %}
+  {% for elem in object_list %}
+    <h2>
+      <a href='{% url article elem.slug %}'>
+        {{elem.title}}
+      </a>
+    </h2>
+    {% include "includes/prototype.html" %}
+  {% endfor %}
+{% endblock content %}
+\end{lstlisting}
+#+END_LaTeX
+** Les templates: CatégorieS
+#+BEGIN_LaTeX
+\begin{lstlisting}
+
+{% extends "base.html" %}
+{% block content %}
+
+{% for elem in object_list %}
+  <h2>{{elem.name}}({{elem.article_set.count}})</h2>
+  {% for article in elem.article_set.all %}
+    <h3>
+      <a href='{% url article article.slug %}'>
+        {{article.title}}
+      </a>
+    </h3>
+  {% endfor %}
+{% endfor %}
+
+{% endblock content %}
+
+
+\end{lstlisting}
+#+END_LaTeX
+
+** Les templates: Article
+#+BEGIN_LaTeX
+\begin{lstlisting}[language=html]
+
+{% extends "base.html" %}
+<!-- utilisation du framework des commentaires -->
+{% load comments %}
+{% block content %}
+{% with object as elem %}
+{% include "includes/prototype.html" %}
+{% endwith %}
+<h3>Commentaires</h3>
+<!-- liste des commentaires -->
+{% render_comment_list for object %}
+<h3>Laisser un commentaire</h3>
+<!-- formulaire de commentaire -->
+{% render_comment_form for object %}
+<a href = "{% url articles %}">
+  Retour à la liste des articles
+</a>
+{% endblock content %}
+
+\end{lstlisting}
+#+END_LaTeX
+
+** Les templates: Catégorie
+#+BEGIN_LaTeX
+\begin{lstlisting}[language=html]
+
+{% extends "base.html" %}
+{% block content %}
+<h2>{{object.name}}({{object.article_set.count}})</h2>
+  {% for article in object.article_set.all %}
+    <h3>
+      <a href='{% url article article.slug %}'>
+        {{article.title}}
+      </a>
+    </h3>
+  {% endfor %}
+<a href="{% url categories %}">
+  Retour à la liste des catégories
+</a>
+{% endblock content %}
+
+\end{lstlisting}
+#+END_LaTeX
+
+** Le Sitemap
+#+BEGIN_LaTeX
+\begin{lstlisting}
+
+from django.contrib.sitemaps import GenericSitemap
+
+info_dict = {
+    'queryset': Article.objects.all(),
+    'date_field': 'published_date',
+}
+
+sitemaps = {
+    'blog': GenericSitemap(info_dict, priority=0.6),
+}
+
+
+url(r'^sitemap\.xml$', 'django.contrib.sitemaps.views.sitemap',
+    {'sitemaps': sitemaps}),
+
+\end{lstlisting}
+#+END_LaTeX
+
+** Les flux rss
+#+BEGIN_LaTeX
+\begin{lstlisting}[language=html]
+from django.contrib.syndication.views import Feed
+
+class LatestBlogArticle(Feed):
+    title = "Un super Blog"
+    link = "/blog/"
+
+    def items(self):
+        return Article.objects.order_by('-published_date')[:5]
+
+    def item_title(self, item):
+        return item.title
+
+    def item_description(self, item):
+        return item.content
+
+\end{lstlisting}
+#+END_LaTeX
+
+* Conclusion
+** Questions
+   Des questions ?
+** Contacts
+yohann@gabory.fr
+//
+http://www.gabory.fr
+//
+@boblefrag
+
+** Licence
+*** Présentation réalisée sous org-mode
+*** Theme Beamer sous licence GPLV3
+*** Présentation disponible sous licence Creative Commons
+Attribution - Partage dans les Mêmes Conditions 3.0 non transposé

File presentation.pdf

Binary file added.

File presentation_img/django.jpg

Added
New image

File presentation_img/eyrolles.jpg

Added
New image

File presentation_img/livre.jpg

Added
New image

File presentation_img/outscale.jpg

Added
New image

File presentation_img/outscale.png

Added
New image