Einführung in Python Django (6)

Erstellen Sie eine Smartphone-API

Bisher haben wir ein Beispiel für eine Webanwendung gesehen, die eine HTML-Antwort zurückgibt.

Als Nächstes erstellen wir ein Beispiel, das JSON als Backend einer iOS / Android-App zurückgibt. Sie können ein Modul einführen, das eine REST-API erstellt, z. B. Django REST Framework, aber ich werde es zuerst selbst schreiben.

Erstellen einer API-Anwendung

Erstellen Sie eine Anwendung namens api unter dem mybook-Projekt.

$ python manage.py startapp api

Die folgenden Dateien wurden im Verzeichnis des mybook-Projekts erstellt.

mybook/
    api/
        __init__.py
        admin.py
        apps.py
        migrations/
            __init__.py
        models.py
        tests.py
        views.py

Ansicht, die JSON zurückgibt

Grundsätzlich wird das json-Modul verwendet, um ein Python-Wörterbuchobjekt in JSON zu konvertieren.

import json

data = {'id': 1, 'name': 'hoge'}
json_str = json.dumps(data, ensure_ascii=False, indent=2)

Da sich das Python-Wörterbuch jedoch in keiner bestimmten Reihenfolge befindet, befindet sich auch der Inhalt des JSON in keiner bestimmten Reihenfolge.

Also verwenden wir Sammlungen. OrderedDict bestellte Wörterbuch.

Beachten Sie, dass OrderedDict von Python 2.7 aus verwendet werden kann. Wenn die Serverumgebung Python 2.6 oder niedriger ist, verwenden Sie orderdict.

api / views.py sieht folgendermaßen aus:

import json
from collections import OrderedDict
from django.http import HttpResponse
from cms.models import Book


def render_json_response(request, data, status=None):
    """Antwort in JSON zurückgeben"""
    json_str = json.dumps(data, ensure_ascii=False, indent=2)
    callback = request.GET.get('callback')
    if not callback:
        callback = request.POST.get('callback')  #Für JSONP mit POST
    if callback:
        json_str = "%s(%s)" % (callback, json_str)
        response = HttpResponse(json_str, content_type='application/javascript; charset=UTF-8', status=status)
    else:
        response = HttpResponse(json_str, content_type='application/json; charset=UTF-8', status=status)
    return response


def book_list(request):
    """Gibt einen JSON mit Büchern und Impressionen zurück"""
    books = []
    for book in Book.objects.all().order_by('id'):
        
        impressions = []
        for impression in book.impressions.order_by('id'):
            impression_dict = OrderedDict([
                ('id', impression.id),
                ('comment', impression.comment),
            ])
            impressions.append(impression_dict)
        
        book_dict = OrderedDict([
            ('id', book.id),
            ('name', book.name),
            ('publisher', book.publisher),
            ('page', book.page),
            ('impressions', impressions)
        ])
        books.append(book_dict)
    
    data = OrderedDict([ ('books', books) ])
    return render_json_response(request, data)

render_json_response () unterstützt auch JSONP. Es kann nicht nur auf die API von Smartphones angewendet werden, sondern auch, um JSON mit Ajax von Javascript zu erwerben.

URL, die JSON zurückgibt

Erstellen Sie eine neue Datei mit dem Namen "api / urls.py" und schreiben Sie wie folgt.

from django.urls import path
from api import views

app_name = 'api'
urlpatterns = [
    #Bücher
    path('v1/books/', views.book_list, name='book_list'),   #Aufführen
]

Fügen Sie diese api / urls.py in das mybook / urls.py Ihres Projekts ein.

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('cms/', include('cms.urls')),
    path('api/', include('api.urls')),  #Hier hinzufügen
    path('admin/', admin.site.urls),
]

Ergänzung zu INSTALLED_APPS

Sie müssen dem Projekt mitteilen, dass Sie die API-Anwendung installiert haben. Es gibt weder ein Modell noch eine Vorlage, daher funktioniert es ohne sie, aber machen wir es vorerst. Wenn ich api / apps.py öffne, wird eine Klasse namens ApiConfig definiert. Fügen Sie dies am Ende von "INSTALLED_APPS" in "mybook / settings.py" mit der Zeichenfolge "api.apps.ApiConfig", "hinzu.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'cms.apps.CmsConfig',   #CMS-Anwendung
    'api.apps.ApiConfig',   #API-Anwendung
    'bootstrap4',           # django-bootstrap4
]

Überprüfen Sie das Ergebnis

Öffnen Sie dann die folgende URL in Ihrem Browser.

http://127.0.0.1:8000/api/v1/books/

Das Ergebnis ist wie folgt.

