Django模型


數據庫表的設計

設計系統表

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

auto_now

可選,每次動作都會更新

auto_now _add

可選,一次產生

 

DateTimeField

auto_now

可選,每次動作都會更新

auto_now _add

可選,一次產生

 

EmailField

 

 

FileField

upload_to,可選

object.get_myfile_url

FilePathField

path

必填"/home/images"

match

可選,正則表達式,用於過濾文件名

recursive

可選,False,表示path的子目錄是否包含在內

 

FloatField

max_digits

必填,數字長度

decimal_places

必填,即有效位數

 

 

ImageField

upload_to

 

height_field

可選

width_field

可選

需要驗證,即Python Imaging Library

IntegerField

 

 

IPAddressField

 

 

NullBooleanField

 

相當於設置了null=True的BooleanField

PhoneNumberField

 

美國電話號碼格式

PositiveIntegerField

 

正整數字段

PositiveSmallIntegerField

 

小的正整數字段,取決於數據庫特性

SlugField

maxlength(50)

可選

db_index

默認為True

prepopulate_from

可選,用於指示在admin表單中的可選值

短標簽,僅包含字母、數字、下划線、連字符,一般用於url

SmallIntegerField

 

小整數字段,依賴於數據庫特性

TimeField

auto_now

可選,每次動作都會更新

auto_now _add

可選,一次產生

 

URLField

verify_exists(True),檢查URL可用性

 

USStateField

 

兩個字母表示的美國州名字段

XMLField

schema_path,必選

 

 

 2、數據庫遷移
python manage.py makemigrations sign

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM