编写你的第一个 Django 应用程序
从上一篇结束的地方开始。我们将设置数据库,创建您的第一个模型,并快速介绍 Django 自动生成的管理站点。
从哪里获得帮助:
如果您在完成本教程时遇到问题,请转到常见问题解答的“获取帮助”部分。
数据库设置
现在,打开mysite/settings.py。它是一个普通的 Python 模块,具有代表 Django 设置的模块级变量。
默认情况下,配置使用 SQLite。如果您是数据库新手,或者您只是有兴趣尝试 Django,那么这是最简单的选择。SQLite 包含在 Python 中,因此您无需安装任何其他内容来支持您的数据库。然而,当开始您的第一个实际项目时,您可能希望使用更具可扩展性的数据库,例如 PostgreSQL,以避免日后数据库切换的麻烦。
如果您希望使用其他数据库,请安装适当的数据库绑定并更改项目中的以下键 以匹配您的数据库连接设置:DATABASES 'default'
- ENGINE– 'django.db.backends.sqlite3'、 'django.db.backends.postgresql'、 'django.db.backends.mysql'或 'django.db.backends.oracle'。其他后端也可用。
- NAME– 您的数据库的名称。如果您使用 SQLite,数据库将是您计算机上的一个文件;在这种情况下,NAME 应该是该文件的完整绝对路径,包括文件名。默认值会将文件存储在您的项目目录中。BASE_DIR / 'db.sqlite3'
如果您不使用 SQLite 作为数据库,则必须添加其他设置,例如 USER、PASSWORD和。HOST有关更多详细信息,请参阅 的参考文档DATABASES。
对于 SQLite 以外的数据库
如果您使用的是 SQLite 之外的数据库,请确保此时您已经创建了数据库。在数据库的交互式提示中使用“ ”来执行此操作。CREATE DATABASE database_name;
还要确保提供的数据库用户mysite/settings.py 具有“创建数据库”权限。这允许自动创建 测试数据库,稍后的教程将需要该数据库。
如果您使用 SQLite,则无需事先创建任何内容 - 数据库文件将在需要时自动创建。
在编辑时mysite/settings.py,设置TIME_ZONE您的时区。
另请注意INSTALLED_APPS文件顶部的设置。它保存在此 Django 实例中激活的所有 Django 应用程序的名称。应用程序可以在多个项目中使用,您可以打包并分发它们以供其他人在其项目中使用。
默认情况下,INSTALLED_APPS包含以下应用程序,所有这些应用程序都附带 Django:
- django.contrib.admin– 管理站点。您很快就会使用它。
- django.contrib.auth– 身份验证系统。
- django.contrib.contenttypes– 内容类型框架。
- django.contrib.sessions– 会话框架。
- django.contrib.messages– 消息传递框架。
- django.contrib.staticfiles– 管理静态文件的框架。
默认情况下包含这些应用程序是为了方便常见情况。
不过,其中一些应用程序至少使用一个数据库表,因此我们需要先在数据库中创建这些表,然后才能使用它们。为此,请运行以下命令:
$ python manage.py migrate
该migrate命令查看INSTALLED_APPS设置并根据mysite/settings.py文件中的数据库设置和应用程序附带的数据库迁移创建任何必要的数据库表(我们将在稍后介绍这些内容)。对于它应用的每个迁移,您都会看到一条消息。如果您有兴趣,请运行数据库的命令行客户端并键入\dt(PostgreSQL)、(MariaDB、MySQL)、 (SQLite) 或(Oracle) 以显示 Django 创建的表。SHOW TABLES;.tablesSELECT TABLE_NAME FROM USER_TABLES;
对于极简主义者来说
正如我们上面所说,默认应用程序包含在常见情况下,但并不是每个人都需要它们。INSTALLED_APPS如果您不需要其中任何或全部,请随时注释掉或在运行之前删除相应的行 migrate。该 migrate命令将仅对 INSTALLED_APPS.
数据库操作例子
第一节:入门导引:Django 数据库基础
连接数据库(在 settings.py 中):
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
创建模型类(在 models.py 中):
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
birth_date = models.DateField()
class Book(models.Model):
title = models.CharField(max_length=200)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
publication_date = models.DateField()
同步数据库:
python manage.py makemigrations
python manage.py migrate
第二节:模型设计:创建与关系建立
定义模型字段:
class Product(models.Model):
name = models.CharField(max_length=100)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField()
建立外键关系:
class Order(models.Model):
customer = models.ForeignKey(Customer, on_delete=models.CASCADE)
products = models.ManyToManyField(Product)
order_date = models.DateField()
第三节:数据操作:CRUD 操作实践
创建数据:
author = Author(name='J.K. Rowling', birth_date='1965-07-31')
author.save()
查询数据:
authors = Author.objects.all()
specific_author = Author.objects.get(name='J.K. Rowling')
更新数据:
author = Author.objects.get(name='J.K. Rowling')
author.birth_date = '1965-08-31'
author.save()
删除数据:
author = Author.objects.get(name='J.K. Rowling')
author.delete()
第四节:高级查询:深入了解 QuerySet
过滤数据:
recent_books = Book.objects.filter(publication_date__gte='2020-01-01')
排序数据:
sorted_books = Book.objects.order_by('-publication_date')
聚合数据:
from django.db.models import Count
author_count = Author.objects.annotate(num_books=Count('book'))
联表查询:
related_books = Book.objects.filter(author__name='J.K. Rowling')
第五节:性能优化:构建高效数据库应用
添加索引:
class Product(models.Model):
name = models.CharField(max_length=100, db_index=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
description = models.TextField()
使用select_related优化查询:
order = Order.objects.select_related('customer').get(id=1)
请注意,上述代码示例是非常简化的,实际上,每个主题都可以包含更多复杂的概念和技巧。可以通过阅读 Django 官方文档和其他教程来深入学习和实践每个主题。