【Django之Django REST Framework框架安裝+Django之ORM框架】

2022-12-19 12:01:11 來源:51CTO博客

【Django之Django REST Framework框架安裝】

一、簡介

它是在Django基礎之上,進行了二次開發主要用于構建Restful API簡稱為DRF框架或者REST Framework框架

二、特性

提供了強大的Serializer序列化器,可以高效地進行序列化與反序列化操作提供了極為豐富的類視圖、Mixin擴展類、Viewset視圖集提供了直觀的Web API界面多種身份認證和權限認證強大的排序、過濾、分頁、搜索、限流等功能可擴展性強,插件豐富

三、安裝&配置

1.安裝

直接使用pip安裝即可

pip install -i https://pypi.douban.com/simple djangorestframeworkpip install -i https://pypi.douban.com/simple markdown  # Markdown support for the browsable API.

2.配置

settings.py中將rest_framework字段添加到INSTALLED_APPS列表中即可

====================================================================================================================================================================================================================================================================================================================================


(資料圖片僅供參考)

接下來講解:

【Django之ORM框架】

一、定義

對象關系映射(Object Relational Mapping,簡稱ORM)模式的作用是在關系型數據庫與業務實體對象之間進行映射通過類和對象就能操作它所對應數據表中的數據(CRUD)

二、數據遷移

1.配置數據庫連接信息

創建數據庫

配置數據庫:需要在全局settings.py中的DATABASES字段中配置數據庫信息

DATABASES = {    "default": {        "ENGINE": "django.db.backends.mysql",        "NAME": "test",        "HOST": "localhost",        "PORT": 3306,        "USER": "admin",        "PASSWORD": "123456"    }}

安裝mysqlclient

需要滿足的依賴

# Debian/Ubuntusudo apt-get install python-dev default-libmysqlclient-dev# Red Hat/CentOSsudo yum install python-devel mysql-devel# macOS (HomeBrew)brew install mysql-client
pip install mysqlclient

2.在models.py中定義模型類

2.1、可以在子應用projects/models.py文件中定義數據模型2.2、一個數據模型類對應一個數據表2.3、數據模型類,需要繼承Model父類或者Model子類2.4、在數據模型中,添加的類屬性(Field對象)來對應數據表中的字段

from django.db import modelsclass Projects(models.Model):    name = models.CharField(max_length=200)    age = models.CharField(max_length=50)

3.遷移

# 生成遷移腳本python manage.py makemigrations# 生成數據表python manage.py migrate

terminal執行以上兩條命令,則在數據庫生成對應的表

上面生成遷移腳本和創建數據庫表的命令行都是針對所有的,如果只想創建某一個子應用的表呢?只需要在上面的命令行后面跟上子應用名即可

# 生成指定應用的遷移腳本python manage.py makemigrations 子應用名稱# 生成指定應用的數據表python manage.py migrate子應用名稱

4、表的創建

在第二步的遷移步驟中,已經實現了如何通過數據模型創建數據庫表,我們知道數據庫表字段有各種屬性,如長度、字符類型、約束條件、默認值等等,在Django的數據模型中,我們并不需要去編寫sql語句來創建數據庫表,而是可以通過類和對象的方式進行數據庫的增刪改查等操作,這樣就方便了許多。

AutoField類、CharField類、IntegerField類、TextField類、DecimalField類、DateTimeField類、DateField類、TimeField類等等,它們都繼承了Field父類,我們通過查看Field源碼的構造方法,可以看到很多關于字段的屬性設置

def __init__(self, verbose_name=None, name=None, primary_key=False,                 max_length=None, unique=False, blank=False, null=False,                 db_index=False, rel=None, default=NOT_PROVIDED, editable=True,                 serialize=True, unique_for_date=None, unique_for_month=None,                 unique_for_year=None, choices=None, help_text="", db_column=None,                 db_tablespace=None, auto_created=False, validators=(),                 error_messages=None):
verbose_name:個性化信息primary_key:主鍵約束,如果某一個字段中設置了primary_key=True,那么Django就不會自動創建id字段max_length:至少要指定一個該字段,它代表此字段的最大長度,不能為負數,最大長度不能超過200unique:唯一鍵約束blank:指定前端用戶在創建數據時,是否需要傳遞,默認需要傳遞,如果不傳遞,設置為Truenull:指定數據在保存時是否可以為空,默認不能為空,為空設置為Truedefault:指定默認值,往往會跟black一起使用-help_text:幫助文本信息,在api接口文檔平臺和admin后端站點中會用于提示,往往跟verbose_name一致

而DateTimeField類、TimeField類也繼承了DateField類,DateField類中的構造方法也有新的參數

auto_now:設置成True后,Django會自動添加更新記錄時的時間auto_now_add:設置成True后,Django會自動添加創建記錄時的時間

5.修改表名

按照上面的操作生成的數據庫表的表名默認為:子應用名稱_模型類名小寫,如果想自定義表名,只需要在數據模型類下面定義一個Meta的子類

