[django-rest-framework]00.quickstart,快速開始!

本人普通一本,正值大三,爲了能有好的就業,痛定思痛戒掉遊戲!鞭策自己至少一週一篇博客

  • 學習目標:學校課內基礎打紮實,課外學會語言框架,同時提升英語閱讀水平
  • 學習路線(自擬):vue -> djangorestframework -> goland
  • 畢業前想:用前後端分離建成自己的小站,做一款網絡遊戲(愛好而已)

關於本篇djangorestframwork

內容皆會上傳到我的github上:https://github.com/BadbadLoli/django-rest-framework-study

本篇參照官網教程:https://www.django-rest-framework.org/tutorial/quickstart/

學習爲主,如有紕漏請大神指正


環境

操作系統:win10

python3.6.8

django2.2.4

djangorestframwork 3.10.2

快速開始

我們現在創建一個簡單的API,可以允許管理員用戶(admin user)去查看/編輯users組和groups

項目準備

創建新的django項目命名爲tutorialdjango-admin startproject _00_quickstart

新建一個app命名quickstartpython manage.py startapp quickstart

第一次同步你的數據庫:python manage.py migrate

創建一個超級管理員:python manage.py createsuperuser

Serializers

然後我們要在quickstart裏定義(新建)serializers(這個不知道怎麼翻譯比較好。。)

./quickstart/serializers.py

from django.contrib.auth.models import User, Group
from rest_framework import serializers


class UserSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = User
        fields = ['url', 'username', 'email', 'groups']


class GroupSerializer(serializers.HyperlinkedModelSerializer):
    class Meta:
        model = Group
        fields = ['url', 'name']

在本例中,我們使用的是HyperlinkedModelSerializer的超鏈接關係。您還可以使用主鍵和其他各種關係,但是超鏈接是一種很好的RESTful設計

Views

接着,我們最好寫一些視圖函數

./quickstart/views.py

from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from .serializers import UserSerializer, GroupSerializer


class UserViewset(viewsets.ModelViewSet):
    # 允許查看和編輯users
    queryset = User.objects.all().order_by('-date_joined')
    serializer_class = UserSerializer


class GroupViewset(viewsets.ModelViewSet):
    # 允許查看和編輯groups
    queryset = Group.objects.all()
    serializer_class = GroupSerializer

djangorestframework只是將所有常見的行爲分組到稱爲viewset的類中。

如果需要的話,我們可以很容易地將這些視圖分解爲單獨的視圖,但是使用viewset可以很好地組織視圖邏輯,並且非常簡潔。

URLs

現在我們連接上url

./_00_qucikstart/urls.py

from django.urls import path, include
from rest_framework import routers
from quickstart import views

router = routers.DefaultRouter()
router.register('users', views.UserViewset)
router.register('groups', views.GroupViewset)

urlpatterns = [
    path('', include(router.urls)),
    path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]

因爲我們使用的是viewset而不是view,所以只需要將viewset註冊到router類裏,drf就可以自動生成API URL conf

如果我們需要對API URL有更多的控制,可以簡單的用常規的基於類的視圖,並顯式的編寫URL conf

最後我們在browsable API 中包含了默認的loginlogout視圖,這是可選的,如果你的API需要身份驗證,並且你希望使用可瀏覽的API,那麼這是非常有用的

Pagination

Pagenation允許你控制每頁返回多少對象,要啓動它,就得在settings.py裏進行設置

./_00_qucikstart/settings.py

REST_FRAMEWORK = {
    'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 10
}

Settings

告訴django你使用的是drf,這裏並不需要註冊我們創建的app quickstart

./_00_qucikstart/settings.py

INSTALLED_APPS = [
    ...
    'rest_framework',
]

測試我們的API

查看成果咯 python manage.py runserver

打開網址 http://127.0.0.1:8000/
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章