該項目是按照官網quickstart進行的,具體也可查看rest-framework官網:
https://www.django-rest-framework.org/tutorial/quickstart/#
一.安裝依賴庫
此處請確認你的python版本,如果你使用的是python3,那么在pip的時候和進入python命令行的時候要使用pip3和python3的命令
pip3 install django
pip3 install djangorestframework
二.創建項目
(一)quickstart
# 創建項目文件夾
mkdir tutorial
cd tutorial/
# 創建一個django項目并創建一個應用
django-admin startproject tutorial .
(上一個命令中最后還有一個點別丟掉,否則創建的項目目錄會多一層)
django-admin startapp quickstart
以上步驟完成后目錄結構如下:
在這里說一下project和app的關系。一個應用是完成某件事的一個web程序,比如一個博客系統等。而一個工程包含網站的一系列配置以及多個應用。一個工程可以包括多個應用,一個應用也可以存在于多個工程
首次初始化你的數據庫:
cd ..
python3 manage.py migrate
此時顯示:
然后創建數據庫初始化的用戶名密碼:
python manage.py createsuperuser --email [email protected] --username admin
三.編寫項目
現在用ide打開剛才創建的工程,開始coding...
1.序列化
首先要定義一些序列化,所以來創建一些序列化的東西
創建一個py文件,具體位置為: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')
在這里我們使用超鏈接序列化器HyperlinkedModelSerializer,當然你也可以使用其他主鍵字段和其他各種關系,但Hyperlinked比較更restful化.
序列化小知識:
在程序運行的過程中,所有的變量都是在內存中,比如,定義一個dict:
d = dict(name='Bob', age=20, score=88)
可以隨時修改變量,比如把name
改成'Bill'
,但是一旦程序結束,變量所占用的內存就被操作系統全部回收。如果沒有把修改后的'Bill'
存儲到磁盤上,下次重新運行程序,變量又被初始化為'Bob'
。
我們把變量從內存中變成可存儲或傳輸的過程稱之為序列化,在Python中叫pickling,在其他語言中也被稱之為serialization,marshalling,flattening等等,都是一個意思。
序列化之后,就可以把序列化后的內容寫入磁盤,或者通過網絡傳輸到別的機器上。
反過來,把變量內容從序列化的對象重新讀到內存里稱之為反序列化,即unpickling。
2.創建視圖
現在我們來創建視圖,打開文件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
3.URLs
接下來進行url的編輯,操作文件為:tutorial/urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url,include
from rest_framework import routers
from tutorial.quickstart import views
router=routers.DefaultRouter()
#定義路由地址
router.register(r'users',views.GroupViewSet)
router.register(r'groups',views.GroupViewSet)
#注冊新的路由地址
urlpatterns = [
path('admin/', admin.site.urls),
url(r'^',include(router.urls)),
url(r'^api-auth/',include('rest_framework.urls'),namespace='rest_framework')
]
4.頁碼
每個分頁控制多少個返回對象,在tutorial/settings.py
REST_FRAMEWORK = {
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
'PAGE_SIZE': 10
}
5.settings
在tutorial/settings.py里的INSTALLED_APPS中添加'rest_framework'
到現在,我們的quickstart完成啦
下面來進行一些調試
6.調試接口
輸入的命令
python3 manage.py runserver
此時訪問http://127.0.0.1:8000/,可以看到如下界面:
訪問http://127.0.0.1:8000/users/結果如下:
到這里,我們就成功創建了一個django-rest項目啦~~~~~