django原生api介面

来源:https://www.cnblogs.com/minqiliang/archive/2022/10/24/16822047.html
-Advertisement-
Play Games

django原生api介面 1.1 創建django項目 django-admin startproject drfdemo1 1.2 創建app django-admin startapp app 1.3 創建數據模型 app/models.py中編寫如下代碼: from django.db im ...


django原生api介面

1.1 創建django項目

django-admin startproject drfdemo1

1.2 創建app

django-admin startapp app

1.3 創建數據模型

app/models.py中編寫如下代碼:

from django.db import models


class studentsInfo(models.Model):
    name = models.CharField(max_length=12, verbose_name='姓名')
    sex = models.CharField(max_length=1, verbose_name='性別')
    age = models.IntegerField(verbose_name='年齡')
    classroom = models.CharField(max_length=10, verbose_name='教室')
    info = models.CharField(max_length=100, verbose_name='個人簡介')

1.4 配置環境

drfdemo1/settings.py:

# 後端只提供介面,不使用後臺等其他功能,所以將無用功能註釋掉可以減輕壓力,提高性能
INSTALLED_APPS = [
    # 'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    # 'django.contrib.messages',
    # 'django.contrib.staticfiles',
    'app',
]

# 由於我們在使用post請求提交數據到後臺的時候,django會有一個csrftoken驗證,這樣使用postman工具提交表單數據時就會失敗,所以註釋掉csrf中間件
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]


# 由於是測試,所以不再使用mysql,使用sqlite3比較方便
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

# 設置為中文
LANGUAGE_CODE = 'zh-hans'

1.5 數據遷移

python manage.py makemigration
python manage.py migrate

1.6 編寫視圖代碼

app/views.py:

import json
from .models import *
from django.views import View
from django.http import JsonResponse

"""
post /students/ 添加一個學生
GET  /students/ 獲取所有學生信息

GET  /students/<pk>/獲取一個學生信息
PUT  /students/<pk>/ 更新一個學生信息
DELETE /students/<pk>/ 刪除一個學生信息

一個路由對應一個視圖類,把5個api介面分為兩個視圖類來寫
"""


# 原生介面
class studentView(View):
    def post(self, request):
        # 1.接受客戶端提交的數據
        name = request.POST.get("name")
        sex = request.POST.get("sex")
        age = request.POST.get("age")
        classroom = request.POST.get("classroom")
        info = request.POST.get("info")

        # 2.操作資料庫,保存數據
        instance = studentsInfo.objects.create(
            name=name,
            sex=sex,
            age=age,
            classroom=classroom,
            info=info
        )

        # 3.返回結果
        return JsonResponse({
            "id": instance.id,
            "name": instance.name,
            "sex": instance.sex,
            "age": instance.age,
            "classroom": instance.classroom,
            "info": instance.info
        }, status=201, json_dumps_params={"ensure_ascii": False})

    def get(self, request):
        """
        獲取多個學生信息
        """
        students_list = studentsInfo.objects.values()
        return JsonResponse(data=list(students_list), status=200, safe=False, json_dumps_params={"ensure_ascii": False})


class studentInfoView(View):
    def get(self, request, pk):
        """
        獲取一條數據
        """
        try:
            instance = studentsInfo.objects.get(id=pk)
        except studentsInfo.DoesNotExist:
            return JsonResponse(data={"message": "學生不存在"}, status=404)
        else:
            return JsonResponse({
                "id": instance.id,
                "name": instance.name,
                "sex": instance.sex,
                "age": instance.age,
                "classroom": instance.classroom,
                "info": instance.info
            }, status=201, json_dumps_params={"ensure_ascii": False})

    def put(self, request, pk):
        # 1.接受客戶端提交的數據
        data = json.loads(request.body)
        name = data.get("name")
        sex = data.get("sex")
        age = data.get("age")
        classroom = data.get("classroom")
        info = data.get("info")

        # 2.操作資料庫,修改並保存數據
        try:
            instance = studentsInfo.objects.get(id=pk)
        except studentsInfo.DoesNotExist:
            return JsonResponse(data={"message": "學生不存在"}, status=404)
        else:
            instance.name = name
            instance.sex = sex
            instance.age = age
            instance.classroom = classroom
            instance.info = info
            instance.save()

        # 3.返回結果
        return JsonResponse({
            "id": instance.id,
            "name": instance.name,
            "sex": instance.sex,
            "age": instance.age,
            "classroom": instance.classroom,
            "info": instance.info
        }, status=201, json_dumps_params={"ensure_ascii": False})

    def delete(self, request, pk):
        try:
            studentsInfo.objects.get(id=pk).delete()
        except studentsInfo.DoesNotExist:
            return JsonResponse(data={"message": "您要刪除的數據不存在"}, status=404)
        else:
            return JsonResponse(data={"message": "刪除成功"})

1.7 配置路由

drfdemo1/urls.py:

from django.urls import path, include

urlpatterns = [
    # path('admin/', admin.site.urls),
    path('api/',include('app.urls')),
]

app/urls.py:

from django.urls import path,re_path
from .views import *

urlpatterns = [
    path('students/', studentView.as_view()),
    re_path(r'^students/(?P<pk>\d+)/$', studentInfoView.as_view())
]

1.8 啟動項目

python manage.py runserver 8000

