程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Django入門1

編輯:Python

文章目錄

  • 一、Django中的Models
    • 1.model簡介
    • 2.model設計
    • 3.orm
    • 4.models的屬性與字段(field)
    • 5.Meta類屬性
  • 二、數據庫的操作
    • 1.查詢
    • 2.增加
    • 3.刪除
    • 4.排序查詢
    • 5.切片


提示:以下是本篇文章正文內容。

一、Django中的Models

1.model簡介

  • [1] 通常情況,一個Models對應數據庫的一張表
  • [2] Django中Models以類的形式表現
  • [3] 它包含了一些基本字段以及數據的一些行為
  • [4] 我們只需要在類裡面進行操作,就可以操作數據庫、表,不需要直接使用SQL語句
  • [5] 我們通過創建類來創建數據表,所以對數據庫的操作,都是對類與對類的對象進行操作,而不使用sql語句
  • [6] ORM對象關系映射,實現了對象和數據庫的映射,隱藏了數據訪問的細節,不需要編寫SQL語句

代碼如下:

form django.db import models
class Modelname(models.Model):
# 創建模型類並繼承models.Model
# 一個類就是數據庫的一張表
field1 = models.XXXfield(max_lenge=10,verbose_name='haha'
field = models.XXXfield()
class Meta():
# 為這個類定義一個說明
verbose_name = XXX
# 不加這個的話在我們的verbose_name在admin裡面會被自動加上s
verbose_name_plural = XXX

2.model設計

  1. 設計Model的時候,可以繼承自Models.model或者AbstractUser,AbstractUser是內置的用戶類,當要繼承內置的用戶模型並進行擴展時,就使用它,Models則是通用的模型類,自定義模型都需要繼承這個.
  2. AbstractUser要記得在setting.py裡面加上AUTH_USER_MODEL = ‘users.UserProfile’
  3. 設計表的時候,首先要分享需要哪些表,關鍵是分析關系:實體1 <對於關系> 實體2,表關系是一對多,還是多對一等等,要自行分析定義外鍵
  4. 設計表的第二步是設計具體的字段,每個字段的類型是否是必填。

通常在我們的表裡面可以加一個add_time屬性,用來記錄這條記錄是什麼時候添加進的,

from datetime import datetime
class BaseModel(models.Model):
add_time = models.DateTimeField(default=datetime.now,verbose_name="添加時間"
class Meta:
# Django會幫我們創建這個表
abstract = True
class Course(BaseModel):
'''這裡寫屬性'''
'''外鍵'''
class Lesson(BaseModel):
course = models.ForeignKey(Course,on_delete=models.CASCADE)
'''這裡必須注意第一個參數是要關聯的外鍵,
第二個參數是一定要寫的,用來設置當Course被刪除的時候,
外鍵怎麼處理,CASCADE表示如果對應的課程被刪除,那麼外鍵的
記錄也會級聯的刪除,而一種SET_NULL屬性是指課程被刪除後
這個外鍵這一列被置空,它必須和```null = True,blank = True```
連用,否則都不能為空怎麼置空呢

3.orm

Python、PHP、Java是一種開發語言,而MySQL、SQL Server則采用數據庫語言,不同語言之間如何實現互操作。
SQL語言包括包括數據定義語言DDL、數據控制語言DCL、數據查詢語言DQL、數據操作語言DML等,例如INSERT、DELETE、SELECT、UPDATE操作。
作為開發人員,應該把精力放在核心業務代碼的編寫上面,而不應該花太多精力跟數據庫語言打交道。
ORM(Object-Relational Mapping,對象關系映射)技術可以看做是開發者和數據庫之間的橋梁,用於實現數據庫和
編程語言之間的映射,本質上來看,ORM就是將SQL操作和編程語言操作做了一個翻譯。
通過ORM技術來操作數據庫,使得開發者無需接觸SQL語句,而直接操作對象的屬性和方法,大大提高了開發效率。

orm的功能

  • 映射技術:數據類型映射、類映射、關系映射。例如,每一張數據庫表對應開發語言的類,每一個數據字段對應類中的屬性。
  • CRUD操作:CRUD即增刪查改操作,在SQL語句中通過Insert、Select、Update、Delete來實現,在ORM庫中則需要
    通過對應的函數來實現,例如Django ORM通過get、filter、save、delete函數進行操作。
  • 緩存優化:(惰性操作)從數據庫查詢到的數據以類對象的形式保存在內存,用於隨時提取;真正需要查詢結果時才執行數據庫的select操作,而不是在ORM查詢命令執行時查詢數據庫。

4.models的屬性與字段(field)

AutoField:一個自動遞增的整形字段,通常用於主鍵
CharField:字符串字段,用於輸入較短的字符,對應與HTML裡面<input type='text'>
TextField:文本字段,用於輸入較多的字符,對應html標簽 <input type = "textarea">;
EmailField:郵箱字段,用於輸入帶有Email格式的字符
DateFiled
TimeFiled
DateTimeField:日期字段,支持時間輸入
ImageField:用於上傳圖片並驗證圖片合法性,需定義upload_to參數,使用本字段需安裝python pillow等圖片庫
IntegerField:整數字段,用於保持整數信息

屬性

primary_key:設置True or False,定義此字段是否為主鍵
default:設置默認值,可以設置默認的文本、時間、圖片、時間等
null:設置True or False,是否允許數據庫字段為Null,默認為False
blank:設置True or False,定義是否運行用戶不輸入,默認為False;若為True,則用戶可以不輸入此字段
max_length:設置默認長度,一般在CharField、TextField、EmailField等文本字段設置
verbose_name:設置該字段的名稱,所有字段都可以設置,在Web頁面會顯示出來(例如將英文顯示為中文)
choices:設置該字段的可選值,本字段的值是一個二維元素的元祖;元素的第1個值為實際存儲的值,第2個值為HTML頁面顯示的值
upload_to:設置上傳路徑,ImageField和FileField字段需要設置此參數,如果路徑不存在,會自動創建

5.Meta類屬性

1. verbose_name:設置對象名稱(例如usecms),若沒有設置,則默認為該類名的小寫分詞形式,例如類名為CamelCase會被轉換為camel case;
2.verbose_name_plural:設置對象名稱復數(例如usercms),一般設置跟verbose_name一樣,verbose_name_plural=verbose_name否則會默認加s;
3. db_table:設置映射的數據表名,默認為“應用名_模型名”,即用該模型所在app的名稱加本模型類的名稱
4.proxy:設置True or False,設置本模型及所有繼承本模型的子模型是否為代理模型;
5. abstract:設置True or False,設置本模型類是否為抽象基類;如果是抽象基類,那麼是不會創建這張表的,這張表用來作為基類被其他的表繼承

二、數據庫的操作

1.查詢

modelname.object.all()取出所有的數據
modelname.object.get(pk=id)查詢出符合篩選條件數據(一條),如果查到多條或者沒有查到會報錯
modelname.object.filter(....)查詢出符合篩選條件的數據集(一條或者多條),如果對象不存在會返回一個空的列表,而不會報錯。
ModelName.Objects.exclude( )返會不符合篩選條件的數據集

2.增加

代碼如下:

#常規的賦值增加
field1 = models.CharField()
field2 = modelsEmailField()
modelname.object.save()
#or 利用create方法
modelname.object.create(field1=models.CharField())
user_cms = UserCMS.objects.create(username=username, password=password)

3.刪除

在查詢的方法後面加上.delete()

4.排序查詢

代碼如下:

ModelName.Objects.all( ).order_by('xxx')

5.切片

代碼如下:

#ModelName.Objects.all( ).order_by('xxx')[a:b]
all_interviews = Interview.objects.all().order_by('-read_counts')[:6]
recommended_interviews = Interview.objects.filter(company=recommended_tag).exclude(id=int(interview_id)).order_by('-read_counts')[:3]


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved