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

 

 

posted @ 2017-07-21 20:56  落花无意溪自流  阅读(1307)  评论(0编辑  收藏  举报