{
  "books": [
    {
      "id": 1,
      "name": "Erste Schritte mit Django",
      "publisher": "GeekLab.Nagano",
      "page": 100,
      "impressions": [
        {
          "id": 1,
          "comment": "ah ah\r\n gut"
        },
        {
          "id": 2,
          "comment": "Uuu\r\n ja"
        },
        {
          "id": 4,
          "comment": "Kommentar\r\n."
        }
      ]
    },
    {
      "id": 2,
      "name": "Buch 2",
      "publisher": "GeekLab.Nagano",
      "page": 200,
      "impressions": []
    }
  ]
}

Empfangen von Daten von iOS / Android-Apps

JSON ist in Ordnung, wenn Sie Daten an iOS / Android-Apps senden. Was ist jedoch, wenn Sie Daten empfangen möchten?

Beim Empfang in JSON können Sie die JSON-Zeichenfolge aus raw_post_data in der Anforderung extrahieren.

import json

def xxxx_post(request):
    python_obj = json.loads(request.raw_post_data)  #Lassen Sie den Hauptteil der Anforderung direkt an die JSON-Zeichenfolge POSTEN
      :

Zusammenfassung der Smartphone-API

Wenn Sie nur die Smartphone-API erstellen möchten, können Sie die Funktion der Django-Verwaltungssite verwenden, um Daten einzugeben und nur den API-Teil zu schreiben. Sie können ganz einfach ein Backend für Ihr Smartphone erstellen.

Wenn Sie ernsthaft eine API erstellen möchten, sollten Sie Django REST Framework einführen.

Schließlich

Dies ist das Ende dieses Kurses.

Nach diesem Kurs können Sie die offiziellen Tutorials 1 bis 7 ausprobieren, um Ihr Verständnis zu vertiefen.

Recommended Posts

Erste Schritte mit Python Django (4)
Erste Schritte mit Python Django (3)
Einführung in Python Django (6)
Erste Schritte mit Python Django (5)
Django 1.11 wurde mit Python3.6 gestartet
1.1 Erste Schritte mit Python
Erste Schritte mit Python
Erste Schritte mit Django 1
Erste Schritte mit Python
Erste Schritte mit Django 2
Einführung in Python-Funktionen
Erste Schritte mit Django mit PyCharm
Erste Schritte mit Python Responder v2
Erste Schritte mit Python-Webanwendungen
Erste Schritte mit Python für PHPer-Klassen
Erste Schritte mit Python Grundlagen von Python
Erste Schritte mit genetischen Python-Algorithmen
Erste Schritte mit Python 3.8 unter Windows
Erste Schritte mit Python für PHPer-Funktionen
Erste Schritte mit Python3 # 1 Grundkenntnisse erlernen
Erste Schritte mit Python Web Scraping Practice
Erste Schritte mit apache2
Einführung in die Optimierung
Erste Schritte mit Python Web Scraping Practice
Erste Schritte mit Numpy
Erste Schritte mit Spark
Erste Schritte mit Pydantic
Erste Schritte mit Jython
Erste Schritte mit Heroku-Viewing Hello World in Python Django mit Raspberry PI 3
Erste Schritte mit Python mit 100 Klopfen bei der Sprachverarbeitung
Django Erste Schritte Teil 2 mit dem Eclipse Plugin (PyDev)
Erste Schritte mit AWS IoT in Python
Erste Schritte mit Django Teil 3 über Python3 und MySQL Connector
Materialien zum Lesen, wenn Sie mit Python beginnen
Einstellungen für den Einstieg in MongoDB mit Python
Übersetzen Erste Schritte mit TensorFlow
Mach Django mit CodeStar (Python3.6.8, Django2.2.9)
Einführung in Tkinter 2: Button
Fangen Sie mit Django an! ~ Tutorial ⑤ ~
Erste Schritte mit Go Assembly
Django Erste Schritte: 2_ Erstellen eines Projekts
Django Erste Schritte: 1_Umgebungsgebäude
Mach Django mit CodeStar (Python3.8, Django2.1.15)
Python3 + Django ~ Mac ~ mit Apache
Erste Schritte mit Django: 4_MySQL-Integration
Erste Schritte mit Django: 3_Apache-Integration
Fangen Sie mit Django an! ~ Tutorial ④ ~
Fangen Sie mit Django an! ~ Tutorial ⑥ ~
Beginnen Sie mit Python! ~ ② Grammatik ~
Erste Schritte mit Python3 # 2 Erfahren Sie mehr über Typen und Variablen
Erste Schritte mit Google App Engine für Python und PHP
Python gestartet
Beginnen Sie mit Python! ~ ① Umweltbau ~
Link, um mit Python zu beginnen
Einführung in Git (1) History-Speicher
Erste Schritte mit Sphinx. Generieren Sie Docstring mit Sphinx
Erste Schritte mit Sparse Matrix mit scipy.sparse