version:
python 3.8.3
django 3.2.4
建立名为 NOTES,APP名为 api 的 Django 专案
Django
Django REST framework
其安装 rest_framework、corsheaders,程式码设置如下:
(给Flutter资料库为目的,分享 python 的资料满地都是,在此不多做详注)
NOTES/notes/settings.py
DEBUG = TrueALLOWED_HOSTS = [ 'http://127.0.0.1:8000', # 'localhost', '127.0.0.1', '172.20.10.4', # 在 terminal 输入 ipconfig 查电脑 IPv4 位址]INSTALLED_APPS = [ ... 'api.apps.ApiConfig', 'rest_framework', 'corsheaders',]MIDDLEWARE = [ ... 'corsheaders.middleware.CorsMiddleware', 'django.middleware.common.CommonMiddleware', ...]# 先不求甚解,全给他开通CORS_ALLOW_ALL_ORIGINS = True
NOTES/notes/url.py
from django.contrib import adminfrom django.urls import path, includeurlpatterns = [ path('admin/', admin.site.urls), # 开条路给 api APP path('', include('api.urls')), ]
NOTES/api/models.py
from django.db import modelsclass Note(models.Model): title = models.TextField() body = models.TextField() updated = models.DateField(auto_now=True) created = models.DateField(auto_now_add=True) class Meta: ordering = ['-updated']
NOTES/api/admin.py
from django.contrib import adminfrom .models import Note#admin.site.register(Note)@admin.register(Note)class BlogTypeDocument(admin.ModelAdmin): list_per_page = 10 list_display = ('title', 'body')
NOTES/api/serializers.py
from django.db import modelsfrom rest_framework.serializers import ModelSerializerfrom .models import Noteclass NoteSerializer(ModelSerializer): class Meta: model = Note fields = '__all__'
NOTES/api/urls.py
from django.urls import pathfrom . import viewsurlpatterns = [ path('', views.getRoutes), path('notes/', views.getNotes), path('notes/create/', views.createNote), path('notes/<str:pk>/update/', views.updateNote), path('notes/<str:pk>/delete/', views.deleteNote), path('notes/<str:pk>/', views.getNote),]
NOTES/api/views.py
from django.http import JsonResponsefrom rest_framework.decorators import api_viewfrom rest_framework.response import Responsefrom .serializers import NoteSerializerfrom .models import Note@api_view(['GET'])def getRoutes(reqyest): routes = [ { 'Endpoint' : '/notes/', 'mothod' : 'GET', 'body' : None, }, { 'Endpoint' : '/notes/id', 'mothod' : 'GET', 'body' : None, }, { 'Endpoint' : '/notes/create/', 'mothod' : 'POST', 'body' : None, }, { 'Endpoint' : '/notes/update/', 'mothod' : 'PUT', 'body' : {'body':""}, }, { 'Endpoint' : '/notes/delete/', 'mothod' : 'DELETE', 'body' : None, }, ] #return JsonResponse(routes, safe=False) return Response(routes)@api_view(['GET'])def getNotes(request): notes = Note.objects.all() serializer = NoteSerializer(notes, many=True) return Response(serializer.data)@api_view(['GET'])def getNote(request, pk): note = Note.objects.get(id=pk) serializer = NoteSerializer(note, many=False) return Response(serializer.data)@api_view(['POST'])def createNote(request): data = request.data note = Note.objects.create( body=data['body'] ) serializers = NoteSerializer(note, many=False) return Response(serializers.data)@api_view(['PUT'])def updateNote(request, pk): data = request.data note = Note.objects.get(id=pk) serializers = NoteSerializer(note, data=request.Post) if serializers.is_valid(): serializers.save() return Response(serializers.data)@api_view(['DELETE'])def deleteNote(request, pk): note = Note.objects.get(id=pk) note.delete() return Response("Note was deleted")
以上完成后开启 runserver
进入 NOTES 输入一些资料以便 flutter 呈现
python manage.py runserver 0.0.0.0:8000
接续: Django 为资料库,以 FutureBuilder + http 抓取
注: 小白自学,欢迎评论指导!
参考资料:
https://stackoverflow.com/questions/59700218/run-django-app-through-ip-address-allowed-host