天天看點

python django中restful架構的使用

在使用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
python django中restful架構的使用
本文以建立

man

包含

name

sex

字段的API為執行個體學習

django-rest-framework

架構的使用。

主要包含下面5個步驟:

  1. 建立Django項目
  2. 建立ORM模型
  3. 加載Django REST Framework
  4. 序列化模型
  5. 建立加載資料的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
           
python django中restful架構的使用

将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/可以看到登入界面,輸入密碼登入

python django中restful架構的使用

可以看到我們的rest_app下的模型man對象mans

python django中restful架構的使用

我們添加一個那個男人lgd.ame

python django中restful架構的使用
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

我們要做三件事:

  1. 導入Man模型
  2. 導入序REST Framework序列化器
  3. 建立新的類将模型和序列化器連結起來
from rest_framework import serializers

from .models import Man

class Manserializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Man
        fields = ('name','sex')

           
5.建立加載資料的view和url

我們需要把序列化後的資料傳回給浏覽器,是以要做一下步驟:

  1. 通過不通的Man查詢資料庫
  2. 将查詢後的資料傳遞給序列化器,通過序列化器轉化為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
           
python django中restful架構的使用

通路http://127.0.0.1:8000/man/ 來檢視man資源

python django中restful架構的使用

通過id來通路api資源http://127.0.0.1:8000/man/1/

python django中restful架構的使用

這樣我們一個基礎restful風格的API建立完成了。感覺關鍵點還是了解

ModelViewSet

和内置

router

不讀源碼很難知其是以然。

文章有不足的地方歡迎在評論區指出。

歡迎收藏、點贊、提問。關注頂級飲水機管理者,除了管燒熱水,有時還做點别的。