Django REST framework 簡單使用

django-rest-framework,是一套基于DjangoREST 框架,是一個強大靈活的構(gòu)建 Web API 的工具包。本文介紹一下 django-rest-framework 的簡單使用。示例代碼地址:https://github.com/jhhnjhhn/drf-test

環(huán)境

Python (3.6.2)

Django (1.11.5)

djangorestframework (3.6.4)

使用

1、創(chuàng)建項目

mkdir drf-test

cd drf-test

django-admin.py startproject drfTest

cd drfTest/

python manage.py startapp api

2、修改配置文件

編輯 drtTest/setting.py 文件,在 INSTALLED_APPS 添加新應(yīng)用。

INSTALLED_APPS = (
    ...
    'rest_framework',
    'api.apps.ApiConfig',
)

3、創(chuàng)建模型和數(shù)據(jù)庫

打開 drtTest/models.py 文件,創(chuàng)建一個簡單 Product 模型,字段包括 created、name、describe、price、isDelete。

class Product(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    name = models.CharField(max_length=100, default='')
    describe = models.CharField(max_length=500, default='')
    price = models.FloatField()
    isDelete = models.BooleanField(default=False)

    class Meta:
        ordering = ('created',)

模型遷移,并同步數(shù)據(jù)庫。

python manage.py makemigrations api
python manage.py migrate

4、創(chuàng)建序列化器

序列化器可以把模型轉(zhuǎn)換成需要返回的 json、xml 類型數(shù)據(jù)。在 api 文件下創(chuàng)建 serializers.py 文件。

from rest_framework import serializers
from snippets.models import Product

class ProductSerializer(serializers.ModelSerializer):
    class Meta:
        model = Product
        fields = ('id', 'created', 'name', 'describe', 'price', 'isDelete')

5、url配置

創(chuàng)建 api/urls.py 文件,用 Router 自動處理 url 和 view 的連接。

from django.conf.urls import url, include
from api import views

# api url 配置
urlpatterns = [

]

在 drtTest/urls.py 中鏈接 api 應(yīng)用程序的 url。

from django.conf.urls import url, include
from api import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('api.urls')),
]

6、編寫視圖

編寫視圖有很多種方式,下面使用比較簡單的兩種:

1.使用 APIView
from rest_framework.views import APIView
from django.http import JsonResponse

# Create your views here.
class GetMessageView(APIView):
    # get 請求
    def get(self, request):
        # 獲取參數(shù)數(shù)據(jù)
        get = request.GET
        # 獲取參數(shù) a
        a = get.get('a')
        print(a)
        # 返回信息
        d = {
            'status': 1,
            'message': 'success',
            }
        return JsonResponse(d)

api/urls.py 中配置 url

urlpatterns = [
      url(r'^test/$', views.GetMessageView.as_view()),
]

終端輸入命令,開啟服務(wù)。

python manage.py runserver

打開瀏覽器訪問 http://127.0.0.1:8000/test/?a=100 接口返回

{"status": 1, "message": "success"}

終端輸出

100
[15/Sep/2017 02:39:55] "GET /test/?a=100 HTTP/1.1" 200 35
2.使用 viewsets
from rest_framework import viewsets
from rest_framework.response import Response
from rest_framework.decorators import detail_route, list_route
from api.serializers import ProductSerializer
from api.models import Product

class ProductViewSet(viewsets.ModelViewSet):
    queryset = Product.objects.all()
    serializer_class = ProductSerializer

    @detail_route()
    def changeName(self, request, *args, **kwargs):
        get = request.GET
        product = self.get_object()
        product.name = get.get('newName')
        product.save()

        return Response(product.name)

    @list_route()
    def filterProducts(self, request):
        products = Product.objects.filter(id__in=range(3))
        serializer = ProductSerializer(products, many=True)

        return Response(serializer.data)

api/urls.py 配置 url,使用 Router 自動處理 url 和 view 的連接。

from rest_framework.routers import DefaultRouter
from api.views import ProductViewSet

router = DefaultRouter()
router.register(r'product', views.ProductViewSet)

# api url 配置
urlpatterns = [
    url(r'^', include(router.urls)),
    url(r'^test/$', views.GetMessageView.as_view()),
]

終端輸入命令,開啟服務(wù)。

python manage.py runserver

測試
獲取產(chǎn)品列表: http://127.0.0.1:8000/product,沒有的話在頁面底部添加幾條
通過產(chǎn)品 id 獲取單個產(chǎn)品: http://127.0.0.1:8000/product/2/
修改產(chǎn)品名稱: http://127.0.0.1:8000/product/2/changeName/?newName=qwer
獲取 id 為 0-3 的產(chǎn)品: http://127.0.0.1:8000/product/filterProducts/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容