中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁(yè) > news >正文

2019做網(wǎng)站賺錢么中國(guó)電信視頻app下載

2019做網(wǎng)站賺錢么,中國(guó)電信視頻app下載,查看wordpress版本號(hào),wordpress怎么多用戶目錄 配置環(huán)境創(chuàng)建 Django 項(xiàng)目和 APP項(xiàng)目組成  ?子目錄文件組成應(yīng)用文件組成 配置 settings.py啟動(dòng)項(xiàng)目 數(shù)據(jù)表創(chuàng)建models.pyDjango-models的常用字段和常用配置 Django-admin 引入admin后臺(tái)和管理員外鍵views.pyurls.pypostman接口測(cè)試 QuerySetInstance功能APIView 的概念…

目錄

  • 配置環(huán)境
  • 創(chuàng)建 Django 項(xiàng)目和 APP
  • 項(xiàng)目組成  ?
    • 子目錄文件組成
    • 應(yīng)用文件組成
  • 配置 settings.py
    • 啟動(dòng)項(xiàng)目
  • 數(shù)據(jù)表創(chuàng)建
    • models.py
    • Django-models的常用字段和常用配置
  • Django-admin 引入admin后臺(tái)和管理員
  • 外鍵
    • views.py
    • urls.py
    • postman接口測(cè)試
  • QuerySet
  • Instance功能
  • APIView 的概念
    • views.py
    • url.py
  • 序列化器serializers
    • serializer.py
  • 測(cè)試
  • Django-DRF 路由組件
  • Django-DRF 自定義函數(shù)
  • 參考

配置環(huán)境

創(chuàng)建虛擬環(huán)境

conda create -n erp-env python=3.9

激活虛擬環(huán)境

conda activate erp-env

requirements.txt文件

decorator==5.1.1
Django==4.2.3
django-debug-toolbar==4.1.0
django-extensions==3.2.3
django-filter==23.2
django-rest-framework==0.1.0
djangorestframework==3.14.0
drf-spectacular==0.26.3
  • Django 是一個(gè) Python web 框架,提供許多功能,如 ORM、認(rèn)證、表單、模板等,它可以幫助你更快、更輕松地開(kāi)發(fā) web 應(yīng)用程序。
  • DRF(django-rest-framework) 是一個(gè)基于 Django 的強(qiáng)大而靈活的 RESTful 框架,它提供了許多工具和庫(kù),可幫助你快速開(kāi)發(fā)基于 RESTful API 的 web 應(yīng)用程序。
  • Django-Filter 是一個(gè)基于 Django 的庫(kù),它提供了一種簡(jiǎn)單、靈活的方式來(lái)過(guò)濾 Django 模型的查詢集。Django-Filter 的 API 允許開(kāi)發(fā)者使用簡(jiǎn)單的查詢表達(dá)式,構(gòu)建和應(yīng)用復(fù)雜的過(guò)濾器,從而在查詢集中選擇和排除數(shù)據(jù)。
  • DRF Spectacular 是 DRF 的 OpenAPI 規(guī)范工具。它可以自動(dòng)構(gòu)建和生成 OpenAPI 規(guī)范文檔,并提供方便的 API 測(cè)試工具,使你能夠更加輕松地創(chuàng)建、測(cè)試和維護(hù) RESTful API。同時(shí),它也支持集成 Django Filter,允許你通過(guò) URL 參數(shù)過(guò)濾查詢數(shù)據(jù)。

進(jìn)入requirements.txt文件所在目錄

cd C:\Users\gxx\Desktop\djangolearning

安裝python庫(kù)

pip install -r requirements.txt

或者

pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple

在這里插入圖片描述
在這里插入圖片描述

創(chuàng)建 Django 項(xiàng)目和 APP

創(chuàng)建項(xiàng)目文件夾

django-admin startproject erp

(1)
進(jìn)入manage.py所在路徑

cd C:\Users\gxx\Desktop\djangolearning\erp

創(chuàng)建 APP

python manage.py startapp test1

(2)
或者
進(jìn)入指定路徑

cd C:\Users\gxx\Desktop\djangolearning\erp\apps

創(chuàng)建 APP

django-admin startapp test2

在這里插入圖片描述

項(xiàng)目組成  ?

  • 項(xiàng)目名文件夾
  • 子目錄下同名子文件夾
  • manage.py文件
    manage.py提供了一種命令行工具,允許你以多種方式與該Django項(xiàng)目進(jìn)行交互。如:python manage.py help,能列出它所能做的事情。注意,此文件一般情況下不需要改動(dòng)。
  • 應(yīng)用文件夾

子目錄文件組成

在這里插入圖片描述

  • _init_.py: 是一個(gè)空文件,作用是所在的這個(gè)目錄可以被當(dāng)作包使用。
  • settings.py:該Django項(xiàng)目整體配置文件。(該文件非常重要,建議認(rèn)真理解這個(gè)文件中可用的設(shè)置類型及其默認(rèn)值。)
  • urls.py:Django項(xiàng)目的URL設(shè)置??梢暺錇槟愕膁jango網(wǎng)站的目錄。
  • asgi.py與wsgi.py:常見(jiàn)的網(wǎng)關(guān)接口協(xié)議:CGI,FastCGI,WSGI,ASGI。asgi.py是異步服務(wù)器網(wǎng)關(guān)接口項(xiàng)目配置文件。ASGI描述了Python Web應(yīng)用程序和Web服務(wù)器之間的通用接口。與WSGI不同的是,ASGI允許每個(gè)應(yīng)用程序有多個(gè)異步事件。另外,ASGI支持同步和異步應(yīng)用程序。開(kāi)發(fā)人員可以將原有的同步WSGI Web應(yīng)用程序遷移到ASGI,也可以使用ASGI構(gòu)建新的異步Web應(yīng)用程序。

應(yīng)用文件組成

在這里插入圖片描述

  • _init_.py 是一個(gè)空文件,作用同前。

  • admin.py 文件跟網(wǎng)站的后臺(tái)管理相關(guān)。

  • models.py 文件跟數(shù)據(jù)庫(kù)操作相關(guān)。主要用一個(gè) Python 類來(lái)描述數(shù)據(jù)表。運(yùn)用這個(gè)類,你可以通過(guò)簡(jiǎn)單的 Python 的代碼來(lái)創(chuàng)建、檢索、更新、刪除 數(shù)據(jù)庫(kù)中的記錄而無(wú)需寫一條又一條的SQL語(yǔ)句。

  • views.py 包含了頁(yè)面的業(yè)務(wù)邏輯,接收瀏覽器請(qǐng)求,進(jìn)行處理,返回頁(yè)面操作相關(guān)。

  • tests.py 文件用于開(kāi)發(fā)測(cè)試用例,在實(shí)際開(kāi)發(fā)中會(huì)有專門的測(cè)試人員使用。

  • apps.py 文件夾是django1.10之后增加的,通常里面包含對(duì)應(yīng)用的配置。

  • migrations:django 1.8之后推出的migrations機(jī)制使django數(shù)據(jù)模式管理更容易。migrations機(jī)制有兩個(gè)指令,makemigrations和migrate。makemigrations指令是用models里面的model和當(dāng)前的migrations代碼里面的model做對(duì)比,如果有新的修改,就生成新migrations代碼。migrate指令是用migrations目錄中代碼文件和django數(shù)據(jù)庫(kù)django_migrations表中的代碼文件做對(duì)比,如果表中沒(méi)有,那就對(duì)沒(méi)有的文件按順序及依賴關(guān)系做migrate apply,然后再把代碼文件名加進(jìn)migrations表中。

  • migrations文件夾 里面自動(dòng)生成了_init_.py文件

配置 settings.py

加入安裝的庫(kù)和新增的APP

    'test1','rest_framework','django_filters','drf_spectacular',

在這里插入圖片描述

啟動(dòng)項(xiàng)目

啟動(dòng)Django服務(wù)

python manage.py runserver

在這里插入圖片描述
點(diǎn)擊http://127.0.0.1:8000
在這里插入圖片描述

數(shù)據(jù)表創(chuàng)建

模塊功能

如前所述,models.py文件主要用一個(gè) Python 類來(lái)描述數(shù)據(jù)表。運(yùn)用這個(gè)類,可以通過(guò)簡(jiǎn)單的 Python 代碼來(lái)創(chuàng)建、檢索、更新、刪除
數(shù)據(jù)庫(kù)中的記錄而無(wú)需寫一條又一條的SQL語(yǔ)句。在model.py中創(chuàng)建兩個(gè)表:產(chǎn)品分類表和產(chǎn)品信息表。

models.py

產(chǎn)品分類表和產(chǎn)品信息表

from django.db.models import *# Create your models here.
## 產(chǎn)品分類表
class GoodsCategory(Model):"""產(chǎn)品分類"""name = CharField(max_length=64, verbose_name='分類名稱')remark = CharField(max_length=64, null=True, verbose_name='備注', blank=True)## 產(chǎn)品表
class Goods(Model):"""產(chǎn)品"""# 外鍵category = ForeignKey(GoodsCategory, on_delete=SET_NULL, related_name='goods_set', null=True, verbose_name='產(chǎn)品分類',blank=True, )# on_deletenumber = CharField(max_length=32, verbose_name='產(chǎn)品編號(hào)')name = CharField(max_length=64, verbose_name='產(chǎn)品名稱')barcode = CharField(max_length=32, null=True, blank=True, verbose_name='條碼')spec = CharField(max_length=64, null=True, blank=True, verbose_name='規(guī)格')shelf_life_days = IntegerField(null=True, verbose_name='保質(zhì)期天數(shù)')purchase_price = FloatField(default=0, verbose_name='采購(gòu)價(jià)')retail_price = FloatField(default=0, verbose_name='零售價(jià)')remark = CharField(max_length=128, null=True, blank=True, verbose_name='備注')

