Django入门:第六章、模型操作

模型的操作

回顾

上一章中我们建立了一个博客文章的模型,然后通过数据迁移建立我们对应中的数据库表,这一章我们接着说模型的操作,这一章的小部分内容可能需要大家对数据库操作有一点熟悉。相信大家都是抱着学习Django的目的来看这一套入门笔记,我就不敢再各位数据库大佬们面前班门弄斧了,直接进入本章学习了。

SQLite的启动

对数据库的操作可以利用GUI工具,也可以通过命令行sqlite3 db.sqlite3,我们在db.sqlite3所在的目录下使用上述命令,就可以进入到db.sqlite3数据库,如果本地开发中没有配置SQLite环境,可以自行搜索如何配置。

如果我们输入命令,看到如下信息,说明进入成功:

 ~/DjangoProject/myblog $ sqlite3 db.sqlite3
SQLite version 3.29.0 2019-07-10 17:32:03
Enter ".help" for usage hints.
sqlite>

然后我们使用“.tables”即可查看当前数据库中的数据库表的名称,除了blog_blogarticles是我们通过BlogArticles模型建立的,其余的都是项目默认创建的数据库表。

 ~/DjangoProject/myblog $ sqlite3 db.sqlite3
SQLite version 3.29.0 2019-07-10 17:32:03
Enter ".help" for usage hints.
sqlite> .tables
auth_group                  blog_blogarticles         
auth_group_permissions      django_admin_log          
auth_permission             django_content_type       
auth_user                   django_migrations         
auth_user_groups            django_session            
auth_user_user_permissions
sqlite> 

接下来使用pragma table_info(blog_blogarticles);命令来查看blog_blogarticles表的结构:

sqlite> .header on
sqlite> pragma table_info(blog_blogarticles);
cid|name     |type        |notnull|dflt_value|pk
  0|  id     |integer     |1      |          |1
  1|title    |varchar(300)|1      |          |0
  2|body     |text        |1      |          |0
  3|publish  |datetime    |1      |          |0
  4|author_id|integer     |1      |          |0
sqlite> 

.header on 开启头部显示
SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。一个 PRAGMA 值可以被读取,也可以根据需求进行设置。

我们可以大致查看上面的表结构,cid是指列id,name是指列名,type是指列类型,notnull非空,值为1表示True,dflt_value是指default默认值(这一列没有值,说明设置设置默认值),pk是指primary_key主键。

大家可以跟我们在前一章中的数据模型BlogArticles所规定的字段和属性进行对比,是不是刚好我们利用数据迁移成功将数据模型转化为数据库表。

创建超级管理员

我们可以在命令行中输入python manage.py createsuperuser创建一个Django超级管理员,输入用户名和密码,当提示Superuser created successfully,创建成功。如下:

 ~/DjangoProject/myblog $ python manage.py createsuperuser 
Username (leave blank to use 'yuzhou_1su'): zoeu
Email address: test@test.com
Password: 
Password (again): 
Superuser created successfully.

然后我在浏览器输入http://127.0.0.1:8000/admin/ ,就可以打开如下界面:
在这里插入图片描述
输入刚才创建的超级管理员的用户名和密码就可以进入系统,如图:
在这里插入图片描述
Groups和Users是Django在用户管理应用中默认的用户分类。为了让我们得管理员用户能够发布博客,我们需要在./blog/admin.py 文件中,加入如下代码:

from django.contrib import admin
# 新增,将BlogArticles类引入到当前环境中
from .models import BlogArticles    

# 将BlogArticles注册到admin中
admin.site.register(BlogArticles)

刷新页面,我们可以得到如下的页面:
在这里插入图片描述
超级管理员界面先放在这,我们回到模型操作。

试验模型API

使用Python进行开发的一个重要优点是交互式shell。我们在./blog/models.py中创建了数据模型后,Django就会自动提供数据库抽象的API,这是一种快速尝试和试验API的方法。通过这个API我们可以快速创建、获取、修改和删除对象,对此我们称之为ORM(Object-Relational Mapper)

我们可以使用manage.py 工具加载我们的项目来启动 Python shell :

python3 manage.py shell
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> 

请特别注意我们进入shell的方式,不是直接在命令行中敲python3,虽然这与直接输入python指令来调用交互式控制台是非常相似。

区别是我们利用manage.py工具,将项目将被添加到sys.path并加载Django。这意味着我们可以在项目中导入我们的模型和其他资源并使用它。

让我们从导入BlogArticles类开始:下面就可以开始我们对数据库的增、删、改、查等操作。

$ python3 manage.py shell  
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.contrib.auth.models import User
>>> from blog.models import BlogArticles
>>> admin = User.objects.get(username="zoue")
>>> admin.username
'zoeu'
>>> admin.id
1
>>> admin.password
'pbkdf2_sha256$150000$b9j0ZKBVZSo1$l+fEIiKIaS6u1mhjMPOX1qR0xMOaemnRJIwiE2lNn60='
>>> admin.email
'test@test.com'
>>> type(admin)
<class 'django.contrib.auth.models.User'>

以上是对用户的查询操作是不是刚好是我们上一节中在创建管理员的内容,恭喜你!

接下来,我们对博客文章进行操作,要创建新的 BlogArticle 对象,我们可以执行以下操作:

>>> BlogAriticle01 = BlogArticles(title ='DjangoNotes_Day01', author=zoue, body='Django是啥?');

为了将这个对象保存在数据库中,我们必须调用save方法:

>>> BlogAriticle01.save()

save方法用于创建和更新对象。这里Django创建了一个新对象,因为这时BlogAriticle01 实例没有id。第一次保存后,Django会自动设置ID:

>>> BlogAriticle01.id
4

因为我自己在之前创建过其它文章,所以这个id 值为4,如果你是按照本入门笔记一步步操作过来,id 值应该为1。
当然,还可以查看其它属性,这里统一将命令敲出来:

>>> BlogAriticle01.title
'DjangoNotes_Day01'
>>> BlogAriticle01.author
<User: admin>
>>> BlogAriticle01.body
'Django是啥?'
>>> BlogAriticle01.publish
datetime.datetime(2019, 9, 30, 19, 56, 58, 735676)
>>> 

每个Django模型都带有一个特殊的属性; 我们称之为模型管理器(Model Manager)。你可以通过属性objects 来访问这个管理器,它主要用于数据库操作。例如,我们可以使用它来直接创建一个新的Board对象:

>>> BlogArticle02 = BlogArticles.objects.create(title='Python', author=admin, body='Head First to Python.')
>>> BlogArticle02.id
5

  1. 要更新一个值,我们可以利用如下操作:
>>> BlogAriticle01.body = 'I love Django, 但是我太难了'
>>> BlogAriticle01.body
'I love Django, 但是我太难了'
>>> blogs = BlogArticles.objects.all()
>>> blogs
<QuerySet [<BlogArticles: Python>, <BlogArticles: DjangoNotes_Day01>, <BlogArticles: right here waiting>, <BlogArticles: Yesterday once more>, <BlogArticles: You Raise me up>]>

结果是一个QuerySet,我们可以将这个QuerySet看作一个列表。假设我们想遍历它并打印每个模块的标题。

>>> for blog in blogs:
...     print(blog.title)
... 
Python
DjangoNotes_Day01
right here waiting
Yesterday once more
You Raise me up
>>> 

同样,我们可以使用模型的 管理器(Manager) 来查询数据库并返回单个对象。为此,我们要使用 get 方法:

>>> BlogArticles.objects.get(id=5)
<BlogArticles: Python>
>>> BlogArticles.objects.get(id=5).delete() 
(1, {'blog.BlogArticles': 1})

删除后再重新查看一下QuerySet,发现没有了<BlogArticles: Python>,说明删除成功。

>>> blogs = BlogArticles.objects.all()
>>> blogs
<QuerySet [<BlogArticles: DjangoNotes_Day01>, <BlogArticles: right here waiting>, <BlogArticles: Yesterday once more>, <BlogArticles: You Raise me up>]>

除了get方法,其实也可以用filter进行筛选查询id=5然后删除,BlogArticles.objects.filter(id=5).delete(),关于filter方法我们将在后面的文章中进行介绍。

总结

下面是我们在本节中关于模型学到的方法和操作,使用BlogArticles模型作为参考。大写的 BlogArticles指的是类,BlogArticles01BlogArticles的一个实例(或对象)

操作代码示例
创建一个对象而不保存BlogAriticle01 = BlogArticles()
保存一个对象(创建或更新)BlogAriticle01.save()
数据库中创建并保存一个对象BlogArticle02 = BlogArticles.objects.create(title=’…’, author=…, body=’…’)
列出所有对象BlogArticles.objects.all()
通过字段标识获取单个对象BlogArticles.objects.get(id=5)
通过字段标识删除单个对象BlogArticles.objects.get(id=5).delete()

怎么样,学到这里的读者是不是很激动啊。我发现我在写这些文字的时候也是重复练手的好机会,加深我对模型操作的印象,也希望大家通过多做练习明白这些操作。

下一章就是我们要开始学习视图(views)的部分了,我们将通过管理员界面创建博客文章,然后在HTML中显示我们的博客名。下一章再见!


注:Django入门笔记汇总博客

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Django基础教程PDF是一本详细讲解Django框架的书籍。Django是一个基于Python的高效Web应用开发框架,使用Django可以快速开发高质量、安全且易维护的Web应用程序。这本书从Django的基础概念、安装、配置、模型、视图、模板、表单、认证、管理等方面,详细解释了如何使用Django进行Web应用开发。 其中,书籍的第一部分主要讲解了Django框架的基础知识,包括Django的架构、安装配置、虚拟环境、应用以及包管理等等。第二部分则详细阐述了Django的各种模型,包括Model、QuerySet以及Django ORM的操作等。第三部分则重点讲解了Django的视图,包括视图函数、URL路由以及视图的响应等等。第四部分则阐述了Django的模板系统,包括模板语言、模板渲染以及静态文件等。第五部分讲解了Django的表单系统,包括表单类的定义、视图函数的编写以及表单的提交和验证等。第六部分则深入讲解Django的认证系统、权限管理以及用户注册等内容。最后一部分则介绍了Django的管理后台、中间件、缓存、测试和部署等方面的内容。 总之,Django基础教程PDF对于想要学习并掌握Django框架的开发者来说是一本非常好的入门书籍。它详细介绍了Django框架的整个开发流程,给予开发者夯实的理论基础和实操能力,让开发者能够高效地使用Django框架进行Web应用开发。 ### 回答2: Django是一个高效的Python Web应用程序框架,它的特点是快速开发、可拓展性和丰富的功能性。对于初学者来说,学习Django框架并不是一件容易的事情,因此《Django基础教程》成为了很多开发者必备的学习资料。 《Django基础教程》详细介绍了Django框架的各种概念和操作方法,包括了模型、视图、模板、表单、路由等方面的基础知识。这本教程以实践为主,让读者通过自己手写一个简单博客系统来获取对Django框架的全面认识。 教程的阅读需要基本的Python编程知识,因为它是使用Python语言编写的。在读完本教程后,读者可以掌握Django框架的开发流程,了解Django的中间件和模型、视图、模板的关系,掌握如何与数据库进行交互以及如何使用Django表单等。 值得一提的是,《Django基础教程》是一本中文教程,将一些比较抽象的概念解释得十分清楚易懂。而且它还针对Django 2.x 版本进行了详细介绍,非常贴近当前开发环境,可以让读者快速开发出一个简单的Web应用程序。 总而言之,《Django基础教程》是一本非常优秀、权威、全面的Django框架学习资料,它的内容详尽,范例丰富,让读者学习起来既轻松而又有深度。对于初学者来说,它是一个不容错过的学习宝典。 ### 回答3: Django是一个流行的Python Web框架,已经成为许多Web应用程序开发人员的首选。有很多教程和资源可用,其中包括Django基础教程,可作为入门学习Django的教材。 这本教程的重点是了解Django的基础知识,例如Django框架的架构、模型-视图-控制器(MVC)模式、Django模型Django视图等。它涵盖了创建新的Django项目,如何在Django项目中创建和管理应用程序,以及如何利用Django模板和表单在网页中呈现和处理数据。 该教程还提供了一些简单的应用程序示例,如博客和投票应用程序,这些教程旨在帮助读者嵌入并了解Django的工作原理。 在学习Django基础教程时,读者将学习如何编写干净、可读、可扩展和可维护的代码。这是应用程序开发中的最佳实践之一,有助于确保应用程序的可靠性。 总之,Django基础教程是入门学习Django框架的好材料,它能够为初学者提供一些基本的理解和编程技能,同时也提供了一些实用而有趣的示例,帮助学习者了解和熟悉Django框架的工作方式。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值