【Django使用】10大章31模塊md文檔,第5篇:Django模板和數據庫使用

當你考慮開發現代化、高效且可擴展的網站和Web應用時,Django是一個強大的選擇。Django是一個流行的開源Python Web框架,它提供了一個堅實的基礎,幫助開發者快速構建功能豐富且高度定制的Web應用

全套Django筆記直接地址: 請移步這里


共 10 章,31 子模塊


模板

模板使用

1. 配置模板目錄

如果命令行創建的項目,需要手動配置模板文件目錄,如果是Pycharm創建的項目,則無需配置

  1. 在項目根目錄下創建模板目錄,比如叫 templates,后續開發模板文件會放在此目錄下
  2. 在項目的配置文件settings.py文件中,進行模板目錄的配置,如下:

django-004

2. 定義模板文件

templates目錄中新建一個模板文件,如index.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><!-- 顯示模板變量 --><h1>{{ name }}</h1></body>
</html>

3. 模板渲染

方式一: 通過render函數

from django.shortcuts import renderdef index(request):context = {'name': 'django' }# 參數1:請求對象# 參數2:模塊路徑# 參數3:字典數據return render(request, 'index.html', context)

方式二: 通過Template對象的render方法

from django.template import loaderdef index(request):# 模板對象template = loader.get_template('index.html')  # type: Template# 渲染得到字符串html_str = template.render(context)# 響應請求return HttpResponse(html_str)

模板語法

  1. 模板變量
  2. 模板語句
  3. 過濾器
  4. 注釋
  5. 模板繼承

1. 模板變量

變量名必須由字母、數字、下劃線(不能以下劃線開頭)和點組成,語法如下:

{{ 變量 }}

模板變量可以使python的內建類型,也可以是對象。

def index(request):context = {'name': 'django','my_list': ['python', 'java', 'php', 'c/c++'],'my_dict': {'name': 'python','age': 20,'gender': '男',}}return render(request, 'index.html', context)
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body><h1>{{ name }}</h1><h1>{{ my_list }}</h1>  <h1>{{ my_list.0 }}</h1>   <!-- 注意列表的取值方法 --><h1>{{ my_dict }}</h1><h1>{{ my_dict.name }}</h1>  <!-- 注意字典的取值方法 -->
</body>
</html>

2. 模板語句

1)for循環:

{% for item in 列表 %}{{forloop.counter}}  <1-- 表示當前是第幾次循環,從1開始 -->{{forloop.counter0}}  <!-- 表示當前是第幾次循環,從0開始 -->
{% empty %} 列表為空或不存在時執行此邏輯
{% endfor %}

2)if條件:

{% if ... %}邏輯1
{% elif ... %}邏輯2
{% else %}邏輯3
{% endif %}

比較運算符如下:

==
!=
<
>
<=
>=

布爾運算符如下:

and
or
not

注意:運算符左右兩側必須有空格。

{% if a == 1 %}  # 正確
{% if a==1 %}  # 錯誤

3. 過濾器

語法如下:

  • 使用管道符號|來應用過濾器,用于進行計算、轉換操作,可以使用在變量、標簽中。
  • 如果過濾器需要參數,則使用冒號:傳遞參數。
變量|過濾器:參數

列舉幾個如下:

  • safe,禁用html轉義(顯示html標簽樣式,而不是字符串)
  • length,長度,返回字符串包含字符的個數,或列表、元組、字典的元素個數。
  • default,默認值,如果變量不存在時則返回默認值。
data|default:'默認值'
  • date,日期,用于對日期類型的值進行字符串格式化,常用的格式化字符如下:

    • Y表示年,格式為4位,y表示兩位的年。
    • m表示月,格式為01,02,12等。
    • d表示日, 格式為01,02等。
    • j表示日,格式為1,2等。
    • H表示時,24進制,h表示12進制的時。
    • i表示分,為0-59。
    • s表示秒,為0-59。
value|date:"Y年m月j日  H時i分s秒"

4. 注釋

1)單行注釋語法如下:

{#...#}

2)多行注釋使用comment標簽,語法如下:

