Django详细用法之项目“图书--英雄”

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)

这时,我们再开启服务并进入管理员界面,就可以对图书和英雄进行管理了。(比命令操作简单的多呀)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/forever_wen/article/details/84033346