from django.db import modelsclass Projects(models.Model):    id = models.AutoField(primary_key=True)    name = models.CharField(max_length=200, verbose_name="項目名稱", help_text="項目名稱", unique=True)    leader = models.CharField(max_length=50)    programmer = models.CharField(max_length=50, verbose_name="開發人員", help_text="開發人員")    tester = models.CharField(max_length=50, verbose_name="測試人員", help_text="測試人員")    desc = models.TextField(verbose_name="項目簡介", help_text="項目簡介", blank=True, default="XXXX", null=True)    create_time = models.DateTimeField(auto_now_add=True, verbose_name="創建時間", help_text="創建時間")    update_time = models.DateTimeField(auto_now=True, verbose_name="更新時間", help_text="更新時間")    class Meta:        # Meta子類的類名固定,可以使用db_table類屬性來指定表名,使用verbose_name類屬性指定表的個性化描述        db_table = "tb_projects"        verbose_name = "項目表"

三、CRUD

在CRUD操作之前,為了更好的debug,我們可以引入connection模塊,它可以在我們進行CRUD操作時,會顯示出對應的sql語句,通過sql語句,可以及時發現錯誤,也可以看到sql語句的性能是否達到最優

在視圖模塊中引入connection模塊

from django.db import connection

調試器上添加“connetion.queries”:

1.c(create)

向數據表添加一條記錄,兩種方法

1、使用模型類對象來創建:
project_obj = Projects(name="xxx項目3", leader="xxx項目負責人3",tester="xxx測試3", programmer="xxx研發3")project_obj.save()
2、可以使用查詢集的create方法,使用模型類.objects.create()方法,無需調用save方法
project_obj = Projects.objects.create(name="xxx項目4", leader="xxx項目負責人4",tester="xxx測試4", programmer="xxx研發4")

2.u(update)

1、先獲取模型類對象,然后修改某些字段,再調用save方法保存
project_obj = Projects.objects.get(id=3)project_obj.name = "某某知名項目"project_obj.save()
2、用模型類名.objects.filter(字段名=值).update(字段名=修改的值)
Projects.objects.filter(id=2).update(name="某某優秀的項目")

3.r(retrieve)

1. 獲取所用記錄--all()方法:qs = Projects.objects.all()
返回QuerySet查詢集對象(實際上是多個模型類類對象的列表)支持數字索引取值(負索引不支持,返回模型類對象,一條記錄)、切片(返回QuerySet查詢集對象)for循環迭代,每次迭代取出一個模型類對象QuerySet查詢集對象.first()獲取第一個記錄、.last()方法獲取最后一條記錄.count()方法,獲取查詢集中數據記錄條數惰性查詢,只有你真正去使用數據時,才會去數據庫中執行sql語句,為了性能鏈式調用
2. 獲取指定記錄
get:(1)一般只能使用主鍵或者唯一鍵作為查詢條件;(2)如果查詢的記錄為空或者多條記錄,會拋出異常;(3)返回的模型類對象,會自動提交
project_obj = Projects.objects.get(id=1)
filter:通過過濾的方式查詢,每個字段都提供了很豐富的選項進行查詢操作Projects.objects.filter()a.filter支持多個過濾表達式,字段名__過濾表達式,返回的是查詢集b.字段名__startswith、字段名__istartswith:過濾以xxx開頭的字符串c.字段名__endswith、字段名__iendswith:過濾以xxx結尾的字符串d.字段名__gt:大于,__gte: >=, __le: <, __lte:<=e.字段名=條件與字段名__exact等價,在Django ORM中有一個內置的變量pk,為數據庫模型類的主鍵別名f.__contains、__icontains、__in、__isnullg.如果沒有指定的記錄,會返回空查詢集exclude:與filter相反,為反向過濾
Projects.objects.exclude(id=1)
3.關聯查詢
通過從表的信息獲取父表的記錄,從表模型類名小寫 _從表字段名_ 查詢表達式惰性:查詢集對象,只有去使用的時候,才會執行sql語句qs = Projects.objects.filter(interfaces__name__regex="^[0-9]")
4.邏輯關系查詢
查詢集支持鏈式調用,可以使用filter方法去過濾同一行中的多個filter是“與”的關系
qs =Projects.objects.filter(name__startswith="x").filter(programmer__contains="4")qs = Projects.objects.filter(name__startswith="x", programmer__contains="4")
查詢“或”的關系.filter(Q(查詢條件1) | Q(查詢條件2))
from django.db.models import QProjects.objects.filter(Q(leader__contains="1") | Q(programmer__contains="4"))
5.聚合查詢

首先導入聚合函數

from django.db.models import Count,Sum,Max,Min,Avg
用法
Projects.objects.annotate(Count("name"))Projects.objects.annotate(Max("name"))
6.排序
a.使用order_by來進行排序b.可以使用字段名作為排序條件,默認為升序,c.使用“-”字段名,為降序d.可以同時指定多個排序條件
Projects.objects.all().order_by("-name")

4.d(delete)

1.使用模型對象.delete()
project_obj = Projects.objects.get(id=3) one = project_obj.delete()
2.使用查詢集.delete()
Projects.objects.filter(id=3).delete()

標簽: 數據模型 可以使用 查詢條件

上一篇:每日動態!Prometheus Metrics設計的最佳實踐和應用實例
下一篇:計算存儲分離在京東云消息中間件JCQ上的應用