1. 程式人生 > >通過Django簡單實現RESTful API

通過Django簡單實現RESTful API

RESTful是一種前後端分離、通過呼叫API介面來實現具體的功能。
在RESTFUl中,每個URL視為一個資源,客戶端通過http動詞,對伺服器資源進行操作。

關於RESTful的概念和原理更詳細的介紹,可以參考下面阮大師的這篇文章,講的非常透徹。連結地址:
http://www.ruanyifeng.com/blog/2011/09/restful.html

我在Django環境中,是通過Django REST framework來實現RESTful API的

這裡假設讀者已經安裝好了python3及Django2.0的執行環境,並且已經配置好Django2.0,能執行Django2.0,Django2.0的環境部署的安裝不在本文的討論範圍,請自行百度或google。

Django REST framework的安裝環境很簡單,可以通過pip直接裝。我安裝的是djangorestframework 3.8.2 ,命令如下:

pip3 install djangorestframework

然後需要在Django中新建一個app,名稱叫apps

python manage.py startapp apps     

好了。下面就是具體的配置過程。
簡單來說,一個簡單的RESTful 功能的實現,需要更改5個檔案:
1、settings.py, 加上rest_framework和apps:

INSTALLED_APPS = [
   ...
   'rest_framework',
   'apps',
   ...
]

2、views.py,定義一個類:

class ServerList(APIView):
    def get(self, request):
        gg = serverinfo.objects.all()
        serializer = Serverserializer(gg, many=True)
        return Response(serializer.data)

3、urls.py, 加一行url:

path('serverlist/', views.ServerList.as_view()),

4、models.py,新建類:

class serverinfo(models.Model):
    id = models.AutoField(primary_key=True, null=False, verbose_name='ID')
    server_name = models.CharField(max_length=50, null=False, verbose_name='伺服器名稱')
    type = models.CharField(max_length=50, null=False, verbose_name='型別')
    server_ip = models.CharField(max_length=16, null=False, verbose_name='IP')

建了models之後,不要忘了執行makemigration和migrate,這兩個命令可以幫助你在資料庫建表。

5、新建一個檔案serializers.py
這個檔案有點兒類似django中的forms.py, 不過功能更強大,程式碼示例如下:

from rest_framework import serializers

class Serverserializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    server_name = serializers.CharField(required=True, max_length=50)
    type = serializers.CharField(required=True, max_length=50)
    server_ip = serializers.CharField(required=True, max_length=16)

最後安裝httpie模組便於對api進行除錯

pip3 install httpie

然後就可以運行了。這就是一個最簡單的restful實現。訪問Django的url試試

是不是簡單粗暴,當然,生產環境中的實際執行程式碼會比這個複雜的多,生產環境需要建立很多表,表之間需要建立很多外來鍵關聯等。

這裡只是簡單實現一個基本功能,希望能給各位以參考。

Restful參考連結:
http://www.cnblogs.com/zivwong/p/7417989.html