一、模型介紹
?1. 創(chuàng)建一個簡單的學生模型
class Student(models.Model):
# 繼承models.Model
# 定義數(shù)據(jù)字段
name = models.CharField(max_length=10, unique=True)
age = models.IntegerField(default=18)
gender = models.BooleanField(default=1)
# 創(chuàng)建數(shù)據(jù)時間,默認為當前時間: auto_now_add=True
create_time = models.DateTimeField(auto_now_add=True, null=True)
# auto_now : 修改時間, 每次修改學生信息時,修改該字段的時間為當前時間
operate_time = models.DateTimeField(auto_now=True, null=True)
class Meta:
# 指定Student模型映射到數(shù)據(jù)庫中時,對應的表名。
db_table = 'tb_student'
2. 配置數(shù)據(jù)庫
- 2.1 在項目文件夾下的setting.py中修改數(shù)據(jù)庫類型和配置數(shù)據(jù)庫連接信息
??如:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'dj7',
'USER': 'root',
'PASSWORD': '123456',
'HOST': 'localhost',
'PORT': 3306
}
}
- 2.2 其次需要在項目文件夾下的init.py中添加對應的數(shù)據(jù)庫驅動
mysql如下:
import pymysql (如果沒有pymysql的需要安裝pymysql第三方庫)
pymysql.install_as_MySQLdb()
?3. 注冊應用
- 在項目文件下的setting.py文件中的INSTALLED_APPS最后添加應用名
??如:
INSTALLED_APPS = [
這里省略部分默認代碼
'app'
]
?4. 生成遷移文件
格式: python manage.py makemigrations
- 此時會在項目文件夾下的migration文件夾下創(chuàng)建一個遷移文件
如:0001_initial.py
?5. 制作遷移
格式: python manage.py migrate
此時在數(shù)據(jù)庫中就會創(chuàng)建一張與模型向對應的數(shù)據(jù)庫表(其中自動創(chuàng)建一個id字段并且自動增長和是主鍵)
二、更改啟動服務的ip和端口
格式:python manage.py runserver ip:port
或者
格式:python manage.py runserver port
?注意:后面參數(shù)可以是IP:port 或者 port,不能只是ip
三、Debug(程序調試)
- 在自己認為可能出現(xiàn)錯誤的地方添加斷點,再通過Debug對程序進行檢查調試
- python中可以通過debug控制臺打印程序運行值檢查是否出錯
四、通過ORM操作數(shù)據(jù)庫(CRUD操作)
?在上面創(chuàng)建的模型基礎上通過模型去更改操作數(shù)據(jù)庫表
?1. 配置url解析
# 需要先導入app應用下的views(視圖)
from app import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
# 新增數(shù)據(jù)
# 配置url,并調用相應的視圖函數(shù)
url(r'add_stu/', views.add_stu),
# 刪除數(shù)據(jù)
url(r'del_stu/', views.del_stu),
# 修改數(shù)據(jù)
url(r'^up_stu', views.up_stu),
]
?2. 在應用(app)文件夾下views.py文件中定義與url相對應的視圖函數(shù)
# 引入Student模型
from app.models import Student
def add_stu(request):
# 創(chuàng)建向數(shù)據(jù)庫student表中插入數(shù)據(jù)的函數(shù)
# 添加數(shù)據(jù)
# 方式一:
# stu = Student()
# stu.name = '小明'
# 向數(shù)據(jù)庫中插入數(shù)據(jù)
# stu.save()
# 方式二:
Student.objects.create(name='大錘11', age=19)
# 返回響應
return HttpResponse('添加成功!')
def del_stu(request):
# 實現(xiàn)刪除數(shù)據(jù)操作
# 1. 先查詢name=‘大錘’的信息
Student.objects.filter(name='大錘11').delete()
return HttpResponse('刪除成功!')
def up_stu(request):
# 修改student表中的數(shù)據(jù)
# 方式一:
# stus = Student.objects.filter(name='小明')
# 獲取小明對象
# stu = stus[0]
# stu.name = '大錘'
# stu.save()
# 方式二:
# stu = Student.objects.filter(name='小明').first()
# stu.name = '大錘'
# stu.save()
# 方式三:
Student.objects.filter(name='小明').update(name='小明')
return HttpResponse('修改成功!')
五、模型中定義的數(shù)據(jù)類型和數(shù)據(jù)庫(mysql)中的數(shù)據(jù)類型的關系
?5.1 定義模型
?? 1. 字段要求
字段名不能使python的保留字,否則會導致語法錯誤
字段名不能有多個連續(xù)下劃線,否則會影響ORM查詢操作
?5.2 模型中的數(shù)據(jù)類型
<center>模型字段類型</center>
| 字段類 | 說明 |
|---|---|
| AutoField | 自增ID字段 |
| BigIntegerField | 64位有符號整數(shù) |
| BinaryField | 存儲二進制數(shù)據(jù)的字段,對應Python的bytes類型 |
| BooleanField | 存儲True或False |
| CharField | 長度較小的字符串 |
| DateField | 存儲日期,有auto_now和auto_now_add屬性 |
| DateTimeField | 存儲日期和日期,兩個附加屬性同上 |
| DecimalField | 存儲固定精度小數(shù),有max_digits(有效位數(shù))和decimal_places(小數(shù)點后面)兩個必要的參數(shù) |
| DurationField | 存儲時間跨度 |
| EmailField | 與CharField相同,可以用EmailValidator驗證 |
| FileField | 文件上傳字段 |
| FloatField | 存儲浮點數(shù) |
| ImageField | 其他同F(xiàn)ileFiled,要驗證上傳的是不是有效圖像 |
| IntegerField | 存儲32位有符號整數(shù)。 |
| GenericIPAddressField | 存儲IPv4或IPv6地址 |
| NullBooleanField | 存儲True、False或null值 |
| PositiveIntegerField | 存儲無符號整數(shù)(只能存儲正數(shù)) |
| SlugField | 存儲slug(簡短標注) |
| SmallIntegerField | 存儲16位有符號整數(shù) |
| TextField | 存儲數(shù)據(jù)量較大的文本 |
| TimeField | 存儲時間 |
| URLField | 存儲URL的CharField |
| UUIDField | 存儲全局唯一標識符 |
?常用的類型主要有以下幾類(自己總結的)
| 類型 | 說明 |
|---|---|
| 自增id字段 | AutoField |
| 數(shù)字類型 | IntegerField、FloatField、DecimalField |
| 字符串類型 | CharField、TextField |
| 時間類型 | DateField、DateTimeField、TimeField |
| 文件類型 | FielField、ImageField |
| 布爾和空 | BooleanField、NullBoolField |
<center>模型字段屬性</center>
| 選項 | 說明 |
|---|---|
| null | 數(shù)據(jù)庫中對應的字段是否允許為NULL,默認為False |
| blank | 后臺模型管理驗證數(shù)據(jù)時,是否允許為NULL,默認為False |
| choices | 設定字段的選項,各元組中的第一個值是設置在模型上的值,第二值是人類可讀的值 |
| db_column | 字段對應到數(shù)據(jù)庫表中的列名,未指定時直接使用字段的名稱 |
| db_index | 設置為True時將在該字段創(chuàng)建索引 |
| db_tablespace | 為有索引的字段設置使用的表空間,默認為DEFAULT_INDEX_TABLESPACE |
| default | 字段的默認值 |
| editable | 字段在后臺模型管理或ModelForm中是否顯示,默認為True |
| error_messages | 設定字段拋出異常時的默認消息的字典,其中的鍵包括null、blank、invalid、invalid_choice、unique和unique_for_date |
| help_text | 表單小組件旁邊顯示的額外的幫助文本。 |
| primary_key | 將字段指定為模型的主鍵,未指定時會自動添加AutoField用于主鍵,只讀。 |
| unique | 設置為True時,表中字段的值必須是唯一的 |
| verbose_name | 字段在后臺模型管理顯示的名稱,未指定時使用字段的名稱 |
<center>模型元數(shù)據(jù)選項</center>
| 選項 | 說明 |
|---|---|
| abstract | 設置為True時模型是抽象父類 |
| app_label | 如果定義模型的應用不在INSTALLED_APPS中可以用該屬性指定 |
| db_table | 模型使用的數(shù)據(jù)表名稱 |
| db_tablespace | 模型使用的數(shù)據(jù)表空間 |
| default_related_name | 關聯(lián)對象回指這個模型時默認使用的名稱,默認為<model_name>_set |
| get_latest_by | 模型中可排序字段的名稱。 |
| managed | 設置為True時,Django在遷移中創(chuàng)建數(shù)據(jù)表并在執(zhí)行flush管理命令時把表移除 |
| order_with_respect_to | 標記對象為可排序的 |
| ordering | 對象的默認排序 |
| permissions | 創(chuàng)建對象時寫入權限表的額外權限 |
| default_permissions | 默認為('add', 'change', 'delete') |
| unique_together | 設定組合在一起時必須獨一無二的字段名 |
| index_together | 設定一起建立索引的多個字段名 |
| verbose_name | 為對象設定人類可讀的名稱 |
| verbose_name_plural | 設定對象的復數(shù)名稱 |