{% comment %}
...
{% endcomment %}

5. 模板繼承

  • 模板繼承和類的繼承含義是一樣的
  • 可以使用模板繼承來復用父模板,提高代碼的復用性,減輕開發人員的工作量。
  • 可以通過定義 block ,實現子模板對父模塊內容的重寫

父模板

如果發現在多個模板中某些內容相同,那就可以使用block標簽把這段內容定義到父模板中。

{% block 塊名稱 %}預留區域,可以編寫默認內容,也可以沒有默認內容
{% endblock %}

子模板

  1. 使用extends標簽繼承父模板,寫在子模板文件的第一行。
{% extends "父模板路徑" %}
  1. 對有需要的block進行重寫:

    • 不用重寫父模版中的所有block,如果子模版沒有重寫,則使用父模版定義的默認值。
    • 可以使用 block.super 來包含父模板的塊中定義的內容,如下
    {% block 名稱 %}子模板的內容{{ block.super }}    顯示父模板中block的內容{% endblock %}
    

數據庫

學習目標

  • 能夠進行Django數據庫配置
  • 掌握Django中模型類的定義
  • 掌握Django中的遷移命令的使用
  • 能夠使用Django的ORM進行數據庫的增刪改查
  • 能夠說明查詢集QuerySet的特點
  • 能夠說明模型類管理器Manager的作用

數據庫

ORM框架

  • ORM Object relational mapping 對象關系映射
  • 把類和數據庫表對應,把對象和表記錄對應,通過類和對象操作數據庫表中的數據,而不需要編寫SQL語句

ORM

  • Django框架實現了ORM 功能:

    • 不需要直接面向數據庫編程,通過模型類和對象完成數據表的增刪改查操作
    • 自動生成數據庫表
    • 通過配置切換使用不同的數據庫
  • ORM 開發步驟

    1. 配置數據庫

    2. 定義模型類 (models.py)

    3. 執行遷移命令,生成數據庫表

      1. 生成遷移文件: python manage.py makemigrations
      2. 生成數據庫表: python manage.py migrate
      3. 默認數據庫為 sqlite3,數據庫名為:db.sqlite3
    4. 通過模型類和對象操作數據庫

數據庫配置和遷移

  • Django項目默認 sqlite3 數據庫, 生成的數據庫名為 db.sqlite3
  • sqlite3 僅供測試使用,可以通過配置修改為使用 mysql

一、配置使用MySQL數據庫

  1. 手動創建 MySQL 數據庫,比如叫: db_django01
create database db_django01 charset=utf8;
  1. 在與項目 setting.py 文件中配置使用mysql
DATABASES = {'default': {# 配置使用mysql'ENGINE': 'django.db.backends.mysql',     # 數據庫產品'HOST': "localhost",           # 數據庫ip'PORT': 3306,                  # 數據庫端口'USER': "root",                # 用戶名'PASSWORD': "mysql",           # 密碼'NAME': "db_django01",         # 數據庫名}}
  1. 在python虛擬環境下安裝 MySQL 驅動
pip install pymysql
  1. 與項目同名的包 下的 __init__.py 文件中,初始化MySQL驅動
import pymysqlpymysql.install_as_MySQLdb()

二、遷移命令生成表

打開終端,進入到項目根目錄下,執行以下2個命令,生成數據庫表

1. 生成遷移文件

python manage.py makemigrations

2. 生成數據庫表

python manage.py migrate

3. 查看數據庫表

image ?

一、需求

定義模型類,保存部門-員工數據

  • 部門類(Department)

    • 部門名稱: name
    • 部門成立時間: create_date
    • 邏輯刪除標識:is_delete
  • 員工類(Employee)

    • 性名: name
    • 年齡: age
    • 性別: sex
    • 工資: salary
    • 入職時間: hire_date
    • 備注信息: comment

二、模型類定義

  • 模型類被定義在 應用/models.py 文件中
  • 模型類必須繼承自 Djangomodels.Model
1. 屬性定義
  • 模型類屬性與表字段一一對應

  • 定義屬性時,需要指定字段類型,通過字段類型的參數指定選項,格式如下:

    • 屬性名 = models.字段類型(字段選項)
  • 屬性名不能是python的保留關鍵字

  • 屬性名不能使用連續的下劃線(這是由django的查詢方式決定的)

2. 關于主鍵
  • 主鍵:primary key,簡寫 pk
  • 不需要主動定義,django會自動生成自增長的主鍵,屬性名叫 id,
  • 如果開發者自己定義了主鍵,則django不會再生成默認的主鍵
3. 表名
  • 默認為:應用名小寫_模型類名小寫
  • 可通過通過Meta類指定表名,例如
  # 如果應用名為users,則默認表名為:users_departmentclass Department(models.Model):...class Meta:# 指定生成的數據庫表的名字db_table = 'department'
4. 字段類型

官方文檔:字段類型和選項

類型說明
AutoField自動增長的IntegerField,通常不用指定,不指定時Django會自動創建名為id的自動增長屬性
BooleanField布爾字段,值為True或False
NullBooleanField支持Null、True、False三種值
CharField字符串,必須指定max_length,表示最大字符個數
TextField大文本字段,一般超過4000個字符時使用
IntegerField整數
DecimalField十進制浮點數,用python中的Decimal實例來表示必須指定max_digits總位數,decimal_places小數位數。
FloatField浮點數
DateField日期1) 參數auto_now表示每次修改保存對象時,自動設置該字段為當前時間,用于保存"最后一次修改"時間,默認為False;2) 參數auto_now_add表示當對象第一次被創建時自動設置保存當前時間,用于保存"創建時間"時間,默認為值為False;3) 參數auto_now_addauto_now是相互排斥的,不能同時用到一個屬性中
TimeField時間,參數同DateField
DateTimeField日期時間,參數同DateField
FileField上傳文件字段
ImageField繼承于FileField,對上傳的內容進行校驗,確保是有效的圖片
4. 字段選項
選項默認值描述是否要遷移修改表結構
nullFalseTrue表示表字段允許為空
uniqueFalseTrue表示表字段不能重復
db_column屬性名稱表字段名稱
primary_keyFalseTrue表示字段設置為了主鍵,一般作為AutoField的選項使用
default-默認值
blankFalse在django管理后臺新增或編輯一條表數據時,該字段是否允許為空;null是數據庫范疇的概念,blank是表單驗證范疇的
choices-在django管理后臺新增或編輯一條表數據時,該字段顯示為下拉框,默認為編輯框
  • choices: 性別屬性使用了choices選項后,在錄入一條數據時,會以下拉框顯示
  • blank:blank屬性默認值為false, 表示錄入一條數據時,當前字段必須填寫,不能為空,否則js端js校驗不通過,例如:下圖的comment員工備注信息字段。

image

5. 外鍵

關系型數據庫的關系包括三種類型

  • ForeignKey: 一對多,將 關聯屬性 定義在多的一端中
  • ManyToManyField: 多對多,將 關聯屬性 定義任意一方中
  • OneToOneField: 一對一,將 關聯屬性 定義在任意一方中


二、代碼參考

部門和員工模型類 代碼參考

class Department(models.Model):"""部門類"""# 部門名稱:字符串類型(必須要指定最大長度)name = models.CharField(max_length=20)# 部門成立時間: 日期類型create_date = models.DateField(auto_now_add=True)# 邏輯刪除標識:標識部門是否刪除is_delete = models.BooleanField(default=False)def __str__(self):return self.nameclass Meta: # 指定表名db_table = 'department'class Employee(models.Model):"""員工類"""choices_gender = ((0, '男'),(1, '女'),)name = models.CharField(max_length=20)age = models.IntegerField()gender = models.IntegerField(default=0, choices=choices_gender)# 工資:浮點類型(必須要指定兩個選項)  999999.99salary = models.DecimalField(max_digits=8, decimal_places=2)# 備注信息: 可以為空comment = models.CharField(max_length=300, null=True, blank=True)# 員工入職時間hire_date = models.DateField(auto_now_add=True)# 一對多的外鍵:員工所屬部門 department_iddepartment = models.ForeignKey('Department')def __str__(self):return self.nameclass Meta: # 指定表名db_table = 'employee'