合并數(shù)據(jù)庫(kù)

這兩個(gè)命令是Django框架中的關(guān)鍵命令,用于進(jìn)行數(shù)據(jù)庫(kù)遷移。當(dāng)你修改了Django模型后,你需要運(yùn)行這兩個(gè)命令,以將這些更改應(yīng)用到數(shù)據(jù)庫(kù)中。

python manage.py makemigrations

這個(gè)命令用于生成遷移腳本。當(dāng)你更新了模型文件之后,需要運(yùn)行該命令,Django會(huì)檢測(cè)模型的改變,然后自動(dòng)生成相應(yīng)的遷移腳本,存儲(chǔ)在 migrations/目錄下。通常來(lái)說(shuō),你需要針對(duì)每個(gè)應(yīng)用運(yùn)行一次該命令。

python manage.py migrate

這個(gè)命令用于將遷移腳本應(yīng)用到數(shù)據(jù)庫(kù)中。當(dāng)你在模型文件中進(jìn)行更改之后,需要先通過(guò) makemigrations命令生成遷移腳本,然后運(yùn)行該命令將這些腳本應(yīng)用到數(shù)據(jù)庫(kù)中。對(duì)于新的遷移腳本,Django會(huì)逐個(gè)執(zhí)行它們,從而更新數(shù)據(jù)庫(kù)結(jié)構(gòu)。對(duì)于已經(jīng)執(zhí)行過(guò)的腳本,Django會(huì)跳過(guò)它們,避免重復(fù)執(zhí)行。

這兩個(gè)命令是Django框架中非常重要的命令,在修改數(shù)據(jù)庫(kù)相關(guān)內(nèi)容時(shí)必須時(shí)刻清醒地記住使用它們。

在終端運(yùn)行命令

在這里插入圖片描述

Django-models的常用字段和常用配置

常用字段

CharField 用于存儲(chǔ)字符串類型,有最大長(zhǎng)度限制

IntegerField 用于存儲(chǔ)整數(shù)類型

FloatField用于存儲(chǔ)浮點(diǎn)數(shù)類型

BooleanField 用于存儲(chǔ)布爾類型

DateField 用于存儲(chǔ)日期類型

DateTimeField 用于存儲(chǔ)日期和時(shí)間類型

ImageField 用于存儲(chǔ)圖片類型

FileField 用于存儲(chǔ)文件類型

ForeignKey 外鍵 用于表示數(shù)據(jù)庫(kù)表之間的關(guān)聯(lián)關(guān)系

OneToOneField 一對(duì)一 用于表示一對(duì)一的關(guān)聯(lián)關(guān)系

ManyToManyField 多對(duì)多 用于表示多對(duì)多的關(guān)聯(lián)關(guān)系
  ?
常用配置

max_length 字段的最大長(zhǎng)度限制,可以應(yīng)用于多種不同的字段類型。

verbose_name 字段的友好名稱,便于在管理員后臺(tái)可視化操作時(shí)使用。

default 指定字段的默認(rèn)值。

null 指定字段是否可以為空。

null=True 設(shè)置允許該字段為 NULL 值

blank 指定在表單中輸入時(shí)是否可以為空白。

choices 用于指定字段的可選值枚舉列表,在最上面定義

字段定義

class DeliveryMaterial(Model):class Status(TextChoices):QUALIFIED = ('qualified', '良品')
UNQUALIFIED = ('unqualified', '不良品')status = CharField(max_length=32, choices=Status.choices, default=Status.QUALIFIED, verbose_name='狀態(tài)')

TextChoices 是 Django 3.0 引入的一個(gè)枚舉類,用于在模型字段中創(chuàng)建可選擇的、文本值的選項(xiàng)。

related_name 指定在多對(duì)多等關(guān)系中反向使用的名稱。

on_delete 指定如果外鍵關(guān)聯(lián)的對(duì)象被刪除時(shí)應(yīng)該采取什么操作。

Django-admin 引入admin后臺(tái)和管理員

創(chuàng)建后臺(tái) admin 管理員

在終端運(yùn)行命令

python manage.py createsuperuser
python manage.py runserver

