Django un coup d’ oeil

Parce que Django a été développé dans un environnement de salle de presse rapide, il a été conçu pour rendre les tâches communes Web-développement rapide et facile. Voici un aperçu informel de la façon d’écrire une application Web axée sur la base de données avec Django.

Le but de ce document est de vous donner suffisamment de détails techniques pour comprendre comment fonctionne Django, mais cela ne vise pas à être un tutoriel ou une référence – mais nous avons tous les deux! Lorsque vous êtes prêt à démarrer un projet, vous pouvez commencer par le tutoriel ou plonger dans la documentation plus détaillée .

 

Concevez votre modèle

Bien que vous pouvez utiliser Django sans base de données, il est livré avec un mappeur objet-relationnel dans lequel vous décrivez votre mise en page de base de données dans le code Python.

La syntaxe modèle de données offre de nombreuses possibilités riches de représenter vos modèles – jusqu’à présent, il a été de résoudre la valeur de nombreuses années de problèmes base de données de schéma. Voici un exemple rapide:

monsite / nouvelles / models.py
à partir  django.db  importation  modèles

classe  Reporter ( modèles . Modèle ): 
    full_name  =  modèles . CharField ( longueur_max = 70 )

    def  __str__ ( auto ): 
        retour  auto . nom complet

classe  article ( modèles . Modèle ): 
    pub_date  =  modèles . DateField () 
    titre  =  modèles . CharField ( max_length = 200 ) 
    contenu  =  modèles . TextField () 
    rapporteurs  =  modèles . ForeignKey ( Reporter ,  on_delete = modèles . CASCADE )

    def  __str__ ( auto ): 
        retour  auto . gros titre

 

Installez – le

Ensuite, exécutez l’utilitaire de ligne de commande Django pour créer automatiquement les tables de base de données:

$ python manage.py migrate

La migratecommande porte sur tous vos modèles disponibles et crée des tables dans votre base de données pour les tables selon n’existent pas encore, ainsi que la fourniture en option de contrôle de schéma beaucoup plus riche .

 

Profitez de l’API libre

Avec cela, vous avez un libre et riche, API Python pour accéder à vos données. L’API est créé à la volée, aucune génération de code nécessaire:

# Import the models we created from our "news" app
>>> from news.models import Reporter, Article

# No reporters are in the system yet.
>>> Reporter.objects.all()
<QuerySet []>

# Create a new Reporter.
>>> r = Reporter(full_name='John Smith')

# Save the object into the database. You have to call save() explicitly.
>>> r.save()

# Now it has an ID.
>>> r.id
1

# Now the new reporter is in the database.
>>> Reporter.objects.all()
<QuerySet [<Reporter: John Smith>]>

# Fields are represented as attributes on the Python object.
>>> r.full_name
'John Smith'

# Django provides a rich database lookup API.
>>> Reporter.objects.get(id=1)
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__startswith='John')
<Reporter: John Smith>
>>> Reporter.objects.get(full_name__contains='mith')
<Reporter: John Smith>
>>> Reporter.objects.get(id=2)
Traceback (most recent call last):
    ...
DoesNotExist: Reporter matching query does not exist.

# Create an article.
>>> from datetime import date
>>> a = Article(pub_date=date.today(), headline='Django is cool',
...     content='Yeah.', reporter=r)
>>> a.save()

# Now the article is in the database.
>>> Article.objects.all()
<QuerySet [<Article: Django is cool>]>

# Article objects get API access to related Reporter objects.
>>> r = a.reporter
>>> r.full_name
'John Smith'

# And vice versa: Reporter objects get API access to Article objects.
>>> r.article_set.all()
<QuerySet [<Article: Django is cool>]>

# The API follows relationships as far as you need, performing efficient
# JOINs for you behind the scenes.
# This finds all articles by a reporter whose name starts with "John".
>>> Article.objects.filter(reporter__full_name__startswith='John')
<QuerySet [<Article: Django is cool>]>

# Change an object by altering its attributes and calling save().
>>> r.full_name = 'Billy Goat'
>>> r.save()

# Delete an object with delete().
>>> r.delete()

 

Une interface d’administration dynamique: il est non seulement un échafaudage – il est toute la maison

Une fois que vos modèles sont définis, Django peut créer automatiquement un professionnel, prêt pour la production interface d’ administration – un site Web qui permet aux utilisateurs authentifiés ajouter, modifier et supprimer des objets. Il est aussi facile que l’ enregistrement de votre modèle dans le site d’administration:

monsite / nouvelles / models.py
à partir  django.db  importation  modèles

classe  article ( modèles . Modèle ): 
    pub_date  =  modèles . DateField () 
    titre  =  modèles . CharField ( max_length = 200 ) 
    contenu  =  modèles . TextField () 
    rapporteurs  =  modèles . ForeignKey ( Reporter ,  on_delete = modèles . CASCADE )
monsite / nouvelles / admin.py
de  django.contrib  import  admin

à partir  .  importation des  modèles

admin . le site . inscrire ( modèles . Article )

La philosophie est que votre site est édité par un personnel ou un client, ou peut-être juste vous – et vous ne voulez pas avoir à faire face à la création d’interfaces back-end juste pour gérer le contenu.

Un flux de travail typique dans la création d’applications Django est de créer des modèles et obtenir des sites d’administration et en cours d’exécution aussi vite que possible, de sorte que votre personnel (ou clients) peut commencer à entrer des données. Ensuite, développer les données de manière est présentée au public.

 

Concevez vos URL

Un schéma d’URL propre, élégant est un détail important dans une application Web de haute qualité. Django encourage la belle conception d’URL et ne met pas cochonneries dans les URL, comme .phpou .asp.

Pour concevoir des URL pour une application, vous créez un module Python appelé URLconf . Une table des matières pour votre application, il contient une correspondance simple entre les modèles d’URL et les fonctions de rappel Python. URLconfs servent également à découpler les URL à partir du code Python.

Voici ce que URLconf peut ressembler pour le Reporter/ Article exemple ci – dessus:

monsite / nouvelles / urls.py
à partir  django.urls  importation  chemin

à partir  .  importation  vues

urlpatterns  =  [ 
    chemin ( 'articles / <int: année> /' ,  vues . year_archive ), 
    chemin ( 'articles / <int: année> / <int: mois> /' ,  vues . month_archive ), 
    chemin ( « articles / <int: année> / <int: mois> / <int: pk> / » ,  vues . article_detail ), 
]

Le code ci-dessus cartes chemins d’URL aux fonctions de rappel Python ( « vues »). Les chaînes de chemin utiliser des balises de paramètres pour « capturer » les valeurs des URL. Lorsqu’un utilisateur demande une page, Django parcourt chaque chemin, dans l’ordre, et arrête à la première qui correspond à l’URL demandée. (Si aucun d’entre eux correspond, Django appelle un cas particulier vue 404.) Ceci est extrêmement rapide car les chemins sont compilés dans des expressions régulières au moment de la charge.

Une fois que l’un des motifs d’URL correspond, Django appelle la vue donnée, qui est une fonction Python. Chaque vue est transmis un objet de requête – qui contient des métadonnées de la demande – et les valeurs capturées dans le motif.

Par exemple, si un utilisateur a demandé l’URL « / articles / 2005/05/39323 / », Django appelleraient la fonction .news.views.article_detail(request,
year=2005, month=5, pk=39323)

 

Écrivez votre point de vue

Chaque vue est responsable de faire l’ une des deux choses: retour d’ un HttpResponseobjet contenant le contenu de la page demandée, ou soulever une exception telle que Http404. Le reste dépend de toi.

En général, une vue récupère des données en fonction des paramètres, charge un modèle et rend le modèle avec les données récupérées. Voici un exemple de vue pour en year_archivehaut:

monsite / nouvelles / views.py
de  django.shortcuts  importation  rendre

de  fichiers .models  importation  article

def  year_archive ( demande ,  année ): 
    a_list  =  article . objets . Filtre ( pub_date__year = année ) 
    contexte  =  { 'année' :  année ,  'article_list' :  a_list } 
    retour  rendu ( demande ,  'nouvelles / year_archive.html' ,  contexte )

Cet exemple utilise Django système de template , qui a plusieurs fonctionnalités puissantes , mais tente de rester assez simple pour les non-programmeurs à utiliser.

 

Concevez vos modèles

Le code charge au- dessus du news/year_archive.htmlmodèle.

Django a un chemin de recherche de modèle, ce qui vous permet de réduire la redondance entre les modèles. Dans vos paramètres de Django, vous spécifiez une liste de répertoires pour vérifier les modèles avec DIRS. Si un modèle n’existe pas dans le premier répertoire, il vérifie la seconde, et ainsi de suite.

Disons que le news/year_archive.htmlmodèle a été trouvé. Voilà ce qui pourrait ressembler à :

monsite / nouvelles / templates / Nouvelles / year_archive.html
{%  Étend  "base.html"  %}

{%  Bloc  titre  %} Articles pour {{  année  }} {%  endblock  %}

{%  Bloc  contenu  %} 
< h1 > Articles pour {{  année  }} </ h1 >

{%  Pour l'  article  dans  article_list  %} 
    < p > {{  article.headline  }} </ p > 
    < p > Par {{  article.reporter.full_name  }} </ p > 
    < p > Publié {{  article.pub_date | Date : "F j, Y"  }} </ p > 
{%  endfor  %} 
{%  endblock  %}

Les variables sont entourées par des entretoises doubles-bouclés. signifie « Restituer la valeur de l’attribut de titre de l’article. » Mais les points ne sont pas utilisés uniquement pour la recherche d’attributs. Ils peuvent également faire lookup-clé de dictionnaire, index recherche et les appels de fonction.{{ article.headline }}

Note utilise un style Unix « pipe » (le caractère « | »). Ceci est appelé un filtre de modèle, et il est un moyen de filtrer la valeur d’une variable. Dans ce cas, le filtre date formate un objet datetime Python dans le format donné (que l’on trouve dans la fonction PHP date).{{ article.pub_date|date:"F j, Y" }}

Vous pouvez enchaîner ensemble autant de filtres que vous le souhaitez. Vous pouvez écrire des filtres personnalisés modèle . Vous pouvez écrire des tags modèle personnalisé , qui exécutent le code Python personnalisé dans les coulisses.

Enfin, Django utilise le concept de « l’ héritage de modèle ». C’est ce que le fait. Cela signifie « Première charge le modèle appelé « base », qui a défini un tas de blocs, et remplir les blocs avec les blocs suivants. » Bref, qui vous permet de considérablement réduire la redondance dans les modèles: chaque modèle doit définir uniquement ce qui est unique à ce modèle.{% extends "base.html" %}

Voici ce que le modèle « base.html », y compris l’utilisation des fichiers statiques , pourrait ressembler à :

monsite / templates / base.html
{%  Charge  statique  %} 
< html > 
< tête > 
    < title > {%  bloc  titre  %} {%  endblock  %} </ title > 
</ tête > 
< body > 
    < img  src = " {%  statiques  " images / sitelogo. .png "  %} "  alt = "Logo"  /> 
    {%  bloc  teneur  %} {%  endblock  %} 
</ body > 
</html >

Simpliste, il définit le look and feel du site (avec le logo du site), et fournit des « trous » pour les modèles enfants à remplir. Cela fait une refonte du site aussi facile que de changer un seul fichier – le modèle de base.

Il permet également de créer plusieurs versions d’un site, avec différents modèles de base, tout en réutilisant des modèles enfants. Les créateurs de Django ont utilisé cette technique pour créer des versions mobiles remarquablement différents de sites – simplement en créant un nouveau modèle de base.

Notez que vous ne devez pas utiliser le système de template de Django si vous préférez un autre système. Bien que le système de template de Django est particulièrement bien intégrée à la couche de modèle de Django, rien ne vous oblige à l’utiliser. Pour cette question, vous ne devez pas utiliser l’API de base de données de Django, que ce soit. Vous pouvez utiliser une autre couche d’abstraction de base de données, vous pouvez lire des fichiers XML, vous pouvez lire des fichiers sur le disque, ou tout ce que vous voulez. Chaque morceau de Django – modèles, vues, modèles – est découplé de l’autre.

 

Ceci est juste la surface

Cela a été seulement un aperçu rapide des fonctionnalités de Django. Certaines fonctionnalités plus utiles:

  • Un cadre de la mise en cache qui intègre avec backends memcached ou d’ autres.
  • Un cadre de syndication qui rend la création de flux RSS et Atom aussi facile que d’ écrire une petite classe Python.
  • Plus sexy fonctionnalités admin générées automatiquement – cette vue d’ensemble à peine effleuré la surface.

Les prochaines étapes sont évidentes pour vous de télécharger Django , lisez le tutoriel et se joindre à la communauté . Merci de votre intérêt!