Je prévois de construire récemment une plateforme d'exploitation et de maintenance automatisée, je m'intéresse donc aux connaissances de Django.
Lors du développement du projet lui-même, nous avons rencontré un petit problème : l'interaction de données principale entre le front et le back end est JSON. Il est relativement simple pour le front-end de transférer des données vers le serveur. Ce qui est légèrement plus gênant, c'est que le côté serveur transfère le JSON vers le front-end.
Tout d'abord, les données sont obtenues à partir de la base de données. Django utilise la technologie ORM par défaut. Cependant, en tant que personnel d'exploitation et de maintenance, je suis en fait dégoûté par ce genre d'API abstraite. Parce que bien qu'il résume la table de base de données en un objet pour les développeurs, ce qui est pratique pour le développement et ne nécessite pas d'écriture d'instructions SQL, il est également responsable des goulots d'étranglement des performances dans les programmes ultérieurs (lors d'un nouveau dépannage, je rencontre un code SQL de 70 lignes). déclarations...). Pour un personnel d'exploitation et de maintenance, le SQL pur est une capacité de base, et l'apprentissage de la syntaxe de l'ORM augmentera le coût d'apprentissage.
Quoi qu'il en soit, le thème cette fois est de convertir les données obtenues à partir de la base de données en JSON. Ci-dessous, nous partagerons les méthodes ORM et SQL.
1. Utilisez la couche modèle Django et la technologie ORM pour convertir au format JSON
1 def getdata(request):2 # 使用ORM3 # all()返回的是QuerySet 数据类型;values()返回的是ValuesQuerySet 数据类型4 data = models.VM.objects.values('id', 'ip', 'host', 'username')5 data = serializers.serialize("json", tomcats)6 return JsonResponse(list(data), safe=False)
2. Abandonnez complètement la couche modèle Django et convertissez le SQL pur au format JSON.
1 def getdata(request):2 # 使用SQL3 with connection.cursor() as cursor:4 cursor.execute('select id, machine, tomcathome, ipaddress, description from tomcatData')5 data = dictfetchall(cursor)6 return JsonResponse(data, safe=False, json_dumps_params={'ensure_ascii': False})
Objet JsonResponse :
class <span class="highlighted">JsonResponse</span>
(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None,**kwargs)
Cette classe est une sous-classe de HttpRespon. Sa principale différence par rapport à la classe parent est :
1. Son type de contenu par défaut est défini sur : application/json
2. , les données doivent être de type dictionnaire. Lorsque le paramètre safe est défini sur : False, les données peuvent être renseignées avec n'importe quel objet pouvant être converti au format JSON, tel qu'une liste, un tuple, un ensemble. Le paramètre sécurisé par défaut est True. Si le type de données que vous transmettez n'est pas un type de dictionnaire, une exception TypeError sera générée.
3. Le paramètre json_dumps_params est un dictionnaire, qui appellera la méthode json.dumps() et transmettra les paramètres du dictionnaire à la méthode.
Grâce à l'explication ci-dessus, les paramètres transmis dans JsonResponse() des deux méthodes ci-dessus sont très clairs.
De cette façon, les données seront transmises au front-end au format JSON, et le front-end pourra les obtenir en utilisant AJAX et les traiter ou les afficher.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!