在這里插入圖片描述
打開(kāi)網(wǎng)址 http://127.0.0.1:8000/admin
在這里插入圖片描述
在這里插入圖片描述
  ?

配置

admin.py文件中注冊(cè)你的模型:

from django.contrib import admin
from .models import *
# Register your models here.admin.site.register(Goods)
admin.site.register(GoodsCategory)

在這里插入圖片描述

外鍵

models.py

category = ForeignKey(GoodsCategory,on_delete=SET_NULL,related_name='goods_set',null=True,verbose_name='產(chǎn)品分類')

on_delete 設(shè)置當(dāng)外鍵對(duì)應(yīng)的數(shù)據(jù)被刪除時(shí)的反應(yīng)

null=True

概念

外鍵是一種用于建立表之間關(guān)聯(lián)關(guān)系的約束,通常指的是一個(gè)模型中的一個(gè)或多個(gè)字段的值必須符合另一個(gè)模型中對(duì)應(yīng)字段的值。

views.py

# Create your views here.
from django.shortcuts import render
from rest_framework.response import Response
from .models import *
from rest_framework.decorators import api_view
from django.shortcuts import get_object_or_404# Create your views here.
# GET
# POST# 函數(shù)式編程
@api_view(['POST', 'GET'])
def InsertGoodsCategory(request):category_name = request.data.get('分類名字')# 獲取分類對(duì)象或創(chuàng)建新的分類對(duì)象category, created = GoodsCategory.objects.get_or_create(name=category_name)# 判斷是否已存在分類if not created:return Response({"status": "已存在", "goods_category": category_name}, status=200)else:return Response({"message": f"Successfully inserted category '{category_name}'."})@api_view(['POST', 'GET'])
def FilterGoodsCategory(request):data = request.data.get('分類名字')goods = GoodsCategory.objects.filter(name=data)if goods.exists():return Response({"status": "已存在", "goods_category": data}, status=200)else:return Response({"status": "不存在", "goods_category": data}, status=404)

urls.py

  • 放入路由
import os
import sys
os.chdir(os.path.dirname(__file__))
sys.path.append("..")
from django.contrib import admin
from django.urls import path
from test1.views import *
from django.urls import include
from rest_framework import routersurlpatterns = [path('admin/', admin.site.urls),path('filtergoodscategory/', FilterGoodsCategory),path('insertgoodscategory/', InsertGoodsCategory),# path('filtergoodscategoryapi/', FilterGoodsCategoryAPI.as_view()),# path('getgoods/', GetGoods.as_view()),
]

運(yùn)行項(xiàng)目

python manage.py runserver

postman接口測(cè)試

  • 使用postman針對(duì) insertGoodsCategory/filtergoodscategory/API接口進(jìn)行測(cè)試,測(cè)試結(jié)果如下
http://127.0.0.1:8000/insertgoodscategory/

在這里插入圖片描述

http://127.0.0.1:8000/filtergoodscategory/

在這里插入圖片描述

在這里插入圖片描述

QuerySet

從數(shù)據(jù)庫(kù)中查詢結(jié)果存放的集合稱為 QuerySet。 Django ORM用到三個(gè)類:Manager、QuerySet、Model。每個(gè)Model都有一個(gè)默認(rèn)的
manager實(shí)例,名為objects。Django的ORM通過(guò)Model的objects屬性提供各種數(shù)據(jù)操作的接口(API),并通過(guò) Model.objects 方法返回QuerySet,生產(chǎn)符合查詢條件的列表,列表中包含多個(gè) Instance。

class QuerySet(model=None, query=None, using=None)[source]

其具有兩大特色
(1) 惰性:若這個(gè)對(duì)象中包含了需要的數(shù)據(jù)且需要使用時(shí),它會(huì)去DB中獲取數(shù)據(jù),否則不會(huì)獲取。 比如說(shuō)在內(nèi)部,創(chuàng)建、過(guò)濾、切片和傳遞一個(gè)QuerySet,而沒(méi)有進(jìn)行真正的數(shù)據(jù)執(zhí)行,不會(huì)真實(shí)操作數(shù)據(jù)庫(kù),被稱為惰性。
(2)緩存使用同一個(gè)查詢集,第一次使用時(shí)會(huì)發(fā)生數(shù)據(jù)庫(kù)的查詢,然后Django會(huì)把結(jié)果緩存下來(lái),再次使用這個(gè)查詢集時(shí)會(huì)使用緩存的數(shù)據(jù),減少了數(shù)據(jù)庫(kù)的查詢次數(shù)。

操作說(shuō)明

設(shè)定:已存在數(shù)據(jù)表定義如下:

