<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用 Django 開(kāi)發(fā)一個(gè) Python Web API

          共 4693字,需瀏覽 10分鐘

           ·

          2020-11-29 02:28

          Django 是 Python 編程語(yǔ)言驅(qū)動(dòng)的一個(gè)開(kāi)源模型-視圖-控制器(MVC)風(fēng)格的 Web 應(yīng)用程序框架。它是Python API開(kāi)發(fā)中最受歡迎的名稱之一,自2005年成立以來(lái),其知名度迅速提升。

          Django由Django軟件基金會(huì)(Django Software Foundation)維護(hù),并獲得了社區(qū)的大力支持,在全球擁有11,600多個(gè)成員。在Stack Overflow上,Django大約有191,000個(gè)帶標(biāo)簽的問(wèn)題。Spotify,YouTube和Instagram等網(wǎng)站都依賴Django進(jìn)行應(yīng)用程序和數(shù)據(jù)管理。

          本文演示了使用HTTP協(xié)議的GET方法從服務(wù)器獲取數(shù)據(jù)的簡(jiǎn)單API。

          建立一個(gè)項(xiàng)目

          首先,為您的Django應(yīng)用程序創(chuàng)建一個(gè)結(jié)構(gòu);您可以在系統(tǒng)上的任何位置執(zhí)行此操作:

          $?mkdir?myproject
          $?cd?myproject

          然后創(chuàng)建一個(gè)虛擬環(huán)境,它能夠使我們根據(jù)需要安裝一些特定的包來(lái)跑通我們的程序,并且不影響當(dāng)前環(huán)境,用完退出虛擬環(huán)境即可。

          $?python3?-m?venv?env
          $?source?env/bin/activate

          在Windows上,使用命令env \ Scripts \ activate激活Python虛擬環(huán)境。

          安裝Django和Django REST框架

          接下來(lái),安裝Django和Django REST框架模塊:

          $?pip3?install?django
          $?pip3?install?djangorestframework

          實(shí)例化一個(gè)新的Django項(xiàng)目

          既然您已經(jīng)為應(yīng)用程序創(chuàng)建了工作環(huán)境,那么您必須實(shí)例化一個(gè)新的Django項(xiàng)目。與像Flask這樣的小框架不同,Django在此過(guò)程中包含專用命令(請(qǐng)注意第一個(gè)命令中的結(jié)尾.字符):

          $?django-admin?startproject?tutorial?.
          $?cd?tutorial
          $?django-admin?startapp?quickstart

          Django使用數(shù)據(jù)庫(kù)作為其后端,因此您應(yīng)該在開(kāi)始開(kāi)發(fā)之前同步數(shù)據(jù)庫(kù)。可以使用運(yùn)行django-admin命令時(shí)創(chuàng)建的manage.py腳本來(lái)管理數(shù)據(jù)庫(kù)。由于您當(dāng)前位于tutorial路徑中,因此請(qǐng)使用../命令來(lái)運(yùn)行腳本,該腳本位于同一個(gè)路徑中:

          $?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)建一個(gè)名為admin的初始用戶:

          $?python3?../manage.py?createsuperuser?\
          [email protected]?\
          ??--username?admin

          根據(jù)提示創(chuàng)建密碼。

          在Django中實(shí)現(xiàn)序列化組件和視圖層

          為了使Django能夠?qū)⑿畔鬟f給HTTP GET請(qǐng)求,必須將傳遞對(duì)象轉(zhuǎn)換為有效的響應(yīng)數(shù)據(jù)。Django為此實(shí)現(xiàn)了序列化組件。

          在您的項(xiàng)目中,通過(guò)創(chuàng)建一個(gè)名為quickstart / serializers.py的新模塊來(lái)定義一些序列化器,該模塊將用于數(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中的視圖是一個(gè)接受Web請(qǐng)求并返回Web響應(yīng)的函數(shù)。響應(yīng)可以是HTML,或者是HTTP重定向,或者是HTTP錯(cuò)誤,JSONXML文檔,圖像或TAR文件,或者可以從Internet獲得的任何其他內(nèi)容。要?jiǎng)?chuàng)建視圖函數(shù),請(qǐng)打開(kāi)quickstart / views.py并輸入以下代碼。該文件模板已經(jīng)存在,并且其中包含一些樣板文本,因此請(qǐ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,以便人們可以訪問(wèn)您的API。在文本編輯器中打開(kāi)urls.py,并將默認(rèn)示例代碼替換為以下代碼:

          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項(xiàng)目設(shè)置

          此示例項(xiàng)目的設(shè)置模塊存儲(chǔ)在tutorial / settings.py中,因此請(qǐng)?jiān)谖谋揪庉嬈髦袑⑵浯蜷_(kāi),然后將rest_framework添加到INSTALLED_APPS列表的末尾:

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

          測(cè)試您的Django API

          現(xiàn)在,您可以測(cè)試已構(gòu)建的API。首先,從命令行啟動(dòng)內(nèi)置服務(wù)器:

          $?python3?manage.py?runserver

          您可以使用curl獲取URL http:// localhost:8000 / users來(lái)訪問(wèn)您的API:

          $?curl?--get?http://localhost:8000/users/?format=json
          [{"url":"http://localhost:8000/users/1/?format=json","username":"admin","email":"[email protected]","groups":[]}]

          或使用Firefox瀏覽器等:

          有關(guān)使用Django和Python的RESTful API的更深入的知識(shí),請(qǐng)參閱Django文檔(https://docs.djangoproject.com/en/2.2/)。

          推薦閱讀



          如何在 Matplotlib 中更改繪圖背景


          Python 解釋器 PyPy 7.3.3 版本發(fā)布!


          有人在代碼里下毒!慎用 pip install 命令


          點(diǎn)擊下方閱讀原文加入社區(qū)會(huì)員



          點(diǎn)贊鼓勵(lì)一下

          瀏覽 68
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码毛片一区二区三区四区五区六区 | 蜜桃丰满熟妇av无码区不卡 | 视频黄在线观看免费 | 成人AV影院久久 | www.天天射视频 |