開始
我們將創建一個簡單的API來允許管理員用戶查看和編輯系統中的用戶和組,
專案設定
創建一個新的django專案,命名為:<tutorial>,然后創建一個新的應用程式(app),命名為:<quickstart>,
# Create the project directory
mkdir tutorial
cd tutorial
# Create a virtual environment to isolate our package dependencies locally
python3 -m venv env
source env/bin/activate # On Windows use `env\Scripts\activate`
# Install Django and Django REST framework into the virtual environment
pip install django
pip install djangorestframework
# Set up a new project with a single application
django-admin startproject tutorial . # Note the trailing '.' character
cd tutorial
django-admin startapp quickstart
cd ..
專案的布局應該是這樣的:
$ pwd
<some path>/tutorial
$ find .
.
./manage.py
./tutorial
./tutorial/__init__.py
./tutorial/quickstart
./tutorial/quickstart/__init__.py
./tutorial/quickstart/admin.py
./tutorial/quickstart/apps.py
./tutorial/quickstart/migrations
./tutorial/quickstart/migrations/__init__.py
./tutorial/quickstart/models.py
./tutorial/quickstart/tests.py
./tutorial/quickstart/views.py
./tutorial/settings.py
./tutorial/urls.py
./tutorial/wsgi.py
這個專案目錄看起來有不太一樣,它的應用程式建立在專案目錄內,使用專案的命名空間可以避免和外部模塊發生命名沖突(這個話題超出了本文章的討論范圍),
現在,可以開始同步我們的資料庫了,
python manage.py migrate
同樣,我們還需要創建一個初始用戶,并將其命名為:<admin>,將密碼設定為:<password123>,
python manage.py createsuperuser --email [email protected] --username admin
當你設定好資料庫,初始用戶創建完成后,打開應用程式<quickstart>目錄,然后就可以開始寫代碼啦~
序列化工具(Serializers)
第一步我們將定義一些序列化工具(serializers),讓我們創建一個新的模塊,命名為:<tutorial/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']
注意我們現在使用的序列化工具<UserSerializer>和<GroupSerializer>都繼承至<HyperlinkedModelSerializer>這個父類,這個父類允許我們以超鏈接的方式來描述資料表之間的關系,你也可以使用主鍵<primary key>或者其他方式來關聯資料表之間的關系,但是使用超鏈接這種設計方式是非常符合RESTful1設計的,
視圖(Views)
第二步,我們需要搞定視圖部分了,打開<tutorial/quickstart/views.py>,然后開始寫代碼吧~
from django.contrib.auth.models import User, Group
from rest_framework import viewsets
from tutorial.quickstart.serializers import UserSerializer, GroupSerializer
class UserViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows users to be viewed or edited.
"""
queryset = User.objects.all().order_by('-date_joined')
serializer_class = UserSerializer
class GroupViewSet(viewsets.ModelViewSet):
"""
API endpoint that allows groups to be viewed or edited.
"""
queryset = Group.objects.all()
serializer_class = GroupSerializer
我們通過類<ViewSets>這個類,將視圖函式中功能一致的部分都整合到一起,這樣就不需要寫很多的視圖函式了,
當然, 在一些需要自定義的情況下我們也可以輕易地將整合好的視圖分離,但是使用<ViewSets>可以讓我們的邏輯整理的更加清晰同時代碼也更加簡潔,
路由設定(URLs)
接下來我們該設定我們的API路由了,打開<tutorial/urls.py>,
from django.urls import include, path
from rest_framework import routers
from tutorial.quickstart import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)
# Wire up our API using automatic URL routing.
# Additionally, we include login URLs for the browsable API.
urlpatterns = [
path('', include(router.urls)),
path('api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
因為我們使用<ViewSets>實體替代了原始的視圖,這讓我們可以通過在<DefaultRouter>的實體中,中注冊我們的<ViewSets>實體即可自動地為我們生成相應的路由,
當然,如果我們希望自定義路由使其功能更加豐富,也可以拋棄這個功能轉而使用普通的基于類的視圖,然后定義路由,
最后一步,將用戶登錄和登出視圖放置在了可瀏覽的API頁面內,這是一個可選擇項,如果你的需要使用可瀏覽的API頁面和用戶管理,
分頁
分頁功能讓你可以控制每頁顯示多少個物件,要使用它的話請在檔案<tutorial/settings.py>內添加以下代碼:
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
設定
打開設定模塊<tutorial/settings.py>,將<’rest_framework’>添加到<INSTALLED_APPS>,如下:
INSTALLED_APPS = [
...
'rest_framework',
]
以上,我們已經做完了,一個簡單的用戶管理API,并且可以在瀏覽器上快速訪問,測驗的API,看完以上東西你可能會想:”wtf???!!!,這是什么東西?”,接下來我們將做一些測驗,來幫助你理解,我們到底做了個什么的東西,
測驗API
現在我們可以開始測驗剛剛搭建好的API,不過在這之前我們先定一個小目標,比如先讓程式跑起來,
python manage.py runserver
如果小目標沒有實作,請查看錯誤資訊,然后翻回去仔細看看代碼,
接下來我們就可以訪問我們的API了,可以通過命令列訪問,使用curl工具:
bash: curl -H 'Accept: application/json; indent=4' -u admin:password123 http://127.0.0.1:8000/users/
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "[email protected]",
"groups": [],
"url": "http://127.0.0.1:8000/users/1/",
"username": "admin"
},
{
"email": "[email protected]",
"groups": [ ],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}
或者使用Httpie工具:
bash: http -a admin:password123 http://127.0.0.1:8000/users/
HTTP/1.1 200 OK
...
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"email": "[email protected]",
"groups": [],
"url": "http://localhost:8000/users/1/",
"username": "paul"
},
{
"email": "[email protected]",
"groups": [ ],
"url": "http://127.0.0.1:8000/users/2/",
"username": "tom"
}
]
}
或者直接使用瀏覽器,打開鏈接:http://127.0.0.1:8000/users/
如果你是通過瀏覽器訪問的,你需要在右上角登錄,因為這個管理工具是給admin用的,游客無法訪問,
如果還要深入學習和理解REST framework是如何將這些功能一步一步封裝到一起的,請繼續收看之后的指導文章,或者直接閱讀我們的API,
以上就是本文全部內容,如果你看不懂,那大概需要用django再做幾個小專案來熟悉一下django web應用的業務流程,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/205837.html
標籤:Python