class Goods(DjangoPeople):
{
number = CharField(max_length=32, verbose_name=‘編號(hào)’)
name = CharField(max_length=64, verbose_name=‘名稱’)
unit = CharField(max_length=64, verbose_name=‘單位’)
remark = CharField(max_length=256, verbose_name=‘備注’)
} 

all() :返回模型的所有對(duì)象,它的效果等價(jià)于不帶任何條件的 filter() 方法。

如:

DjangoPeople.objects.all() # 查詢所有 語(yǔ)句。

filter()(**kwargs) 用于返回符合條件的所有數(shù)據(jù)。

如:

DjangoPeople.objects.filter(name=“abc”) #取出name="abc"的DjangoPeople成員

又如:

DjangoPeople.objects.filter(name=“x”).filter(unit=“y”) #取出name="x"且unit="y"的DjangoPeople成員

get() 方法與 filter() 的作用類似,用于返回符合條件的單個(gè)對(duì)象但是可能會(huì)返回多個(gè)值

delete() :可以刪除符合條件的所有對(duì)象

如:

catagories_to_delete=DjangoPeople.objects.filter(name=“abc”)
deleted_count= categories_to_delete.delete()

update() :將符合條件的所有對(duì)象的某個(gè)字段值進(jìn)行更新

create()save() 方法的快捷方式,用于創(chuàng)建并保存一個(gè)新的對(duì)象。

如:

created_category = DjangoPeople.objects.create(name="abc")

count() :返回符合條件的對(duì)象數(shù)量

order_by() :對(duì)返回的對(duì)象進(jìn)行排序,默認(rèn)為升序。降序則在字段名前面加負(fù)號(hào)。

QuerySet其他的其接口定義,用法類似,這里不再一一贅述,需要運(yùn)用,可查閱Django官網(wǎng)。

在這里插入圖片描述

Instance功能

Instance指的是一個(gè) Django 模型的單個(gè)實(shí)例,也就是數(shù)據(jù)庫(kù)中的一行數(shù)據(jù)。相比于 QuerySet(查詢集合),它是針對(duì)單個(gè)對(duì)象的操作,用于創(chuàng)建、更新或者刪除單個(gè)模型實(shí)例。

創(chuàng)建一個(gè)對(duì)象:

Obj = Model(attr1=val1, attr2=val2),Obj.save()

更新一個(gè)對(duì)象:

Obj = Model.objects.get(id=xxx),Obj.attr1 = val1,Obj.save()

刪除一個(gè)對(duì)象:

Obj = Model.objects.get(id=xxx),Obj.delete()

QuerySet 適用于需要查找多個(gè)對(duì)象或進(jìn)行聚合操作的場(chǎng)景,而 Instance 適用于單獨(dú)對(duì)象的創(chuàng)建、修改和刪除操作。

APIView 的概念

APIview 是 Django REST Framework 提供的一個(gè)視圖類。它和 Django 中的 view 類有些相似,但是又有一些不同之處。APIview 可以處理基于 HTTP 協(xié)議的請(qǐng)求,并返回基于內(nèi)容協(xié)商的響應(yīng),它旨在提供一個(gè)易于使用且靈活的方式來(lái)構(gòu)建 API 視圖。

views.py

首先,self 表示當(dāng)前實(shí)例對(duì)象,這里指的是視圖類的實(shí)例對(duì)象。

request 表示當(dāng)前的請(qǐng)求對(duì)象,包含了客戶端發(fā)送的信息,例如請(qǐng)求頭、請(qǐng)求體等。

pk 是 path 參數(shù) int:pk,用于獲取請(qǐng)求中的產(chǎn)品 ID。

format 表示客戶端請(qǐng)求的響應(yīng)格式,例如 JSON、XML 等。這個(gè)參數(shù)通常不需要指定,會(huì)根據(jù)客戶端發(fā)送的 Accept 請(qǐng)求頭來(lái)自動(dòng)選擇響應(yīng)格式。如果客戶端指定了響應(yīng)格式,那么我們可以從請(qǐng)求中獲取到這個(gè)參數(shù)并且做出相應(yīng)的處理。

在這個(gè)方法中,我們需要通過(guò) pk 參數(shù)獲取到對(duì)應(yīng)的產(chǎn)品數(shù)據(jù),并將其序列化成 JSON 格式并返回給客戶端。具體的實(shí)現(xiàn)方式可以參考序列化器文檔和 Django ORM 文檔。
在這里插入圖片描述

在這里插入圖片描述

from django.shortcuts import render
from rest_framework.response import Response
from .models import *
from rest_framework.decorators import api_view
from django.shortcuts import get_object_or_404
from rest_framework.views import APIView
from .serializer import *
from rest_framework.decorators import actionfrom django.db.models import Q
from rest_framework.viewsets import ModelViewSet#### modelviewset
class GoodsCategoryViewSet(ModelViewSet):# 指定查詢集(用到的數(shù)據(jù))queryset = GoodsCategory.objects.all()# 指定查詢集用到的序列化容器serializer_class = GoodsCategorySerilizer@action(detail=False, methods=['get'])def latest(self, request):latest_obj = GoodsCategory.objects.latest('id')print(latest_obj)return Response("helllo 你調(diào)用了自定義的函數(shù)")@action(detail=False, methods=['get', 'post'])def delete_example(self, request):name = request.data.get('name')# 刪除名稱為 'name' 的商品categories_to_delete = GoodsCategory.objects.filter(name=name)# 使用delete()方法刪除對(duì)象deleted_count = categories_to_delete.delete()print(f"Deleted {deleted_count} categories.")@action(detail=False, methods=['get', 'post'])def create_example(self, request):name = request.data.get('name')# 使用create()方法創(chuàng)建新的商品分類對(duì)象created_category = GoodsCategory.objects.create(name)print("Created category:", created_category)# Create your views here.# GET
# POST#### 函數(shù)式編程
@api_view(['POST', 'GET'])
def FilterGoodsCategory(request):if request.method == 'GET':print(request.method)if request.method == 'POST':print(request.method)data = request.data.get('分類名字')goods_category = get_object_or_404(GoodsCategory, name=data)print(goods_category)# ans = Goods.objects.filter(category=goods_category).all().values()# print(ans)goods = Goods.objects.filter(category=goods_category)serializer = GoodsSerializer(goods, many=True)  # 請(qǐng)確保導(dǎo)入合適的序列化器# 輸出對(duì)象 和 數(shù)據(jù)類型print("object type:", type(Goods.objects))print("object.all() type:", type(Goods.objects.all()))print("object.all().values type:", type(Goods.objects.all().values()))# Instanceprint("object.get(id=1) type:", type(Goods.objects.get(id=1)))return Response(serializer.data)# return Response(ans)@api_view(['POST', 'GET'])
def InsertGoodsCategory(request):category_name = request.data.get('分類名字')# 獲取分類對(duì)象或創(chuàng)建新的分類對(duì)象category, created = GoodsCategory.objects.get_or_create(name=category_name)# 判斷是否已存在分類if not created:return Response({"status": "已存在", "goods_category": category_name}, status=200)else:return Response({"message": f"Successfully inserted category '{category_name}'."})@api_view(['POST', 'GET'])
def FilterGoodsCategory(request):data = request.data.get('分類名字')goods = GoodsCategory.objects.filter(name=data)if goods.exists():return Response({"status": "已存在", "goods_category": data}, status=200)else:return Response({"status": "不存在", "goods_category": data}, status=404)#### APIView
class GetGoods(APIView):def get(self, request):data = Goods.objects.all()serializer = GoodsSerializer(instance=data, many=True)print(serializer.data)return Response(serializer.data)def post(self, request):# 從請(qǐng)求數(shù)據(jù)中提取字段request_data = {"category": request.data.get("Goodscategory"),"number": request.data.get("number"),"name": request.data.get("name"),"barcode": request.data.get("barcode"),"spec": request.data.get("spec"),"shelf_life_days": request.data.get("shelf_life_days"),"purchase_price": request.data.get("purchase_price"),"retail_price": request.data.get("retail_price"),"remark": request.data.get("remark"),}# 使用 create() 方法創(chuàng)建新的商品對(duì)象new_goods = Goods.objects.create(**request_data)# 對(duì)創(chuàng)建的對(duì)象進(jìn)行序列化,并作為響應(yīng)返回serializer = GoodsSerializer(instance=new_goods)return Response(serializer.data)# 面向?qū)ο缶幊?/span>
class FilterGoodsCategoryAPI(APIView):# request 表示當(dāng)前的請(qǐng)求對(duì)象# self 表示當(dāng)前實(shí)例對(duì)象def get(self, request, format=None):print(request.method)return Response('ok')def post(self, request, format=None):print(request.method)return Response('ok')def put(self, request, format=None):print(request.method)return Response('ok')

url.py

在這里插入圖片描述

import os
import sys
os.chdir(os.path.dirname(__file__))
sys.path.append("..")from django.contrib import admin
from django.urls import pathfrom test1.views import *
from django.urls import include
from rest_framework import routers# 創(chuàng)建DefaultRouter對(duì)象,用于生成路由
router = routers.DefaultRouter()
# 將視圖集注冊(cè)到路由器上,字符串里的是URL路徑的前綴
router.register('GoodsCategory', GoodsCategoryViewSet)urlpatterns = [path('admin/', admin.site.urls),path('filtergoodscategory/', FilterGoodsCategory),path('insertgoodscategory/', InsertGoodsCategory),path('filtergoodscategoryapi/', FilterGoodsCategoryAPI.as_view()),path('getgoods/', GetGoods.as_view()),
]
# 把生成的url 添加到項(xiàng)目的url配置中
urlpatterns += router.urls

