
直接使用pip安裝即可
pip install -i https://pypi.douban.com/simple djangorestframeworkpip install -i https://pypi.douban.com/simple markdown # Markdown support for the browsable API.
settings.py中將rest_framework字段添加到INSTALLED_APPS列表中即可
====================================================================================================================================================================================================================================================================================================================================
(資料圖片僅供參考)
接下來講解:
對象關系映射(Object Relational Mapping,簡稱ORM)模式的作用是在關系型數據庫與業務實體對象之間進行映射通過類和對象就能操作它所對應數據表中的數據(CRUD)
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "test", "HOST": "localhost", "PORT": 3306, "USER": "admin", "PASSWORD": "123456" }}
需要滿足的依賴
# 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.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)
# 生成遷移腳本python manage.py makemigrations# 生成數據表python manage.py migrate
terminal執行以上兩條命令,則在數據庫生成對應的表
上面生成遷移腳本和創建數據庫表的命令行都是針對所有的,如果只想創建某一個子應用的表呢?只需要在上面的命令行后面跟上子應用名即可
# 生成指定應用的遷移腳本python manage.py makemigrations 子應用名稱# 生成指定應用的數據表python manage.py migrate子應用名稱
在第二步的遷移步驟中,已經實現了如何通過數據模型創建數據庫表,我們知道數據庫表字段有各種屬性,如長度、字符類型、約束條件、默認值等等,在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會自動添加創建記錄時的時間按照上面的操作生成的數據庫表的表名默認為:子應用名稱_模型類名小寫,如果想自定義表名,只需要在數據模型類下面定義一個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操作之前,為了更好的debug,我們可以引入connection模塊,它可以在我們進行CRUD操作時,會顯示出對應的sql語句,通過sql語句,可以及時發現錯誤,也可以看到sql語句的性能是否達到最優
在視圖模塊中引入connection模塊
from django.db import connection
調試器上添加“connetion.queries”:
向數據表添加一條記錄,兩種方法
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")
project_obj = Projects.objects.get(id=3)project_obj.name = "某某知名項目"project_obj.save()2、用模型類名.objects.filter(字段名=值).update(字段名=修改的值)
Projects.objects.filter(id=2).update(name="某某優秀的項目")
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)
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"))
首先導入聚合函數
from django.db.models import Count,Sum,Max,Min,Avg用法
Projects.objects.annotate(Count("name"))Projects.objects.annotate(Max("name"))
Projects.objects.all().order_by("-name")
project_obj = Projects.objects.get(id=3) one = project_obj.delete()2.使用查詢集.delete()
Projects.objects.filter(id=3).delete()