交互環境

Django交互環境

  • 在Django交互環境中,可以直接執行django項目代碼,類似 ipython 交互環境
  • 有以下兩種方式使用Django交互環境

1. 通過 shell 命令進入Django交互環境

python manage.py shell

image

2. 使用 PyCharmpython Console 窗口

image

未完待續 下一期下一章

全套筆記直接地址: 請移步這里

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:
http://www.pswp.cn/news/166439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166439.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166439.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

外匯天眼:多名投資者賬戶被惡意清空,遠離volofinance!

最近&#xff0c;外匯平臺volofinance因有多名投資者投訴&#xff0c;“榮幸”成為外匯天眼黑平臺榜單中的一員&#xff0c;那么volofinance到底做了什么導致投資者前來投訴曝光呢&#xff1f; 起底volofinace 在網絡搜索中&#xff0c;關于volofinance的信息少之又少&#xf…

成為AI產品經理——模型評估指標

目錄 一、模型評估分類 1.在線評估 2.離線評估 二、離線模型評估 1.特征評估 ① 特征自身穩定性 ② 特征來源穩定性 ③ 特征成本 2.模型評估 ① 統計性評估 覆蓋度 最大值、最小值 分布形態 ② 模型性能指標 分類問題 回歸問題 ③ 模型的穩定性 模型評估指標分…

配置mvn打包參數,不同環境使用不同的配置文件

方法一&#xff1a; 首先在/resource目錄下創建各自環境的配置 要在不同的環境中使用不同的配置文件進行Maven打包&#xff0c;可以使用Maven的profiles特性和資源過濾功能。下面是配置Maven打包參數的步驟&#xff1a; 在項目的pom.xml文件中&#xff0c;添加profiles配置…

python 負數 處理