序列化器serializers

序列化器的作用

序列化將 querysetinstance 轉(zhuǎn)換為 json/xml/yaml 返回給前端
反序列化與序列化則相反

定義序列化器

定義類,繼承自 Serializer

通常新建一個(gè) serializers.py 文件 撰寫序列化內(nèi)容

suah as 目前只支持

read_only 只讀

label 字段說(shuō)明信息

max_length 最大長(zhǎng)度

serializer.py

在應(yīng)用文件夾(test1)下新建serializer.py文件

from rest_framework.serializers import *
from .models import *class GoodsCategorySerilizer(ModelSerializer):class Meta:model = GoodsCategoryfields = '__all__'# 構(gòu)建產(chǎn)品序列化器
class GoodsSerializer(ModelSerializer):# 外鍵字段相關(guān)的數(shù)據(jù) 需要單獨(dú)寫category = GoodsCategorySerilizer()class Meta:# 指定需要序列化的表model = Goods# 指定我們需要序列化的字段fields = '__all__'

a. 序列化單個(gè)對(duì)象

  • 獲取對(duì)象 data = Goods.objects.get(id=1)

  • 創(chuàng)建序列化器 sberializer = GoodsSerializer(instance=data)

  • 轉(zhuǎn)換數(shù)據(jù) print(serializer.data)

  • 注意點(diǎn):

    instance是一個(gè)參數(shù),用于指定要序列化或反序列化的 Python 對(duì)象。具體來(lái)說(shuō),它是一個(gè)類實(shí)例(Class Instance),通常是指一個(gè)從數(shù)據(jù)庫(kù)或其他數(shù)據(jù)源中檢索出來(lái)的模型實(shí)例(Model Instance)。

    當(dāng)我們需要將一個(gè)模型實(shí)例轉(zhuǎn)換為 JSON 或其他格式時(shí),可以使用 Django 的序列化器(Serializer)來(lái)實(shí)現(xiàn)。

  • 輸出:

    {'id': 1, 'number': '1', 'name': '第一個(gè)產(chǎn)品', 'purchase_price': 100.0, 'retail_price': 150.0, 'remark': '測(cè)試產(chǎn)品'}

b. 序列化多個(gè)對(duì)象

  data = Goods.objects.all() # 獲取對(duì)象# 創(chuàng)建序列化器,many表示序列化多個(gè)對(duì)象,默認(rèn)為單個(gè)serializer = GoodsSerializer(instance=data,many=True)print(serializer.data) # 轉(zhuǎn)換數(shù)據(jù)# 輸出:[OrderedDict([('id', 1), ('number', '1'), ('name', '第一個(gè)產(chǎn)品'), ('purchase_price', 100.0), ('retail_price', 150.0), ('remark', '測(cè)試產(chǎn)品')]), OrderedDict([('id', 2), ('number', '123'), ('name', '產(chǎn)品2'), ('purchase_price', 123.0), ('retail_price', 4123.0), ('remark', '測(cè)試產(chǎn)品2')])]  

在這里插入圖片描述

測(cè)試

python manage.py runserver

打開(kāi)網(wǎng)頁(yè)http://127.0.0.1:8000/admin/

在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

http://127.0.0.1:8000/getgoods/

在這里插入圖片描述
在這里插入圖片描述

Django-DRF 路由組件

DefaultRouter是Django REST framework中提供的一個(gè)路由器類,用于自動(dòng)生成URL路由。

路由器是將URL與視圖函數(shù)或視圖集關(guān)聯(lián)起來(lái)的一種機(jī)制。Django REST framework的路由器通過(guò)簡(jiǎn)單的配置可以自動(dòng)生成標(biāo)準(zhǔn)的URL路由,從而減少了手動(dòng)編寫URL路由的工作量。

DefaultRouter的使用方法

urls.py
在這里插入圖片描述
使用 routers.DefaultRouter()創(chuàng)建了一個(gè)默認(rèn)的路由器對(duì)象,并使用 router.register()方法注冊(cè)了一個(gè)視圖集,GoodsCategoryViewSet。這樣可以自動(dòng)為這個(gè)視圖集生成對(duì)應(yīng)的URL路由,并將其添加到 urlpatterns中。

http://127.0.0.1:8000/GoodsCategory/

在這里插入圖片描述

Django-DRF 自定義函數(shù)

自定義函數(shù)是什么?

from rest_framework.decorators import action

