数据库表的设计
设计系统表
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