用 Django 開發(fā)一個 Python Web API的方法步驟
Django 是 Python 編程語言驅(qū)動的一個開源模型-視圖-控制器(MVC)風格的 Web 應(yīng)用程序框架。它是Python API開發(fā)中最受歡迎的名稱之一,自2005年成立以來,其知名度迅速提升。
Django由Django軟件基金會(Django Software Foundation)維護,并獲得了社區(qū)的大力支持,在全球擁有11,600多個成員。在Stack Overflow上,Django大約有191,000個帶標簽的問題。Spotify,YouTube和Instagram等網(wǎng)站都依賴Django進行應(yīng)用程序和數(shù)據(jù)管理。
本文演示了使用HTTP協(xié)議的GET方法從服務(wù)器獲取數(shù)據(jù)的簡單API。
建立一個項目
首先,為您的Django應(yīng)用程序創(chuàng)建一個結(jié)構(gòu);您可以在系統(tǒng)上的任何位置執(zhí)行此操作:
$ mkdir myproject $ cd myproject
然后創(chuàng)建一個虛擬環(huán)境,它能夠使我們根據(jù)需要安裝一些特定的包來跑通我們的程序,并且不影響當前環(huán)境,用完退出虛擬環(huán)境即可。
$ python3 -m venv env $ source env/bin/activate
在Windows上,使用命令env \ Scripts \ activate激活Python虛擬環(huán)境。
安裝Django和Django REST框架
接下來,安裝Django和Django REST框架模塊:
$ pip3 install django $ pip3 install djangorestframework
實例化一個新的Django項目
既然您已經(jīng)為應(yīng)用程序創(chuàng)建了工作環(huán)境,那么您必須實例化一個新的Django項目。與像Flask這樣的小框架不同,Django在此過程中包含專用命令(請注意第一個命令中的結(jié)尾.字符):
$ django-admin startproject tutorial . $ cd tutorial $ django-admin startapp quickstart
Django使用數(shù)據(jù)庫作為其后端,因此您應(yīng)該在開始開發(fā)之前同步數(shù)據(jù)庫??梢允褂眠\行django-admin命令時創(chuàng)建的manage.py腳本來管理數(shù)據(jù)庫。由于您當前位于tutorial路徑中,因此請使用../命令來運行腳本,該腳本位于同一個路徑中:
$ python3 ../manage.py makemigrations No changes detected $ python4 ../manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: Applying contenttypes.0001_initial... OK Applying auth.0001_initial... OK Applying admin.0001_initial... OK Applying admin.0002_logentry_remove_auto_add... OK Applying admin.0003_logentry_add_action_flag_choices... OK Applying contenttypes.0002_remove_content_type_name... OK Applying auth.0002_alter_permission_name_max_length... OK Applying auth.0003_alter_user_email_max_length... OK Applying auth.0004_alter_user_username_opts... OK Applying auth.0005_alter_user_last_login_null... OK Applying auth.0006_require_contenttypes_0002... OK Applying auth.0007_alter_validators_add_error_messages... OK Applying auth.0008_alter_user_username_max_length... OK Applying auth.0009_alter_user_last_name_max_length... OK Applying auth.0010_alter_group_name_max_length... OK Applying auth.0011_update_proxy_permissions... OK Applying sessions.0001_initial... OK
在Django中創(chuàng)建用戶
使用示例密碼password123創(chuàng)建一個名為admin的初始用戶:
$ python3 ../manage.py createsuperuser \ --email admin@example.com \ --username admin
根據(jù)提示創(chuàng)建密碼。
在Django中實現(xiàn)序列化組件和視圖層
為了使Django能夠?qū)⑿畔鬟f給HTTP GET請求,必須將傳遞對象轉(zhuǎn)換為有效的響應(yīng)數(shù)據(jù)。Django為此實現(xiàn)了序列化組件。
在您的項目中,通過創(chuàng)建一個名為quickstart / serializers.py的新模塊來定義一些序列化器,該模塊將用于數(shù)據(jù)傳輸:
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']
Django中的視圖是一個接受Web請求并返回Web響應(yīng)的函數(shù)。響應(yīng)可以是HTML,或者是HTTP重定向,或者是HTTP錯誤,JSON或XML文檔,圖像或TAR文件,或者可以從Internet獲得的任何其他內(nèi)容。要創(chuàng)建視圖函數(shù),請打開quickstart / views.py并輸入以下代碼。該文件模板已經(jīng)存在,并且其中包含一些樣板文本,因此請保留該文本并將其添加到文件中:
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 allows users to be viewed or edited. """ queryset = User.objects.all().order_by('-date_joined') serializer_class = UserSerializer class GroupViewSet(viewsets.ModelViewSet): """ API endpoint allows groups to be viewed or edited. """ queryset = Group.objects.all() serializer_class = GroupSerializer
使用Django生成URL
現(xiàn)在,您可以生成URL,以便人們可以訪問您的API。在文本編輯器中打開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) # Use automatic URL routing # Can also include login URLs for the browsable API urlpatterns = [ path('', include(router.urls)), path('api-auth/', include('rest_framework.urls', namespace='rest_framework')) ]
調(diào)整您的Django項目設(shè)置
此示例項目的設(shè)置模塊存儲在tutorial / settings.py中,因此請在文本編輯器中將其打開,然后將rest_framework添加到INSTALLED_APPS列表的末尾:
INSTALLED_APPS = [ ... 'rest_framework', ]
測試您的Django API
現(xiàn)在,您可以測試已構(gòu)建的API。首先,從命令行啟動內(nèi)置服務(wù)器:
$ python3 manage.py runserver
您可以使用curl獲取URL http:// localhost:8000 / users來訪問您的API:
$ curl --get http://localhost:8000/users/?format=json [{"url":"http://localhost:8000/users/1/?format=json","username":"admin","email":"admin@example.com","groups":[]}]
或使用Firefox瀏覽器等:
有關(guān)使用Django和Python的RESTful API的更深入的知識,請參閱Django文檔(https://docs.djangoproject.com/en/2.2/)。
到此這篇關(guān)于用 Django 開發(fā)一個 Python Web API的方法步驟的文章就介紹到這了,更多相關(guān)Django 開發(fā)Python Web內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談keras通過model.fit_generator訓練模型(節(jié)省內(nèi)存)
這篇文章主要介紹了淺談keras通過model.fit_generator訓練模型(節(jié)省內(nèi)存),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06Keras Convolution1D與Convolution2D區(qū)別說明
這篇文章主要介紹了Keras Convolution1D與Convolution2D區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05Python 模擬生成動態(tài)產(chǎn)生驗證碼圖片的方法
這篇文章主要介紹了Python 模擬生成動態(tài)產(chǎn)生驗證碼圖片的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-02-02python實現(xiàn)微信每日一句自動發(fā)送給喜歡的人
這篇文章主要為大家詳細介紹了python實現(xiàn)微信每日一句自動發(fā)送給喜歡的人,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04一文帶你掌握Python中enumerate函數(shù)和for循環(huán)的對比
在Python編程中,循環(huán)是一項常見的任務(wù),而for循環(huán)是最常見的一種,然而,Python提供了enumerate函數(shù),它允許在迭代過程中訪問元素的同時獲得它們的索引,下面我們就來學習一下二者的區(qū)別吧2023-11-11python數(shù)據(jù)可視化自制職位分析生成崗位分析數(shù)據(jù)報表
之前網(wǎng)上也有不少關(guān)于行業(yè)的分析數(shù)據(jù),今天我們就根據(jù)不同崗位,公司類型規(guī)模,學歷要求,薪資分布等來進行分析,把職位分析功能集合封裝起來,做成一個小工具分享給大家吧2021-09-09