@action 是 Django REST framework 中的一個(gè)裝飾器,用于將自定義函數(shù)轉(zhuǎn)換為視圖集的一個(gè)動(dòng)作。@action 裝飾器提供了一種定義自定義函數(shù)的方式,這些函數(shù)并不直接對(duì)應(yīng)于標(biāo)準(zhǔn)的 CRUD 操作(Create-Read-Update-Delete),而是實(shí)現(xiàn)一些其他的自定義行為或業(yè)務(wù)邏輯。

“@action 裝飾器”用于在 ViewSet 中創(chuàng)建自定義動(dòng)作(custom action),為 ViewSet 提供了更靈活應(yīng)用且 @action 只在ViewSet視圖集中生效。視圖集中附加action裝飾器可接收兩個(gè)參數(shù):
(1)methods: 聲明該action對(duì)應(yīng)的請(qǐng)求方式.
(2)detail: True/False聲明該action的路徑是否是action對(duì)應(yīng)的請(qǐng)求方式。

在這里插入圖片描述
其中,detail=False 表示該動(dòng)作不需要處理單個(gè)對(duì)象,而是處理整個(gè)集合;

@action 裝飾的函數(shù)需要作為方法定義在視圖集類中,并且在使用 router.register() 注冊(cè)視圖集時(shí),需要指定 basename 參數(shù),以確保該動(dòng)作的 URL 能夠正確映射到視圖集。

參考

https://github.com/Joe-2002/sweettalk-django4.2#readme

http://www.risenshineclean.com/news/62164.html

相關(guān)文章:

  • 四川城鄉(xiāng)建設(shè)廳建筑特種作業(yè)證書seo整站優(yōu)化方案
  • 深圳程序開(kāi)發(fā)seo優(yōu)化排名推廣
  • 淄博哪家網(wǎng)絡(luò)公司做網(wǎng)站好鄭州seo價(jià)格
  • 成都網(wǎng)站服務(wù)網(wǎng)站設(shè)計(jì)與制作教程
  • 網(wǎng)頁(yè)設(shè)計(jì)題材優(yōu)化的含義
  • 一個(gè)公司的網(wǎng)站怎么做互聯(lián)網(wǎng)營(yíng)銷師培訓(xùn)大綱
  • 哪個(gè)建設(shè)網(wǎng)站好網(wǎng)站seo平臺(tái)
  • 本科畢設(shè)做網(wǎng)站多少錢百度如何快速收錄網(wǎng)站
  • 網(wǎng)站關(guān)鍵詞排名優(yōu)化技巧鐘南山今天感染新冠了
  • 無(wú)錫網(wǎng)站建設(shè)制作開(kāi)發(fā)廣西seo搜索引擎優(yōu)化
  • 網(wǎng)站開(kāi)發(fā)費(fèi)怎么做會(huì)計(jì)分錄做app的網(wǎng)站
  • 自己注冊(cè)網(wǎng)站靜態(tài)網(wǎng)頁(yè)制作
  • 工廠找訂單哪個(gè)平臺(tái)最好舉例說(shuō)明seo
  • 永嘉縣住房建設(shè)局網(wǎng)站百度seo排名如何提升
  • apache 配置網(wǎng)站百度資訊
  • 昆明網(wǎng)站建設(shè)公司_百度推廣怎么提高關(guān)鍵詞排名
  • 寧波專門做網(wǎng)站武漢大學(xué)人民醫(yī)院精神科
  • 宣城市建設(shè)監(jiān)督管理局網(wǎng)站下載企業(yè)宣傳網(wǎng)站
  • 婚慶網(wǎng)站源碼網(wǎng)絡(luò)銷售推廣公司
  • 軟件商城官網(wǎng)廈門seo
  • 武漢網(wǎng)站開(kāi)發(fā)招聘如何推廣網(wǎng)頁(yè)
  • 建行官方網(wǎng)站優(yōu)化大師是什么軟件
  • ps怎么做網(wǎng)站橫幅廣告長(zhǎng)沙h5網(wǎng)站建設(shè)
  • 做網(wǎng)站網(wǎng)頁(yè)建站企業(yè)網(wǎng)站
  • 沈陽(yáng)做網(wǎng)站怎樣收費(fèi)百度商業(yè)平臺(tái)官網(wǎng)
  • 醫(yī)院網(wǎng)站建設(shè)思路上海搜索引擎優(yōu)化公司
  • 營(yíng)銷型網(wǎng)站建設(shè) 價(jià)格軟文案例400字
  • 房山區(qū)網(wǎng)站建設(shè)做網(wǎng)站
  • 美妝網(wǎng)站模版360優(yōu)化大師舊版本
  • 網(wǎng)站開(kāi)發(fā)廈門廣告營(yíng)銷案例100例