Cet article vous apporte une explication détaillée des vues Django en python (avec des exemples). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il vous sera utile.
Une fonction (classe) d'affichage, appelée view, est une simple fonction (classe) Python qui contient une logique métier. Elle accepte les requêtes Web et renvoie les réponses Web.
La réponse peut être le contenu HTML d'une page web, une redirection, une erreur 404, un document XML ou une image.
Renvoyer une réponse quelle que soit la logique contenue dans la vue elle-même. Peu importe où le code est écrit, du moment qu'il se trouve dans le répertoire de votre projet actuel. Rien de plus n’est requis – « rien de magique » pour ainsi dire.
Afin de placer le code quelque part, il est courant de placer les vues dans un fichier appelé vues.py dans le répertoire du projet ou de l'application.
Exemple : Une vue qui renvoie la date et l'heure actuelles sous la forme d'un document html :
from django.http import HttpResponse import datetime def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html)
Expliquons le code ci-dessus ligne par ligne :
Tout d’abord, nous avons importé la classe HttpResponse du module django.http, ainsi que la bibliothèque datetime de Python.
Ensuite, nous définissons la fonction current_datetime. C'est la fonction d'affichage. Chaque fonction d'affichage prend un objet HttpRequest comme premier paramètre et est généralement appelée requête.
Notez que le nom de la fonction d'affichage n'est pas important ; il n'est pas nécessaire qu'elle soit nommée de manière cohérente pour que Django la reconnaisse. Nous l'avons nommé current_datetime car ce nom peut refléter plus précisément les fonctions qu'il implémente.
Cette vue renvoie un objet HttpResponse contenant la réponse générée. Chaque fonction d'affichage est chargée de renvoyer un objet HttpResponse.
Django utilise des objets de requête et de réponse pour transmettre l'état à travers le système.
Lorsque le navigateur demande une page au serveur, Django crée un objet HttpRequest, qui contient des métadonnées sur la requête. Django charge ensuite la vue correspondante, en passant cet objet HttpRequest comme premier paramètre à la fonction view.
Chaque vue est chargée de renvoyer un objet HttpResponse.
CBV (vue basée sur les classes) et FBV (vue basée sur les fonctions)
La vue basée sur les fonctions est appelée FBV, et la vue peut également être écrite comme basée sur les classes.
Version FBV
# FBV版添加班级 以函数的方式实现 def add_class(request): if request.method == "POST": class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_list/") return render(request, "add_class.html")
Version CBV
# CBV版添加班级 以类的方式实现 from django.views import View class AddClass(View): # 继承View中的所有属性 def get(self, request): # 如果是get请求,就执行此段函数 return render(request, "add_class.html") def post(self, request): # 如果是post,请求就执行此段函数 class_name = request.POST.get("class_name") models.Classes.objects.create(name=class_name) return redirect("/class_list/")
Remarque : Pour CBV, les modifications correspondantes doivent être apportées dans urls.py :
# urls.py中,要加括号 url(r'^add_class/$', views.AddClass.as_view()), # 注意: Addclass中并没有定义as_view方法,而是继承view中的方法,从而使其按照 #相应条件执行相应程序. 流程 1. AddPress.as_view() —— 》 view函数 2. 当请求到来的时候执行view函数: 1. 实例化自己写的类 —— 》self self = cls(**initkwargs) 2. self.request = request 3. 执行 self.dispatch(request, *args, **kwargs) 1. 执行父类中的dispatch方法 1. 判断请求方式是否被允许 1. 允许的情况 handler = 通过反射获取 get post 方法(指的是自己定义的类中的方法) 2. 不允许的情况 handler = 不允许的方法 3. handler(request, *args, **kwargs) 2. 返回HttpResponse对象 4. 返回HttpResponse对象 给django
En héritant la méthode d'affichage, pour aider à compléter les fonctions dans les affaires logiques (huit méthodes de réception telles que post, get, filter, etc. Par rapport à FBV
La version CBV est plus concise, ne nécessite pas de jugement et est). plus modulaire.
La version CBV ajoute un décorateur
Les méthodes dans les classes ne sont pas exactement les mêmes que les fonctions indépendantes, donc les décorateurs de fonctions ne peuvent pas être directement appliqués aux méthodes dans les classes, nous devons les convertir en méthode décorateurs d’abord.
Django fournit le décorateur method_decorator pour convertir les décorateurs de fonctions en décorateurs de méthodes.
Méthode 1 :
# Faites attention lorsque vous utilisez CBV, demandez Après son arrivée, la méthode dispatch() sera exécutée en premier. Si nous devons effectuer certaines opérations sur des méthodes de traitement de requêtes spécifiques par lots, telles que get, post, etc., nous pouvons réécrire manuellement la méthode de dispatch ici. équivaut à ajouter une décoration sur FBV. L'effet de l'appareil est le même.
Méthode 2. :
Ajouter un décorateur au FBV
objet de requête
Lorsqu'une page est demandée, Django créera un objet HttpRequest contenant les informations originales de la requête.
Django passera automatiquement cet objet à la fonction view correspondante. Généralement, la fonction view utilise classiquement le paramètre request pour accepter cet objet.
Valeurs communes liées à la requête
path_info Renvoie l'URL d'accès de l'utilisateur, à l'exclusion du nom de domaine
method La représentation sous forme de chaîne de la méthode HTTP utilisée dans la requête, exprimée en tout lettres majuscules.
OBJET de type dictionnaire contenant tous les paramètres HTTP GET
Objet de type dictionnaire POST contenant tous les paramètres HTTP POST
corps Corps de la requête, requête de type octet. Les données POST sont
Attributs
Extraits du corps doivent être considérés comme en lecture seule, sauf indication contraire.
Attributs :
Django encapsule la ligne de requête, les informations d'en-tête et le corps du contenu du message de requête dans des attributs de la classe HttpRequest.
Sauf indication contraire, tout le reste est en lecture seule.
0.HttpRequest.scheme
Une chaîne représentant le schéma de requête (généralement http ou https)
1 HttpRequest.body
Une chaîne, représente. le corps du message de demande. C'est très utile lors du traitement de messages non HTTP, tels que des images binaires, XML, Json, etc.
Cependant, si vous souhaitez traiter les données du formulaire, il est recommandé d'utiliser HttpRequest.POST.
De plus, nous pouvons également utiliser la méthode de fichier de classe de python pour le faire fonctionner. Pour plus de détails, reportez-vous à HttpRequest.read().
2. HttpRequest.path
Une chaîne représentant le composant chemin de la requête (hors nom de domaine).
Par exemple : "/music/bands/the_beatles/"
3. HttpRequest.method
Une chaîne indiquant la méthode HTTP utilisée dans la requête. Les majuscules doivent être utilisées.
Par exemple : "GET", "POST"
4, HttpRequest.encoding
Une chaîne indiquant la méthode d'encodage des données soumises (si elle est Aucune, elle signifie utiliser le paramètre DEFAULT_CHARSET, la valeur par défaut est 'utf-8').
Cet attribut est accessible en écriture et vous pouvez le modifier pour modifier l'encodage utilisé pour accéder aux données du formulaire.
Tout accès ultérieur à la propriété (comme la lecture de données depuis GET ou POST) utilisera la nouvelle valeur de codage.
Si vous savez que l'encodage des données du formulaire n'est pas DEFAULT_CHARSET , utilisez-le.
5. HttpRequest.GET
Un objet de type dictionnaire contenant tous les paramètres de HTTP GET. Veuillez vous référer à l'objet QueryDict pour plus de détails.
6. HttpRequest.POST
Un objet de type dictionnaire Si la requête contient des données de formulaire, les données sont encapsulées dans un objet QueryDict.
Les requêtes POST peuvent avoir un dictionnaire POST vide - si un formulaire est envoyé via la méthode HTTP POST, mais qu'il n'y a aucune donnée dans le formulaire, l'objet QueryDict sera quand même créé.
Par conséquent, vous ne devez pas utiliser if request.POST pour vérifier si la méthode POST est utilisée ; vous devez utiliser if request.method == "POST"
Aussi : si vous utilisez POST pour télécharger S'il s'agit d'un fichier, les informations sur le fichier seront incluses dans l'attribut FILES.
7. HttpRequest.COOKIES
Un dictionnaire Python standard contenant tous les cookies. Les clés et les valeurs sont des chaînes.
8. HttpRequest.FILES
Un objet de type dictionnaire qui contient toutes les informations sur les fichiers téléchargés.
Chaque clé dans FILES est le nom dans , et la valeur est la donnée correspondante.
Notez que FILES ne contiendra des données que si la méthode de requête est POST et que le