> Modules non standards > Django pour le développement web > Création des views
Création des views
Une vue (view) :
- c'est une fonction python (ou une méthode) que l'on rajoute dans myApp/views.py (mais en fait, c'est une convention, on peut la mettre dans un fichier ayant n'importe quel nom).
- elle est choisie grâce à un mapping entre l'URL et la view à utiliser.
- si on a dans urls.py :
from django.conf.urls import patterns, url
from myApp import views
urlpatterns = patterns('', url(r'^$', views.myFunc))
alors, il faut rajouter la fonction myFunc dans views.py.
- la fonction view est appelée avec un objet HttpRequest, ainsi que tous les arguments capturés par l'expression régulière :
- soit des arguments par position si match sans nom.
- soit des arguments par nom si match avec un nom (du genre (<myName>\d+) par exemple).
- la fonction view doit renvoyer un objet HttpResponse ou lever une exception comme par exemple Http404.
- on peut utiliser le système de template de Django pour la réponse, mais on n'est pas obligé.
Utilisation d'un template :
- mettre le template myTemplate.html dans myApp/templates/myTemplate.html
- pour utiliser le template, faire dans la fonction view :
from django.template import RequestContext, loader
# Construit les objets avec le modele
myObjectList = MyModel.objects.all()
template = loader.get_template('myTemplate.html')
# associe les objets construits myObjectList au tag 'myObjectList'
context = RequestContext(request, {'myObjectList': myObjectList})
return HttpResponse(template.render(context))
On peut utiliser le raccourci suivant, render(), qui construit une réponse avec le template indiqué et les variables données dans le dictionnaire :
raccourci redirect() :
- permet de renvoyer un HttpResponseRedirect.
- redirect(myObject) : la méthode get_absolute_url() de l'objet est appelée pour avoir l'url de redirection (utiliser la fonction reverse pour cela).
- redirect('myUrlName', var1 = '1', var2 = 'b') : on donne ici un nom d'url avec ses paramètres associés
- on peut rajouter permanent = True pour avoir une redirection permanente.
Lever une exception :
from django.http import Http404
raise Http404('Pas de Resultats')
Raccourci qui récupère un objet d'un modèle, mais lève une exception Http404 s'il n'existe pas :
from django.shortcuts import get_object_or_404, render
myObj = get_object_or_404(MyModel, pk = 2)
return render(request, 'myTemplate.html', {'myObj': myObj})
- il y a aussi un myObjects = get_list_or_404(MyModel, col1 = 5) qui va chercher la liste des objets de la classe MyModel avec les critères indiqués, sous le format accepté par filter() : il est à ce que get_object_or_404(), ce que filter() est à get()). Il fait une exception Http404 si aucun objet trouvé.
Redirect :
- renvoyer un objet HttpResponseRedirect au lieu d'un HttpResponse.
- HttpResponseRedirect prend comme argument l'url vers laquelle on veut renvoyer.
- c'est une bonne pratique de développement que de toujours faire un redirect après un post (indépendamment de Django) !
Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert