在使用django進行前背景分離開發時通常會搭配`django-rest-framework`架構建立RESTful風格的接口API,本文以建立man包含name、sex字段的API為執行個體學習`django-rest-framework`架構的使用。
在使用django進行前背景分離開發時通常會搭配
django-rest-framework
架構建立RESTful風格的接口API。架構介紹及版本要求可參考官方位址:https://www.django-rest-framework.org 
man
包含 name
、 sex
字段的API為執行個體學習 django-rest-framework
架構的使用。
主要包含下面5個步驟:
- 建立Django項目
- 建立ORM模型
- 加載Django REST Framework
- 序列化模型
- 建立加載資料的view和url
1.建立Django項目
建立django_rest
django-admin startproject django_rest
進入django_rest,建立虛拟環境env
virtualenv env
激活虛拟環境,并安裝django
source ./env/bin/activate
安裝 django
pip install django
建立rest_app
python manage.py startapp rest_app
注冊app,将app添加到INSTALLED_APPS
#setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_app'
]
建立背景admin賬戶用于管理
$ python manage.py createsuperuser
Username (leave blank to use 'root'):admin
Email address:
Password:
Password (again):
Superuser created successfully.
2.建立ORM模型
資料庫我們使用預設sqlite3 即可,如需要變更可在setting.py中databases配置。
修改我們/django_rest/models.py添加我們
man
的模型
#models.py
from django.db import models
# Create your models here.
class Man(models.Model):
name = models.CharField(max_length=64)
sex = models.CharField(max_length=64)
def __str__(self):
return self.name
做資料庫遷移
python manage.py makemigrations
python manage.py migrate
将Man這個model注冊到我們的背景,以便可以通過django的背景做增删查改,編寫admin.py如下
#admin.py
from django.contrib import admin
from .models import Man
# Register your models here.
admin.site.register(Man) # 注冊Man到背景
啟動django服務
python manage.py runserver
通路 http://127.0.0.1:8000/admin/可以看到登入界面,輸入密碼登入
可以看到我們的rest_app下的模型man對象mans
我們添加一個那個男人lgd.ame
3. 加載Django REST Framework
安裝工具包
pip install djangorestframework
注冊rest_framework
#setting.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_app'
'rest_framework' #注冊
]
4.序列化模型
序列化器會把我們的模型資料轉化(序列化)為json格式,這樣就能夠被請求了。同樣當有josn資料送出過來的時候,序列化器會将json資料轉換為模型供咋們使用。
我們在rest_app下建立檔案serializer.py
我們要做三件事:
- 導入Man模型
- 導入序REST Framework序列化器
- 建立新的類将模型和序列化器連結起來
from rest_framework import serializers
from .models import Man
class Manserializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Man
fields = ('name','sex')
5.建立加載資料的view和url
我們需要把序列化後的資料傳回給浏覽器,是以要做一下步驟:
- 通過不通的Man查詢資料庫
- 将查詢後的資料傳遞給序列化器,通過序列化器轉化為json
我們在rest_app/views.py編寫我們的視圖,
ModelViewSet
由rest_framework提供,包含了get、post方法
# views.py
from rest_framework import viewsets
from .serializers import ManSerializer
from .models import Man
class ManViewSet(viewsets.ModelViewSet):
queryset = Man.objects.all().order_by('name') #查詢結果給queryset
serializer_class = ManSerializer #對結果進序列化
在django_rest目錄下urls.py添加api路由
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('rest_app.urls')),
]
在rest_app目錄下建立urls.py添加視圖路由,通過rest_framework中router確定我們的請求到正确的動态資源。
from django.urls import include, path
from rest_framework import routers
from . import views
router = routers.DefaultRouter()
router.register(r'man', views.ManViewSet) #路由到ManViewSet視圖
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)), #使用router路由
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
最後我們來啟動服務,通路http://127.0.0.1:8000/ 可以在浏覽器檢視到我們api資訊
python manage.py runserver
通路http://127.0.0.1:8000/man/ 來檢視man資源
通過id來通路api資源http://127.0.0.1:8000/man/1/
這樣我們一個基礎restful風格的API建立完成了。感覺關鍵點還是了解
ModelViewSet
和内置
router
不讀源碼很難知其是以然。
文章有不足的地方歡迎在評論區指出。
歡迎收藏、點贊、提問。關注頂級飲水機管理者,除了管燒熱水,有時還做點别的。