django基础入门(3)-设计模型

1. 模型类

当前项目的开发,都是数据驱动的,即分析出项目中所需要存储的数据,然后设计数据表及表结构,接下来再使用设计好的页面对表完成数据的crud.

django中内嵌了ORM框架,不需要直接面向数据库编程,而是定义模型类,通过模型类和对象完成数据表的crud.

使用django进行数据库开发的步骤如下:

1.在models.py中定义模型类
2.迁移
3.通过类和对象完成数据crud

模型类定义在应用的models.py文件中,继承自models.Model类.

说明:不需要定义主键列,在生成时会自动添加,并且值为自动增长.

新闻分类表结构设计:

表名:NewsCategory
新闻分类:cag_name

新闻表结构设计:

表名:NewsInfo
新闻标题:news_title
新闻摘要:news_summary
新闻内容:news_contents
所属分类:news_cag
新闻时间:news_time

新闻分类-新闻列表的关系为一对多,根据设计,在models.py中定义模型类如下(自定义模型类必须继承自models.Model类):

from django.db import models

class NewsCategory(models.Model):
    cag_name = models.CharField(max_length=80)

    def __str__(self):
        return self.news_cag

class NewsInfo(models.Model):
    news_title = models.CharField(max_length=80)
    news_summary = models.CharField(max_length=200)
    news_contents = models.TextField()
    news_time = models.DateField()
    news_cag = models.ForeignKey('NewsCategory')

    def __str__(self):
        return self.news_title

注意上面两个模型类。其中NewsInfo类中定义:

news_cag = models.ForeignKey('NewsCategory')

表示sql操作中的外键。news_cag和NewsCategory通过此字段关联。我们以后可以通过此字段直接获取到对应的NewsCategroy信息。

news_title = models.CharField(max_length=80)
这行代码表示定义了一个字段news_title, 类型是一个字符串类型,最大长度我们设置为80个字符。django会自动将此类型映射到数据库中对应的数据类型。

news_time = models.DateField()
表示这是日期类型的字段。

news_contents = models.TextField()
表示这是一个大文本类型的字段。

两个模型类对应了两张表,当我们执行迁移(一会我们操作下,大家明白什么叫迁移了),django框架会根据我们的对象模型,来创建对应的表结构。

2. 迁移

迁移就是我们执行一个命令,让django根据我们在model.py模块中定义的模型类,来生成sql语句。django默认使用的sqlite数据库,我们先暂时使用这个数据库。
执行迁移分为两步:

1. 生成迁移文件:根据模型类生成创建表的语句;

2. 执行迁移文件:根据第一步生成的语句在数据库中创建表;
执行迁移前我的项目目录:

现在我们首先执行生成迁移文件的命令:
python manage.py makemigrations

成功执行迁移命令之后,项目目录结构为:

在应用的news_app目录下的migrations目录下多出一个0001_initial.py文件,这就是我们的迁移文件。我们执行这个迁移文件,django就会在我们默认的sqlite数据库中创建model.py中定义的数据表。

下面我们来执行迁移文件命令:

python manage.py migrate

大家可在Ubuntu中安装DB Browser for SqlLite软件,一款可视化sqlite数据库的带图形界面的工具。

3. 数据操作

我们可进入django shell,进行简单的数据操作, 按ctrl+d或输入quit()可以退出shell. 我们就像在命令终端进行python编码一样,来了解下如下操作数据。

进入项目shell命令如下:

python manage.py shell

1. 插入数据:

# 引入NewsList和NewsCategory类
from News.models import NewsCategory, NewsList
import datetime

# 1. 创建新闻分类对象
nc = NewsCategory()
nc.news_cag = "Military News"
# 2. 将新分类信息插入到数据库中
nc.save()
# 1. 创建新闻类对象、
news = NewsList()
news.news_title = "news1 title"
news.news_summary = "news1 summary"
news.news_contents = "news1 contents"
news.news_time = datetime.date(1990, 10, 10)
# 2. 将新闻对象如何数据库中
news.save()
shell中操作如下:


我们创建NewsCategory对象,此对象中包含了一个save方法。每一个继承了models.Model的模型类,都默认有这个方法。我们创建新的对象,并给对象的实例属性成员赋值,调用save方法,就会将此对象插入到数据库中。

执行结果如下(使用上面所说的sqllite可视化软件):




2. 修改数据

# 引入NewsList和NewsCategory类
from News.models import NewsCategory, NewsList
import datetime

# 1. 首先根据新闻id获得数据
news = NewsList.objects.get(pk=1)
# 2. 修改本条数据
news.news_title = "new news title"
# 3. 保存修改后的结果
news.save()

其中cag = NewsCategory.objects.get(pk=1), pk就代表中表中的主键,objects是NewsCategory模型类的对象属性,每一个继承了models.Model类的模型类,都默认有一个名字叫objects的属性,这个对象属性中包含了很多对该模型类进行数据操作的方法,我们这里就使用了get方法,用于从数据库中获取一条数据,其中参数pk代表数据库表中的主键,也可以直接指定主键字段名,默认是id.  我们从表中读取id为1的数据,将其cag_name修改之后,再此更新表中这条数据。save方法会自动判断是更新还是插入新数据。


3. 查询数据

# 引入NewsList和NewsCategory类
from News.models import NewsCategory, NewsList
import datetime

# 1. 获得所有数据
news = NewsList.objects.all()
# 2. 获得某条数据
news = NewsList.objects.get(pk=1)

news = NewsList.objects.all()

这句表示获取NewsList表中所有的数据。get可以根据某个字段值获取一条数据。

4. 删除数据

django中默认删除数据(默认SQL ON DELETE CASCADE,级联删除,删除分类,分类下的所有新闻也会被删除.): 比如我们的NewsInfo类foreignkey是NewsCategory, 当删除一个分类,那么与这个分类相关的的新闻信息中的数据也会被删除。

# 引入NewsList和NewsCategory类
from News.models import NewsCategory, NewsList
import datetime

# 1. 获得某条数据
news = NewsList.objects.get(pk=1)
# 2. 删除本条数据
news.delete()

django中提供了关联的操作方式,获得关联集合:返回当前NewsCategory对象的所有NewsList):

我们删除了一个分类信息。通过调用delete方法,那么与此分类关联的NewInfo对象会被全部删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《Django 3 入门与实践》是一本针对初学者的Django入门教程,涵盖了Django 3的基础知识和实践案例。 这本书首先介绍了Django的基本概念和特点,如何安装和配置Django开发环境,以及Django的项目结构和组件。接着,书中详细讲解了如何创建Django应用程序,包括创建模型、视图和模板。读者可以通过这些例子逐步了解Django的开发流程和常用功能。 《Django 3 入门与实践》还涵盖了Django的高级功能和实践技巧。例如,它介绍了Django的用户认证系统和权限控制,以及如何处理单和文件上传。此外,书中还讲解了如何使用Django的ORM(对象关系映射)进行数据库操作,以及如何优化Django应用的性能和安全性。 为了帮助读者更好地理解和应用所学知识,该书还提供了一系列实践案例,涵盖了常见的Web开发需求和场景。通过这些案例,读者可以将所学知识应用到实际项目中,并了解如何构建完整的Django应用。 总的来说,《Django 3 入门与实践》是一本适合初学者的Django学习教程。书中内容系统全面,深入浅出,通过实践案例的讲解,读者能够掌握Django基础知识和实际应用技巧。无论是想入门Django的初学者还是想提升Django技能的开发者,都可以从这本书中获益良多。 ### 回答2: "Django3入门与实践"是一本非常受欢迎的Python web框架Django的学习指南。这本书适合那些希望学习如何使用Django构建高质量网站和Web应用的初学者。 首先,书中介绍了Django的基本概念和核心功能,比如模型、视图、模板和单等。这些知识对于理解Django的工作原理至关重要。读者可以通过实际的代码示例和详细的说明来学习如何创建和管理数据库模型,以及如何将数据呈现给用户。此外,书中还介绍了如何使用Django的内置认证系统和权限管理来确保网站的安全和用户验证。 其次,书中深入探讨了Django的高级特性和扩展。例如,它介绍了如何使用Django的路由系统来处理URL映射和页面重定向,以及如何使用Django的ORM来处理复杂的数据库查询和关系。此外,书中还介绍了如何使用Django单功能来处理用户输入和验证,以及如何使用Django的静态文件管理和国际化支持等高级功能。 最后,书中还提供了一些实践项目,这些项目可以帮助读者将所学知识应用到实际开发中。通过完成这些项目,读者可以进一步加深对Django的理解和掌握,并在实际项目中应用自己的技能。 总之,"Django3入门与实践"是一本很好的入门指南,适合初学者快速入门Django并理解其核心概念和功能。无论是想创建自己的网站,还是希望通过学习Django提升自己的编程技能,这本书都是一个值得推荐的资源。 ### 回答3: 《Django3 入门与实践》是一本介绍Django框架的书籍,通过阅读该书可以帮助读者快速入门并实践Django3的开发。 这本书从基础概念开始,详细介绍了Django框架的各个组件以及它们的作用,包括模型(Model)、视图(View)、模板(Template)等。读者可以通过逐步学习这些内容来掌握如何使用Django进行Web应用的开发。 书中还提供了大量的实例和案例,通过实际的项目示范,帮助读者理解和掌握Django的开发流程和技巧。这些示例项目涵盖了常见的Web开发需求,如用户认证、数据管理、单处理、静态文件处理等。读者可以通过跟随书中的示例代码和说明,一步步实践这些项目,并逐渐提升自己的Django开发能力。 此外,《Django3 入门与实践》还介绍了Django的一些高级特性和扩展,如管理后台(Admin)的使用、数据库迁移(Migration)、国际化(Internationalization)等。这些内容为读者提供了更多的选择和拓展,使得他们可以根据实际需求使用Django框架构建更加强大和灵活的Web应用。 总之,通过阅读《Django3 入门与实践》,读者可以系统地学习和实践Django框架的基础知识和开发技巧,为其在Web开发领域打下坚实的基础。无论是想入门Django3的初学者,还是希望提升Django开发能力的开发者,这本书都是一个很好的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值