# Liens vers les cours
4C'est finidjango rest frameworkSource et pratique_Bip, bip, bip_bilibili
# Contenu du cours
(1)Résumé du contenu_Non.
(2)Examen du contenu_Non.
(3)django Vue CBV Utilisation de base
(4)django Vue CBV Flux Source
(5)django Voir les questions d'entrevue et csrf Supplément
(6)django Vue CBV Et résoudre csrf Certification
(7)Trier ce qui précède_Non.
【Complément de connaissances---Je l'ai ajouté moi - même】
# Pas de vêtements,Même robe que son fils
# (1)En haut
# (2)Django De FBV Et CBV
1)FBV Est une vue basée sur la fonction, Comme d'habitude.
2)CBV Est une vue basée sur la classe . Pour hériter django.views Dans View . Voir le code ci - dessous . Quand cette classe a été exécutée , Quelle est la demande qui vient de l'avant , La classe exécute automatiquement la méthode correspondante .Par exemple, post Demande, Alors la classe exécutera post Méthode.
La fonction de routage va maintenant écrire ceci , Juste pour ajouter .as_view() En tant que fonction de routage , Voici les exigences fixes ,Non, pourquoi.
Alors c'est un CBV Mode.
# (3)postman Demande de contrefaçon
1) Il n'est pas possible de concevoir un formulaire pour chaque demande ,Ça ne veut rien dire.On peut utiliser postman Cet outil est utilisé pour falsifier diverses demandes , Pour voir les données retournées par l'arrière - plan .
2)postman Installation de téléchargement pour.Télécharger le lien:Download Postman | Get Started for Free
// Une fois le téléchargement terminé, On va l'ouvrir et l'installer automatiquement , Et générer des raccourcis sur le Bureau . Ouvrez le raccourci à ce moment ,Comme le montre la figure ci - dessous..En fait... postman Il y a une page web , Mais un agent de bureau est nécessaire pour tester le local url .
3)postman Utilisation simple.Comme le montre la figure ci - dessous, Nous avons commandé la page après le plus , Et puis nous l'avons utilisé spécifiquement ,Testé post Demande. L'erreur ici est que nous n'avons pas fermé django Dans csrf Certification. On peut aller directement ici settings.py Notez cette certification à l'intergiciel dans le fichier .
# (4)Générateur de liste, Écrivez - moi le Code et les commentaires
# (5)Orienté objet
1)Encapsulation.Cela se manifeste de deux façons, Un aspect est d'encapsuler la même classe de méthodes dans la classe .Comme le montre la figure ci - dessous, C'est - à - dire que chaque classe correspond à sa propre méthode ,Puis Emballez - le..
L'autre est d'encapsuler les données dans un objet , C'est que nous transférons les données dans la classe ,Et à l'intérieur self.a1 = Passer le ginseng a1,C'est ce que ça veut dire, Appel à la classe , C'est - à - dire après avoir instancié cette classe , Nous ne pouvons pas seulement utiliser la méthode de la classe , Et les données à l'intérieur .
2) Parlez brièvement des décorateurs @property, Le rôle de ce décorateur sera discuté plus en détail dans d'autres cours d'analyse de données ,On doit juste savoir, Référence avant la définition de la fonction . Après ça, quand on a appelé la fonction , Il n'y a pas de parenthèses , C'est comme appeler une propriété . ..Voir bloc de code ci - dessous , C'est une sorte de compréhension d'entrée .
# -*- coding=utf-8 -*- # github: night_walkiner # csdn: Pandy. class Foo: def __init__(self): self.price = 100 # (1) Décorateur, Ça doit être écrit en haut , Le nom de la fonction est utilisé pour les appels suivants , # Et @property Fonction après décoration, Doit renvoyer une valeur , Puis l'appel est l'appel de propriété , Il n'y a pas de parenthèses pour la méthode # Il faut mentionner ici , Si nous devions assigner une valeur plus tard ,Comme le code suivant: """ Catégorie Foo En bas @property def price(self,value): pass Quand on l'appelle plus tard,Si nous Foo.price Un argument de moins sera demandé , Et si c'est le cas Foo.price(100) ,Encore une erreur, Nous allons donc utiliser les réglages requis pour les garnitures , C'est - à - dire la façon dont vous définissez les valeurs ou quelque chose comme """ @property def price(self): return print("Décorateur") # Si nous voulons avoir raison à l'avenir price Si vous attribuez une valeur, Il faut décorer price.setter , # Attention à l'observation !!! @price.setter def price(self, value): self.price = value # C'est pareil,Ça marche aussi.(1) Défini dans price Allez, viens. .deleter Comme décorateur @price.deleter def price(self): del self.price
Voyons l'exemple précédent , C'est Wu sir Code écrit, Je ne reviendrai pas . Voici une extension de l'instance d'encapsulation ,C'est simple.. Si vous rencontrez un problème, répétez , Ou étudier ,Pas de détails..
# (1)Détails du contenu
1)À propos de CBV Structure développée .En fait HTTP La requête est essentiellement un tas de chaînes ,Adoption /r Segmenté. Mais comment avons - nous traité la demande ? Django Le code source utilise la réflexion pour faire ,C'est - à - dire getattr() Comment faire. Si la méthode de réflexion n'est pas utilisée ,On va l'utiliser. request.method Aller à l'exécution du jugement un par un .( Tout le soutien CBV Le cadre de la structure est réalisé en utilisant la réflexion )
2)Pour CBV En termes, Quand on a utilisé ce modèle , En fait, à l'adresse de routage ,Mise en œuvre as_view() Méthode, Et puis on pourra regarder as_view() Source de, Vous pouvez voir quelles que soient les demandes qui sont faites ,Tout doit être fait. self.dispatch()
3)self.dispatch Le code source est le suivant:, Tout d'abord request.method Demande en minuscules , Comme si c'était GET Devenir get, Et ensuite déterminer si la demande est self.http_method_names À l'intérieur,C'estself.http_method_names Il y a des types de demandes ,Par exemple: post,put Attendez un peu!. getattr(x, "y") équivalent à x.y Ça veut dire, Appel de propriété similaire .
4)CBV Processus spécifique pour
5) Ordre d'exécution des méthodes des classes de parents et d'enfants . Voir le code ci - dessous :
Comme le montre la figure ci - dessous,Par exemple, actuellement, post Demande,Et puis on a fait dispatch Méthodes.
Premièrement: Le système se trouve alors dans la Sous - classe dispatch , La Sous - classe va chercher le parent dans le parent dispatch,Mais self Renvoie à une sous - classe , Après réflexion, on a trouvé post Demande,
Deuxièmement: Puis il est appelé de la Sous - classe post Méthodes, Renvoie le résultat à la classe mère dispatch, Parent dispatch Retour à la Sous - classe dispatch ,Retour à l'utilisateur.
# (1)CBV Supplément au flux source . Je crois que ce morceau sera plus solide avec l'étude approfondie , Et une meilleure compréhension .
# (2) Succession
# (1)Django Middleware
1)Django Le Middleware ne peut écrire que 5 Méthodes, C'est ce qui est indiqué dans la figure ci - dessous . Ce que j'ai dit process_request() Et process_response() Les deux méthodes sont les plus couramment utilisées .
Parmi eux process_exception() La méthode est de ne l'exécuter qu'en cas d'exception , Pas d'exception, pas d'exécution .Pour process_render_template() Méthodes, Si la fonction View renvoie render() Il va exécuter cet intergiciel ,Sinon, exécutez HttpResponse() Si c'est le cas, il ne sera jamais exécuté .
2)Processus d'exécution des intergiciels _(Django 1.10 La version ci - dessus),Voir la figure ci - dessous, Décrivons brièvement le processus d'exécution de l'intergiciel ,Quand la demande est arrivée:
Premièrement: Tout d'abord, tous les intergiciels sont exécutés séquentiellement process_request() Méthodes, Ensuite, faites correspondre les routes , Mais ne pas exécuter la fonction de vue ;
Deuxièmement: Après l'exécution de la correspondance de routage , Retour au premier niveau de l'intergiciel , Continuez à exécuter leurs process_view() Méthodes, L'exécution des fonctions de vue ne commence qu'après l'exécution ;
Troisièmement: Les fonctions de vue sont exécutées et retournées correctement (HttpResponse)Quand,Commencez. process_response() Méthode retournée au navigateur .
Quatrièmement:Si c'est le cas,, Une erreur s'est produite lors de l'exécution de la fonction de routage ,Ensuite, il sera exécuté. process_exception() La méthode renvoie une exception ;
Cinquième:Si c'est le cas,, La fonction View fonctionne correctement ,Mais le retour est render() Alors, exécutez l'intergiciel process_render_template() Méthodes,Puis retournez au navigateur.
【Quatrièmement、 Le cinquième est la partie du diagramme ci - dessous qui est annotée .】
3) Ce que vous pouvez faire avec un Middleware ? L'authentification d'autorisation et l'authentification de connexion de l'utilisateur sont les plus couramment utilisées .
# (2)csrf Questions d'entrevue certifiées
1)Django Middleware in csrf_token Réalisation.csrf L'intergiciel est écrit dans process_view() Dans la méthode.【Voir à l'arrière(3)De 3)Explication】
# (3)Exemption csrf Décorateur certifié et séparé csrf Décorateur certifié
1) Supposons que nous ajoutions toutes les fonctions de vue globale csrf Certification, C'est - à - dire à l'endroit de l'intergiciel pour csrf La certification est ouverte , .Donc si nous voulons exempter une fonction de vue csrf L'homologation permet l'utilisation de garnitures exemptées de l'homologation . L'instruction du module importé est :from django.views.decorators.csrf import csrf_exempt
Comme le montre la figure ci - dessous, Donc, nous regardons la fonction users Précédemment cité @csrf_exempt C'est la fonction d'exemption csrf Certifié.
2)Scénario II, Si on commente globalement csrf Certification, J'aimerais ajouter csrf Certification, Alors vous pouvez utiliser un seul csrf Les décorateurs sont. L'instruction pour importer le module est :from django.views.decorators.csrf import csrf_protect . La méthode d'utilisation est la même que pour les décorateurs exemptés .Comme le montre la figure ci - dessous.
3)Avec les bases ci - dessus,On saura pourquoi csrf La certification doit être écrite à process_view() On y est., C'est parce qu'au moment de la certification , Vous devez récupérer si cette fonction de vue est exempt ée de l'authentification ( Ou avec certification ), Il faut un jugement logique . Et si c'est écrit process_request() Dans la méthode, Le processus de demande n'a pas d'information sur la correspondance des itinéraires ,csrf Aucune fonction de vue trouvée , Qu'est - ce qu'il y a d'autre à vérifier que les fonctions de vue ont les décorateurs appropriés !Immédiatement après,Si nécessaire csrf Certification, Alors Vérifiez la conformité csrf_token Règles
# (1)CBV Comment personnaliser csrf Certification( Personnaliser pour annuler ou configurer l'authentification séparément )
1) Tout ce que nous avons dit précédemment était basé sur FBV Pour expliquer csrf Utilisation des décorateurs .Alors pour CBV Pour personnaliser csrf Si certifié, Ce n'est pas simple d'ajouter des décorateurs aux fonctions de la classe .【csrf Les décorateurs sont csrf_exempt Ou csrf_protect】
2)La solution est d'utiliser from django.utils.decorators import method_decorator Dans method_decorator Décorateur,Ça peut être juste CBV Personnalisation des paramètres structurels csrf Pour les décorateurs . Par exemple, la première méthode est la suivante: ,@method_decorator(csrf_exempt) Alors c'est la suppression de cette classe de vue csrf Certification( Il en va de même pour les réglages individuels ).En fait, c'est @method_decorator(csrf Décorateur), Il suffit de suivre le format suivant .
class StudentsView(View): # Authentification personnalisée---Méthode 1, C'est juste là. dispatch Avant la méthode. # C'est officiel ,Il n'y a pas de raison. @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): print("before") # super() N'hérite pas simplement du parent de la classe courante , Au lieu d'exécuter toute la succession # C'est - à - dire, En cherchant un moyen , Cherche d'abord en toi , Impossible de trouver prendre la recherche parent , # Si le parent ne peut plus être trouvé , Va dans la deuxième classe d'héritage et trouve ret = super(StudentsView, self).dispatch(request, *args, **kwargs) # print(ret) print("after") return ret def get(self, request, *args, **kwargs): print("get") return HttpResponse("GET") # @method_decorator(csrf_exempt) Ça ne sert à rien de l'ajouter ici !!! #( C'est - à - dire qu'il n'est pas valable pour les méthodes individuelles ) # Parce que les règles officielles ,C'est juste pour dispatch Au - dessus de la méthode,Et dispatch Il faut encore le mettre en avant . def post(self, request, *args, **kwargs): return HttpResponse("POST") def put(self, request, *args, **kwargs): return HttpResponse("PUT") def delete(self, request, *args, **kwargs): return HttpResponse("DELETE")
3) Vous pouvez aussi utiliser la méthode suivante , C'est en haut de la classe de vue , Mais au moment de l'écriture @method_decorator(csrf Décorateur,name="dispatch"). Voir les notes concernant les codes ci - dessous pour plus de détails .
from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt, csrf_protect # Authentification personnalisée---Méthode 2, name C'est le nom de la méthode . Trouver ce genre de méthode , Et avec ce décorateur @method_decorator(csrf_exempt, name="dispatch") class StudentsView(View): def get(self, request, *args, **kwargs): print("get") return HttpResponse("GET") def post(self, request, *args, **kwargs): return HttpResponse("POST") def put(self, request, *args, **kwargs): return HttpResponse("PUT") def delete(self, request, *args, **kwargs): return HttpResponse("DELETE")
# En haut
# (1)getattr() Utilisation de la réflexion.
Il faut aussi mentionner que getattr(obj, '_negotiator', None),C'est le retour. obj._negotiator,Le cas échéant.On a déjà dit, Sans cette propriété , Les réflexes se trompent , On peut utiliser l'arrière à cette heure None C'est,Ça veut dire...,Si vous n'avez pas cette propriété, Le système ne signale pas non plus d'erreurs ,Au lieu de cela, None.
# (2) Priorité de l'héritage de classe