1.9 測試api介面

1.9.1 添加一個學生

x2IIKO.png

返回數據:

{
    "id": 13,
    "name": "胡歌",
    "sex": "男",
    "age": "36",
    "classroom": "888",
    "info": "這個人很懶,什麼都沒有留下"
}

資料庫:

x27Fg0.png

1.9.2 獲取所有學生信息

x2IorD.png

返回數據

[
    {
        "id": 1,
        "name": "小明",
        "sex": "男",
        "age": 22,
        "classroom": "301",
        "info": "這個人很懶,什麼也沒有留下"
    },
    {
        "id": 2,
        "name": "小紅",
        "sex": "女",
        "age": 18,
        "classroom": "301",
        "info": "這個人很懶,什麼也沒有留下"
    },
    {
        "id": 3,
        "name": "張三",
        "sex": "男",
        "age": 25,
        "classroom": "307",
        "info": "這個人很懶,什麼也沒有留下"
    },
    {
        "id": 4,
        "name": "李四",
        "sex": "男",
        "age": 24,
        "classroom": "308",
        "info": "這個人很懶,什麼也沒有留下"
    },
    {
        "id": 5,
        "name": "閔麒良",
        "sex": "男",
        "age": 23,
        "classroom": "310",
        "info": "河工胡歌"
    },
    {
        "id": 12,
        "name": "孫明輝",
        "sex": "男",
        "age": 23,
        "classroom": "333",
        "info": "這個人很懶,什麼都沒有留下"
    },
    {
        "id": 13,
        "name": "胡歌",
        "sex": "男",
        "age": 36,
        "classroom": "888",
        "info": "這個人很懶,什麼都沒有留下"
    }
]

1.9.3 獲取一條數據

x2opqg.png

返回數據

{
    "id": 13,
    "name": "胡歌",
    "sex": "男",
    "age": 36,
    "classroom": "888",
    "info": "這個人很懶,什麼都沒有留下"
}

1.9.4 更新一條數據

x2oiIs.png

返回數據

{
    "id": 13,
    "name": "胡歌",
    "sex": "男",
    "age": 18,
    "classroom": 666,
    "info": "6666666666666666"
}

資料庫:

x27nUJ.png

1.9.5 刪除一條數據

x2oeMT.png

返回數據:

{
    "message": "刪除成功"
}

資料庫:

x2oYQK.png


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Alwaysblock1 組合邏輯always塊的使用,註意這裡的wire和reg綜合出來的結果是一樣的,這裡只是verilog語法導致二者聲明不一樣。 // synthesis verilog_input_version verilog_2001 module top_module( input ...
  • 目錄 一.OpenGL 反色 1.IOS Object-C 版本 2.Windows OpenGL ES 版本 3.Windows OpenGL 版本 二.OpenGL 反色 GLSL Shader 三.猜你喜歡 零基礎 OpenGL ES 學習路線推薦 : OpenGL ES 學習目錄 >> Op ...
  • 編程教材 《R語言實戰·第2版》Robert I. Kabacoff 課程教材《商務與經濟統計·原書第13版》 (安德森) P143、案例 Go Bananas #1 生產中斷的概率 c <- pbinom(4, 25, .08) # 4 是預設 P(x <= 4) answer1 <- 1 - c ...
  • Java 一直是一種面向對象的編程語言。這意味著 Java 編程中的一切都圍繞著對象(為了簡單起見,除了一些基本類型)。我們不僅有 Java 中的函數,它們還是 Class 的一部分,我們需要使用 class/object 來調用任何函數。 函數式介面 當我們研究一些其他的編程語言時,比如C++,J ...
  • 在筆者前面有一篇文章`《驅動開發:斷鏈隱藏驅動程式自身》`通過摘除驅動的鏈表實現了斷鏈隱藏自身的目的,但此方法恢復時會觸發PG會藍屏,偶然間在網上找到了一個作者介紹的一種方法,覺得有必要詳細分析一下他是如何實現的進程隱藏的,總體來說作者的思路是最終尋找到`MiProcessLoaderEntry`的... ...
  • 前言 一. 數據來源分析 明確需求, 我們採集網上什麼數據內容, 在什麼地方 分析我們想要高清原圖在什麼地方有 瀏覽器自帶工具: 開發者工具 F12 滑鼠右鍵點擊 插件 選擇 network 刷新網頁 點擊選擇 Img 可以直接找到圖片地址 通過搜索分析, 可以知道, 我們想要圖片原圖url 就在 ...
  • Eclipse插件開發的點點滴滴 新公司做的是桌面應用程式, 與之前一直在做的web頁面 ,相差甚大 。 這篇文章是寫於2022年10月底,這時在新公司已經入職了快三月。寫作目的是:國內對於eclipse插件開發相關的文檔是少之又少,這三個月我們小組翻遍了國外文檔,勉強將軟體拼湊出並release出 ...
  • @ 起因 近期身邊的一位朋友來尋求幫助,她在日常工作時,總是需要做一些重覆的事情,所以想著是否能通過程式實現自動化的操作。 具體需求為,每天會收到一份固定格式的Word文件,然後根據其中的內容,填充到固定的PPT模板中,最終生成圖片輸出。 過程 確定工具 有了需求後,第一件事自然是在網路上查找是否有 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...