深入Django(二)

简介: 本文介绍了Django的模型(Models)系统,它是Django框架中处理数据库的核心部分。模型是通过Python类定义的,对应数据库中的表,属性代表表的字段。通过模型,可以方便地操作数据,如创建、查询、更新和删除记录。文中展示了如何创建`Author`和`Post`模型,以及如何使用ORM进行对象操作。此外,还提到了模型的高级特性,如字段选项、字段类型、关系以及自定义方法和属性,这些都是Django高效管理数据的关键。理解模型对于Django应用开发至关重要。

Django模型(Models)系统

引言

在昨天的博客中,我们成功搭建了Django开发环境并运行了第一个项目。今天,我们将深入Django的核心——模型(Models)系统。模型是Django中用于定义数据库表的对象,它们是MVC架构中的“M”部分。

什么是Django模型?

Django模型是一个Python类,它继承自django.db.models.Model。每个模型类对应数据库中的一个表,模型的属性对应表的字段。Django的模型系统提供了一个高级的抽象层,让你可以用Python代码来操作数据库。

创建模型

让我们创建一个简单的博客应用程序,其中包含文章和作者两个模型。

  1. 定义模型:在你的Django应用目录下,找到models.py文件,并定义你的模型。
  2. from django.db import modelsclass Author(models.Model):    name = models.CharField(max_length=100)    email = models.EmailField()     def __str__(self):        return self.nameclass Post(models.Model):    title = models.CharField(max_length=200)    content = models.TextField()    author = models.ForeignKey(Author, on_delete=models.CASCADE)    published_date = models.DateTimeField(auto_now_add=True)     def __str__(self):        return self.title
  3. 在这个例子中,Author模型有两个字段:nameemailPost模型有四个字段:titlecontentauthorpublished_dateauthor字段是一个外键,它指向Author模型,表示一个文章属于一个作者。
  4. 激活模型:创建模型后,你需要告诉Django这些模型应该被创建在数据库中。这通过运行以下命令完成:
  5. python manage.py makemigrationspython manage.py migrate
  6. makemigrations命令会检查你对模型的更改,并为这些更改创建迁移文件。migrate命令应用这些迁移到数据库。

使用模型

模型不仅仅是数据库表的抽象,它们还提供了丰富的方法来操作数据。

  1. 创建对象:你可以使用模型类来创建新的数据库记录。
  2. from myapp.models import Authorauthor = Author(name='John Doe', email='john@example.com')author.save()
  3. 查询对象:Django的ORM提供了强大的查询API来检索数据库中的数据。
  4. from myapp.models import Post# 获取所有文章posts = Post.objects.all()# 获取特定作者的文章john_posts = Post.objects.filter(author__name='John Doe')# 获取最新文章latest_post = Post.objects.latest('published_date')
  5. 更新和删除对象:同样,你可以更新或删除数据库中的记录。
  6. # 更新文章内容post = Post.objects.get(id=1)post.content = 'New content'post.save()# 删除文章post.delete()

模型的高级特性

Django模型提供了许多高级特性,可以帮助你更有效地管理数据。

  • 字段选项:每个字段类型都有多种选项,比如max_lengthnullblank等,这些选项可以控制字段的行为。
  • 字段类型:Django提供了多种字段类型,如CharFieldIntegerFieldDateField等,以适应不同的数据需求。
  • 关系:Django支持多种类型的关系,包括一对一、一对多和多对多。
  • 方法和属性:你可以在模型中定义方法和属性,这些方法和属性可以被序列化,用于表单验证等。

总结

在今天的教程中,我们学习了Django模型的基础知识,包括如何定义模型、激活模型、使用模型进行数据的创建、查询、更新和删除,以及模型的一些高级特性。模型是Django应用程序中数据管理的核心,理解模型对于构建任何Django应用程序都是至关重要的。

相关文章
|
1月前
|
SQL 前端开发 API
Django 系列
【8月更文挑战第20天】
25 1
|
4月前
|
数据库 数据安全/隐私保护 Python
深入Django(六)
本文档介绍了Django的表单系统,用于处理用户输入和数据验证。首先,表单通过声明式方式定义,如在`forms.py`中基于模型创建表单类。接着,在视图中处理GET和POST请求,使用`is_valid()`和`save()`方法验证和保存数据。在模板中,使用标签渲染表单和错误信息。表单系统还包括内置及自定义验证规则,以及与模型的集成,如`ModelForm`方便数据保存。此外,还有表单集、表单继承和自定义字段等高级功能。表单系统简化了用户输入管理和数据安全。
40 4
|
4月前
|
Python
深入Django(五)
Django的URL路由系统将URL映射到视图。创建URLconf涉及编写视图、定义URL模式(如`home`和`about`)并在项目主`urls.py`中包含应用URL。动态URL模式允许捕获数据,如`post/<int:post_id>/`,并在视图中使用。命名URL便于模板和视图中引用,通过`{% url %}`模板标签或`reverse`函数。正则表达式用于更复杂URL模式匹配。URL路由是Django中组织请求与响应的核心机制。
41 4
|
4月前
|
前端开发 Python
深入Django(四)
**Django模板系统**简介:用于结合数据与HTML,生成网页内容。模板系统让动态数据能插入静态页面,模板语言支持Python代码嵌入。创建模板涉及在应用目录下建立`templates`文件夹及编写HTML。使用时,视图通过`render`函数加载模板,URL配置指向相应视图。模板语言包含控制结构(如if、for)、过滤器(如日期格式化、字符串截取)和自定义过滤器。模板继承则促进布局一致性,允许子模板扩展基础模板。模板系统简化了Django中的动态内容渲染。
23 3
|
4月前
|
SQL 中间件 Linux
深入Django系列
本文是Django入门教程的第一天,简要介绍了Django,一个遵循DRY原则的开源Web框架。核心特性包括ORM、自动URL路由、模板系统、表单处理和中间件支持。随后,文章指导读者如何搭建开发环境:安装Python,创建并激活虚拟环境,使用pip安装Django,创建项目及运行开发服务器。通过这些步骤,读者可以开始他们的第一个Django项目。
22 2
|
数据库 数据安全/隐私保护 Python
|
前端开发
Django-SerializerMethodField
DRF-Serializer-SerializerMethodField,更加灵活的修改返回给前端的数据
|
算法 前端开发 程序员
初识Django(一)
什么Django        Django是一个开放源代码的Web应用框架,由Python写成。采用了MVC的框架模式,即模型M,视图V和控制器C。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的,即是CMS(内容管理系统)软件。
1592 0
|
Web App开发 前端开发 数据库
Django中的ModelForm
一、ModelForm的基本用法示例: from django import forms from app01 import models class BookModelForm(forms.
1165 0
|
前端开发 关系型数据库 数据库
Django初探(二)
之前写过一篇Django的介绍,简单部署之后就没有深入跟进了。 Django初探 上周末去广州参加技术大会,在往返的飞机上,自己调试了下Django里面的内容。
1282 0