num_negative -4 print(num_negative) num_dec_to_hex hex(num_negative) print(負數轉十六進制&#xff1a; num_dec_to_hex) /---------------------------------------------------------/ -4 負數轉十六進制&#xff1a;-0x4通過上面代碼片段可以看到&#xff0c;python…

第一個Mybatis項目

&#xff08;一&#xff09;為什么要用Mybatis? &#xff08;1&#xff09;Mybatis對比JDBC而言&#xff0c;sql&#xff08;單獨寫在xml的配置文件中&#xff09;和java編碼分開&#xff0c;功能邊界清晰&#xff0c;一個專注業務&#xff0c;一個專注數據。 &#xff08;2&…

【C++】:多態

朋友們、伙計們&#xff0c;我們又見面了&#xff0c;本期來給大家解讀一下有關多態的知識點&#xff0c;如果看完之后對你有一定的啟發&#xff0c;那么請留下你的三連&#xff0c;祝大家心想事成&#xff01; C 語 言 專 欄&#xff1a;C語言&#xff1a;從入門到精通 數據結…

Linux(CentOS7)上安裝mysql

在CentOS中默認安裝有MariaDB&#xff08;MySQL的一個分支&#xff09;&#xff0c;可先移除/卸載MariaDB。 yum remove mariadb // 查看是否存在mariadb rpm -qa|grep -i mariadb // 卸載 mariadb rpm -e --nodeps rpm -qa|grep mariadb yum安裝 下載rpm // 5.6版本 wge…

XML映射文件

<?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"org.mybatis.example.BlogMapper&q…

conan 入門(三十二):package_info中配置禁用CMakeDeps生成使用項目自己生成的config.cmake

conanfile.py中定義的package_info()方法用于向package的調用者(conumer)提供包庫名&#xff0c;編譯/連接選項&#xff0c;文件夾等等信息&#xff0c;有了這些信息構建工具的generator就可以根據它們生成對應的文件&#xff0c;用于調用者引用package. 比如基于cmake的CMakeD…

線索二叉樹:C++實現

引言&#xff1a; 線索二叉樹是一種特殊的二叉樹&#xff0c;它可以通過線索&#xff08;線索是指在二叉樹中將空指針改為指向前驅或后繼的指針&#xff09;的方式將二叉樹轉化為一個線性結構&#xff0c;從而方便對二叉樹進行遍歷。本文將介紹如何使用C實現線索二叉樹。 技術…

安全地公網訪問樹莓派等設備的服務 內網穿透--frp 23年11月方法

如果想要樹莓派可以被公網訪問&#xff0c;可以選擇直接網上搜內網穿透提供商&#xff0c;一個月大概10塊錢&#xff0c;也有免費的&#xff0c;但是免費的速度就不要希望很好了。 也可以選擇接下來介紹的frp&#xff0c;這種方式不需要付費&#xff0c;但是需要你有一臺有著公…

vue3自定義拖拽指令

<template><div v-move class"box"></div> </template><script setup lang"ts"> import { Directive } from vue const vMove:Directive (el:HTMLElement) >{const mousedown (e:MouseEvent) >{// 鼠標按下const s…

【Golang】解決使用interface{}解析json數字會變成科學計數法的問題

在使用解析json結構體的時候&#xff0c;使用interface{}接數字會發現變成了科學計數法格式的數字&#xff0c;不符合實際場景的使用要求。 舉例代碼如下&#xff1a; type JsonUnmStruct struct {Id interface{} json:"id"Name string json:"name"…

Linux 的性能調優的思路

Linux操作系統是一個開源產品&#xff0c;也是一個開源軟件的實踐和應用平臺&#xff0c;在這個平臺下有無數的開源軟件支撐&#xff0c;我們常見的apache、tomcat、mysql等。 開源軟件的最大理念是自由、開放&#xff0c;那么Linux作為一個開源平臺&#xff0c;最終要實現的是…

Java反射調用kotlin中的類,Object類,Companion對

Java反射調用kotlin中的類&#xff0c;Object類&#xff0c;Companion對象 1. Java反射調用kotlin中的普通類 kotlin普通類&#xff1a; package com.common; class TestNormal {fun get():String{return "Nolmal abc"}fun showNum(v:Int){println("Nolmal s…

uniApp微信支付實現

后端&#xff1a;小程序下單 - 小程序支付 | 微信支付商戶文檔中心 服務端需要請求&#xff1a;https://api.mch.weixin.qq.com該地址獲取微信支付Api接口需要的參數。 服務端請求接口需要的Body參數&#xff1a; 客戶端&#xff08;前端&#xff09;需要調用&#xff1a;wx.…

12V降3.3V100mA穩壓芯片WT7133

12V降3.3V100mA穩壓芯片WT7133 WT71XX系列是一款采用CMOS工藝實現的三端高輸入電壓、低壓差、小輸出電流電壓穩壓器。 它的輸出電流可達到100mA&#xff0c;輸入電壓可達到18V。其固定輸出電壓的范圍是2.5V&#xff5e;8.0V&#xff0c;用戶 也可通過外圍應用電路來實現可變電壓…

加載minio中存儲的靜態文件html,不顯示樣式與js

問題描述:點擊鏈接獲取的就是純靜態文件,但是通過瀏覽器可以看到明明加載了css文件與js文件 原因:仔細看你會發現加載css文件顯示的contentType:text/html文件,原來是minio上傳文件時將所有文件的contentType設置成了text/html 要在上傳時指定文件,根據文章的類型指定的Conten…

css 固定按鈕到頁面頂部或者底部的實現方式

實現方式 要將按鈕固定到頂部或底部&#xff0c;可以使用CSS的定位屬性來實現。下面是一種常用的方法&#xff1a; 創建一個包含按鈕的HTML元素&#xff0c;例如一個<div>元素。確保給它添加一個唯一的id&#xff0c;以便在CSS中進行定位。 <div id"myButton&qu…

從二極管到linux服務器

軟件設計: os: 批處理系統: 輪詢系統:單片機裸機開發 實時系統:ucosii,rtos,rt-thread、風和系統、liteos(主要是海思系列soc在用)等 非實時系統:linux 對os任務切換時寄存器的功能有理解。 對ipc機制有理解。 bsp: 需要對寄存器、單片機內部總線、iic、spi、uart、c…