1.数据库配置
在settings.py文件中,通过对DATABASES项的更改,可以进行数据库配置。
Django支持sqlite、mysql等一些主流数据库,但Django默认的数据库类型为sqlite。(文件数据库)
2.创建应用
一个项目中可以创建一到多个应用 创建应用的命令:pyhton manage.py startapp book
3.定义数据库模型
在models.py中进行相关表的建立,这里有几点需要注意:
1)模型类要继承自models.Model。
2)不需要定义主键列(primary_key(pk)),在生成时会自动添加,并默认递增
from django.db import models
# Create your models here.
class BookInfo(models.Model):
# id如果没有指定, 默认会添加id并作为主键(primary_key(pk))
btitle = models.CharField(max_length=50, unique=True, verbose_name="图书名称") # 图书名称;最大长度为50,内容唯一,在后台显示的名字为“图书名称”
bpub_date = models.DateField(verbose_name="出版日期")
# 添加书籍的详解
bcontent = models.TextField(default="书籍摘要")
# 添加图片, 并指定上传图片存放位置; # hello.jpg ==== static/uploads/hello.jpg
bimg = models.ImageField(default=None, upload_to='static/uploads/')
class Meta:
# 后台的单数显示
verbose_name = "图书信息"
# 后台的复数显示, 如果不指定, 在单数后面默认加s;
verbose_name_plural = "图书信息"
def __str__(self):
return "%s" %(self.btitle)
# 书籍中的英雄人物
class HeroInfo(models.Model):
hname = models.CharField(max_length=50, verbose_name="人物名称")
hgender = models.BooleanField(verbose_name="性别")
hcontent = models.TextField(verbose_name="人物介绍") # 人物介绍
# 多的一端写外键
hbook = models.ForeignKey(BookInfo, verbose_name="所属书籍")
@property
def gender(self):
if self.hgender:
return "男"
else:
return "女"
class Meta:
verbose_name = "人物信息"
verbose_name_plural = "人物信息"
def __str__(self):
return "%s" %(self.hname)
注意:数据库表建立完成后,我们要先编辑settings.py文件,将book应用加到INSTALLED_APPS中。
每进行一次数据库的改变都要进行一次数据库的更新。
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
但在更新数据库过程中发现,我们进行第一步时,就会出现如下报错,那是因为我们在后台中有图片的上传步骤,所以需要安装对图片的处理模块。
安装完成后,再进行数据库的更新就不会报错了。
命令方式进行数据库的增、删、改、查
这里我们先用sqlite数据库。1)首先进入交互界面,如下图提示。并导入需要的包
2)数据库的增加(书籍的增加)
第一种:通过实例化对象一次性传值
b = BookInfo(btitle = "西游记",bpub_date = date(year=1983,month=1,day=1)
第二种:先通过实例化一个对象,再给对象传值
不管是选择第一种还是第二种,最后进行保存,这样就实现了数据库的增加。
b.save()
3)数据库的删除(书籍的删除)
因为我们在实例化对象时,将该对象赋给了一个变量,这是我们用下面方法删除即可。也可以通过查询后赋给的对象删除
b.delete()
4)数据库的查看(书籍的查看)
查看所有:
BookInfo.objects.all()
根据条件查找:这里要用到get方法,并在括号内加上想要查找的属性。
BookInfo.objects.get(pk=1)
4)数据库的更改(书籍的更改)
首先我们得到一个对象,然后给对象想更改的属性赋予新值,最后保存即可。以更改btitle为例。
b.btitle = "水浒传"
b.save()
英雄的添加和图书添加一样。
关联对象的操作
正如我们所知,一本书中会有很多英雄。 假设这里有一个book对象b,我们该如何查询一本书中的所有英雄呢?b.heroinfo_set.all()
创建关联数据:
4.后台管理(简单方式的数据库管理)
创建管理员等我们在上边已经进行描述,那我们该如何通过后台可视化图形界面对图书和英雄进行增、删、改、查呢?
首先,xiangadmin注册book的模型。也就是在book的admin.py文件中加入如下代码:
from django.contrib import admin
from book.models import BookInfo,HeroInfo
# Register your models here.
admin.site.register(BookInfo)
admin.site.register(HeroInfo)
这时,我们再开启服务并进入管理员界面,就可以对图书和英雄进行管理了。(比命令操作简单的多呀)