Nachdem Sie nun gelernt haben, wie Sie eine REST-API in Django erstellen, erhalten Sie ein tieferes Verständnis Weiteres Ausarbeiten und Ausgeben. __ Ich werde diesmal die Erklärung der Umgebungskonstruktion weglassen. __ __ __ Ich verwende die im folgenden Artikel erstellte Umgebung. Verweisen Sie daher unbedingt darauf. __ __ Erstellen Sie mit Anaconda eine virtuelle Umgebung und verknüpfen Sie sie mit PyCharm. Bitte beachten Sie auch, dass alle beliebigen Namen auf den im obigen Artikel verwendeten basieren.
・ Chrome Mod Header · Postbote ・ Anaconda Navigator ・ PyCharm CE · Mac OS
Mit einem Modell können Sie eine Datenbank (sogenanntes ORM) in Python entwerfen, erstellen und betreiben. Der Tabellenname wird anhand der Felder definiert, die von Klassen- und Spaltenmodellen bereitgestellt werden. Sie können jeden Wert abrufen, indem Sie auto_now_add = True für die Datenerstellungszeit und auto_now = True für die Aktualisierungszeit angeben.
models.py
from django.db import models
# Create your models here.
#Datenbank Design
class Todo(models.Model):
title = models.CharField(max_length=50)
content = models.CharField(max_length=400)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Führen Sie Migrationen durch und migrieren Sie das erstellte Modell. Natürlich werde ich es richtig erklären. -Makemigrationen: Erstellen Sie Migrationsdateien für die Verwaltung der Datenbankversion. -Migrieren: Ändern Sie die Datenbankkonfiguration oder machen Sie die Änderung rückgängig.
$ python manage.py makemigrations
$ python manage.py migrate
Damit ist die Modellerstellung und -migration abgeschlossen.
Ein Serializer ist ein Gerät, das Daten in geeignete Formen wie Validierung und Kennwort-Hashing umwandelt, um sie in das Modell einzugeben und auszugeben. Es fungiert als Brücke vom Eingabeformular zum Modell, das die Datenbank verwaltet. Erstellen Sie eine neue serializers.py direkt unter api. Token in diesem Kapitel sind Authentifizierungstoken. Sie können sich das Authentifizierungstoken als Information (Zeichenfolge) vorstellen, um den Benutzer eindeutig zu erkennen.
serializers.py
from rest_framework import serializers
from .models import Todo
#Importieren Sie das standardmäßig in Django bereitgestellte Benutzermodell
from django.contrib.auth.models import User
#Token für Benutzer importieren
from rest_framework.authtoken.models import Token
class UserSerializer(serializers.ModelSerializer):
#Klasse für Grundeinstellungen
class Meta:
model = User
fields = ('id', 'username', 'password')
#Das Passwort kann von GET nicht aufgerufen werden und muss eingegeben werden
extra_kwargs = {'password': {'write_only':True, 'required': True}}
#Überschreiben Sie die Erstellungsmethode, mit der der Benutzer erstellt wurde.
def create(self,validated_data):
#Hash das Passwort
user = User.objects.create_user(**validated_data)
#Generieren Sie ein Token
Token.objects.create(user=user)
return user
class TodoSerializer(serializers.ModelSerializer):
#Die Notation des Datetime-Felds von Django wurde geändert
created_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M", read_only=True)
updated_at = serializers.DateTimeField(format="%Y-%m-%d %H:%M", read_only=True)
class Meta:
model = Todo
fields = ['id','title','content','created_at','updated_at']
Sie haben jetzt einen Serializer erstellt.
Ansichten steuern die Datenzugriffsrechte und die Authentifizierung. Es ist dafür verantwortlich, dass CRUD nur von ordnungsgemäß authentifizierten Benutzern verarbeitet werden kann. Erstellen Sie eine Berechtigungsdatei, bevor Sie Ansichten erstellen. Dies soll PUT und DELETE im Benutzermodell verhindern. Erstellen Sie eigene Berechtigungen direkt unter der API und geben Sie an, dass nur GET und POST akzeptiert werden sollen.
ownpermissions
from rest_framework import permissions
class OwnPermission(permissions.BasePermission):
def has_object_permission(self, request, view, obj):
#SAFE_ERHALTEN SIE MIT METHODE,Nur POST erlaubt
if request.method in permissions.SAFE_METHODS:
return True
return False
Erstellen Sie dann die Ansicht.
views.py
from django.shortcuts import render
#Für die Tokenauthentifizierung erforderliche Bibliothek
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
#Zum Erstellen von Ansichten erforderliche Bibliotheken
from rest_framework import generics
from rest_framework import viewsets
#Importieren Sie das erstellte Modell und den Serializer
from django.contrib.auth.models import User
from .models import Todo
from .serializers import UserSerializer,TodoSerializer
#Importieren Sie die erstellte Berechtigung
from .ownpermissions import OwnPermission
class UserViewSet(viewsets.ModelViewSet):
#Holen Sie sich alle Benutzerobjekte
queryset = User.objects.all()
#Geben Sie den zu verwendenden Serializer an
serializer_class = UserSerializer
#Geben Sie an, damit jeder es sehen kann
permission_classes = (OwnPermission,)
class ManageUserView(generics.RetrieveUpdateAPIView):
serializer_class = UserSerializer
#Geben Sie an, dass nur authentifizierte Benutzer darauf zugreifen können
authentication_classes = (TokenAuthentication,)
#Geben Sie an, dass nur angemeldete Benutzer zugelassen werden sollen
permission_classes = (IsAuthenticated,)
#Eine Funktion, die angemeldete Benutzerinformationen zurückgibt
def get_object(self):
return self.request.user
class TodoViewSet(viewsets.ModelViewSet):
queryset = Todo.objects.all()
serializer_class = TodoSerializer
authentication_classes = (TokenAuthentication,)
permission_classes = (IsAuthenticated,)
Die Ansicht ist jetzt abgeschlossen.
Lassen Sie uns auch URLs erstellen. URLs sind für die Verknüpfung von Ansichten und Pfaden verantwortlich. Nehmen Sie die folgenden Änderungen sowohl am Projekt als auch an der App vor. (Neue App erstellen)
drfapi/urls
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = [
path('admin/', admin.site.urls),
#Gehen Sie zu API-URLs
path('api/',include('api.urls')),
#Wenn Sie einen Benutzernamen und ein Passwort veröffentlichen, wird ein Token zurückgegeben.
path('auth/',obtain_auth_token ),
]
Von Generika geerbte Modelle verwenden as_view (), um die Ansicht dem Pfad zuzuordnen.
api/urls
from django.urls import path
from django.conf.urls import include
from rest_framework import routers
from api.views import UserViewSet, ManageUserView, TodoViewSet
router = routers.DefaultRouter()
router.register('users',UserViewSet)
router.register('todolist',TodoViewSet)
urlpatterns = [
path('myself/',ManageUserView.as_view( ), name='myself'),
#Wenn Sie einen Benutzernamen und ein Passwort veröffentlichen, wird ein Token zurückgegeben.
path('',include(router.urls)),
]
Überprüfen Sie zunächst das Admin-Dashboard, um festzustellen, ob das Modell ordnungsgemäß funktioniert. Schreiben Sie eine Funktion, die den Titelnamen an models.py zurückgibt, und einen Code, mit dem Todo von admin in admin.py erkannt wird.
models.py
def __str__(self):
return self.title
admin.py
from django.contrib import admin
from .models import Todo
#Registrieren Sie Todo als Administrator
admin.site.register(Todo)
Sie benötigen einen Superuser (autorisierten Benutzer), um sich beim Admin-Dashboard anzumelden. Der Superuser (autorisierter Benutzer) wird vom Terminal aus erstellt.
Wenn Sie den folgenden Befehl eingeben, wird eine Antwort zurückgegeben. Geben Sie also Name, E-Mail-Adresse und Passwort ein. Sie können die E-Mail leer lassen. Wenn es sich um ein einfaches Passwort handelt, werden Sie gewarnt. Wenn jedoch kein Problem vorliegt, geben Sie y ein.
$ python magange.py createsuperuser
Username (Lassen Sie das Feld leer, um den Hostnamen zu verwenden): admin
Email address:
Password:
Password (again):
The password is too similar to the username.
This password is too short. It must contain at least 8 characters.
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.
Verwenden wir nun das Admin-Dashboard. Führen Sie manage.py aus und fügen Sie der URL des lokalen Hosts "/ api / users" hinzu, um darauf zuzugreifen. Geben Sie Ihren Benutzernamen und Ihr Passwort ein, um sich anzumelden. Geben Sie nach dem Anmelden den Titel und den Inhalt von [ADD TO DO] von Todos ein. Wenn Sie es wie in der Abbildung unten gezeigt speichern können, funktioniert das Modell ordnungsgemäß.
Verwenden Sie als Nächstes Postman, um die Funktion von CRUD zu überprüfen. Fügen Sie während der Ausführung von manage.py wie zuvor "/ api / users" zur URL des lokalen Hosts hinzu und greifen Sie darauf zu. Geben Sie Ihren Benutzernamen und Ihr Passwort POST ein und rufen Sie es erneut ab. Wenn der Wert wie in der Abbildung unten gezeigt aktualisiert wird, ist die GET- und POST-Kommunikation des BENUTZERS erfolgreich.
Als nächstes greifen wir auf Todolist zu. Konvertieren Sie den Teil "Benutzer" der URL in "todolist" und greifen Sie darauf zu. Ich wurde gewarnt, dass ich keine CRUD-Berechtigungen habe, es sei denn, ich bin ein authentifizierter Benutzer. Dies liegt daran, dass ich in views.py geschrieben habe, dass eine Benutzerauthentifizierung erforderlich ist.
Zugriff mit einem Authentifizierungstoken. Das Authentifizierungstoken wird von Postman bezogen.
Starten Sie Postman. Wenn es startet, drücken Sie die weiße Taste "+". Geben Sie die URL mit "auth" ein. Wählen Sie POST für HTTP-Anforderung. Erstellen Sie unter Body> Formulardaten ein Feld für Benutzername und Passwort und geben Sie den vorhandenen Wert ein. Wenn Sie SENDEN drücken, wird das Token zurückgegeben und Sie können es kopieren. Starten Sie Chrome ModHeader über Ihren Browser. Drücken Sie die Taste "+" Wählen Sie Autorisierung und geben Sie Token "Kopiertes Token" ein. (Halbwertsbreite nach Token) Sie können jetzt auch auf die Todolist zugreifen.
Installieren Sie CORS. CORS ist ein System, das aus der Weiterleitung von HTTP-Headern besteht und bestimmt, ob der Browser den Front-End-JavaScript-Code daran hindert, auf die Antwort von Anforderungen über Ursprünge hinweg zuzugreifen. Der Ursprung ist übrigens eine Kombination aus "Schema (Protokoll)", "Host (Domäne)" und "Port" der eigenen URL der Ressource.
$ pip install django-cors-headers
Machen Sie Django auf CORS aufmerksam.
setting.py
INSTALLED_APPS = [
#<Abkürzung>
'corsheaders',
]
MIDDLEWARE = [
#<Abkürzung>
'corsheaders.middleware.CorsMiddleware',
]
CORS_ORIGIN_WHITELIST = [
'http://localhost:3000',
]
Sie können jetzt vom Frontend aus darauf zugreifen. Im nächsten Artikel möchte ich zusammenfassen, wie Sie von vorne auf die API zugreifen können.
・ Übersicht über Django (https://docs.djangoproject.com/ja/3.1/intro/overview/) ・ Erstellen wir ein Geräteverwaltungstool mit der Django REST-API (https://www.udemy.com/course/django-rest-api/). ・ [Lernnotiz] Informationen zu Migrationen durchführen und migrieren (https://qiita.com/frosty/items/8c715a53d7920c9cd1eb) ・ Ich habe zusammengefasst, was ich mit dem Django REST-Framework gelernt habe (https://qiita.com/breakthrough/items/f845592961d8863a72c5). ・ MDN (https://developer.mozilla.org/ja/docs/Glossary/CORS)
Recommended Posts