數據庫表的設計
設計系統表
Django提供完善的模型(model)層主要用來創建和存取數據,不需要我們直接對數據庫操作。
Django模型基礎知識:
每個模型是一個Python類,繼承django.db.models.model類。
該模型的每個屬性表示一個數據庫表字段。
所有這一切,已經給你一個自動生成的數據庫訪問的API。
1、打開.../sign/models.py文件,完成表的創建
from django.db import models # Create your models here. """ 發布會表和嘉賓表中默認都會生成自增id,而我們在創建模型時不需要聲明該字段 發布會表中增加了status字段用於表示發布會的狀態是否開啟,用於控制該發布會是否可用 嘉賓表中通過event_id關聯發布會表,一條嘉賓信息一定所屬於某一場發布會 對於一場發布會來說,一般會選擇手機號作為一位嘉賓的驗證信息,所以,對於一場發布會來說, 手機號必須是唯一。除了嘉賓id外,這里通過發布會id+手機號來做為聯合主鍵 """ # 發布會表 class Event(models.Model): name = models.CharField(max_length=100) # 發布會標題 limit = models.ImageField() # 參加人數 status = models.BooleanField() # 狀態 address = models.CharField(max_length=200) # 地址 start_time = models.DateTimeField('events time') # 發布會時間 create_time = models.DateTimeField(auto_now=True) # 創建時間(自動獲取當前時間) # __str__()方法告訴Python如何將對象以str的方式顯示出來。所以,為每個模型類添加了__str__()方法 # 如果是Python2.x的話,這里需要使用__unicode__() def __str__(self): return self.name # 嘉賓表 class Guest(models.Model): event = models.ForeignKey(Event) # 關聯發布會id real_name = models.CharField(max_length=64) # 姓名 phone = models.CharField(max_length=16) # 手機號 email = models.EmailField() # 郵箱 sign = models.BooleanField() # 簽到狀態 create_time = models.DateTimeField(auto_now=True) # 創建時間(自動獲取當前時間) class Meta: unique_together = ("event", "phone") def __str__(self): return self.real_name
Django Models的數據類型,如下表:
(依據C:\Python35\Lib\site-packages\django\db\models\fields\__init__.py文件)
AutoField |
|
IntegerField |
||||||
BooleanField |
true/false |
|
||||||
CharField |
maxlength,必填 |
|
||||||
TextField |
|
|
||||||
CommaSeparatedIntegerField |
maxlength,必填 |
逗號分隔 |
||||||
DateField |
|
|
||||||
DateTimeField |
|
|
||||||
EmailField |
|
|
||||||
FileField |
upload_to,可選 |
object.get_myfile_url |
||||||
FilePathField |
|
|
||||||
FloatField |
|
|
ImageField |
|
需要驗證,即Python Imaging Library |
||||||
IntegerField |
|
|
||||||
IPAddressField |
|
|
||||||
NullBooleanField |
|
相當於設置了null=True的BooleanField |
||||||
PhoneNumberField |
|
美國電話號碼格式 |
||||||
PositiveIntegerField |
|
正整數字段 |
||||||
PositiveSmallIntegerField |
|
小的正整數字段,取決於數據庫特性 |
||||||
SlugField |
|
短標簽,僅包含字母、數字、下划線、連字符,一般用於url |
||||||
SmallIntegerField |
|
小整數字段,依賴於數據庫特性 |
||||||
TimeField |
|
|
||||||
URLField |
verify_exists(True),檢查URL可用性 |
|
||||||
USStateField |
|
兩個字母表示的美國州名字段 |
||||||
XMLField |
schema_path,必選 |
|

admin后台管理
使用admin后台管理發布會和嘉賓表,首先需配置,打開.../sign/admin.py文件
from django.contrib import admin # Register your models here. from sign.models import Event, Guest # Register your models here. class EventAdmin(admin.ModelAdmin): # list_display,它是一個字段名稱的數組,用於定義要在列表中顯示哪些字段。 # 當然,這些字段名稱必須是模型中的Event()類定義的 list_display = ['name', 'status', 'start_time', 'id'] # 生成搜索欄和過濾器 search_fields = ['name'] # 搜索欄 list_filter = ['status'] # 過濾欄 class GuestAdmin(admin.ModelAdmin): list_display = ['real_name', 'phone', 'email', 'sign', 'create_time', 'event'] # 生成搜索欄和過濾器 search_fields = ['realname','phone'] # 搜索欄 list_filter = ['sign'] # 過濾欄 admin.site.register(Event, EventAdmin) admin.site.register(Guest, GuestAdmin)
最終的效果圖:
配置 MySQL
前面用的數據庫是 Python 自帶的 SQLite3, 這種數據庫並不適用大型的項目。 除 SQLite3 之外, Django還支持mysql,本節以 MySQL 為例, 介紹 MySQL 的安裝, 以及在 Django 中的配置。
1、安裝mysql
下載msi文件(如:mysql-installer-community-5.7.19.0.msi),具體安裝方法百度
用戶名/密碼:root/root、zenglm/zenglm
端口號:3307(由於默認的3306被占用)
2、創建 guest 庫
打開
創建庫:CREATE DATABASE guest CHARACTER SET utf8;
3、安裝 PyMySQL
python2.x可以使用MySQL-python 連接mysql數據庫。而python3需要使用PyMySQL 驅動 。
安裝執行命令:python3 -m pip install PyMySQL