本人普通一本,正值大三,爲了能有好的就業,痛定思痛戒掉遊戲!鞭策自己至少一週一篇博客
- 學習目標:學校課內基礎打紮實,課外學會語言框架,同時提升英語閱讀水平
- 學習路線(自擬):
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項目命名爲tutorial
:django-admin startproject _00_quickstart
新建一個app命名quickstart
:python 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
中包含了默認的login
和logout
視圖,這是可選的,如果你的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/