1 Django项目创建第一个应用
Django 项目就是基于 Django 框架开发的 Web 应用,它包含了一组配置和多个应用,我们把应用称之为 App,在前文中对它也做了相应的介绍,比如 auth、admin,它们都属于 APP。
一个 App 就是一个 Python 包,通常一个 App 可以包含模型、视图、模板和 URL 配置文件,可以被应用到多个 Django 项目中,因为它们的本质就是可被重用的 Python 软件包。
1.1 创建应用
Django 的设计目标是让开发者关注应用的功能逻辑的实现。
所以,创建应用的过程是非常简单的,利用 manage.py 提供的 startapp 命令就可以创建一个APP。
具体命令如下所示:
# 语法 # python manage.py startapp 应用名 python manage.py startapp index
startapp 同样也属于 manage.py 的子命令,用来创建 Django 的应用。
执行这个命令不会在命令行看到任何输出,但是可以在 manage.py 的同级目录下看到多出了一个 index 目录:
我们对这些文件做逐一的解释:
admin.py 用于将 Model 定义的数据表注册到管理后台,是 Django Admin 应用的配置文件
apps.py 用于应用程序本身的属性配置文件
models.py 用于定义应用中所需要的数据表
tests.py 文件用于编写当前应用程序的单元测试
views.py 用来定义视图处理函数的文件
一级目录下的 __init__.py 文件标识 index 应用是一个 Python 包
migrations 目录用于存储数据库迁移时生成的文件,该目录下的 __init__.py 文件标识 migrations 是一个 Python 包
这就是 index 应用涉及到的所有文件,当然在实际的开发工作中,该应用目录下的文件也不是一成不变的,开发者根据自己的需要会相应的增加文件或者子目录,比如 urls.py 文件或者存储静态文件的 static 目录等。所以大家千万不要认为 Django 框架自动生成的目录,无需我们做其他操作或者更改,这是使用 Django 的一个误区。
1.2 应用的添加
应用创建完成后,我们还需要在 settings.py 配置文件中对其进行添加。
我们已经对 INSTALLED_APPS 做了介绍,把我们创建的应用添加到这个列表,如下所示:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'index', ]
用如上方式添加完成后,就可以让 index 应用的和整个项目融为一体了。
接下来,就可以正式进入开发应用阶段了,通过实现一些小的功能点,让我们更加全面的了解 Django 框架。
2 Django ORM进阶应用
ORM (Object Realtional Mapping)即对象关系映射,它是一种基于关系型数据库的程序技术。ORM 允许你使用类和对象对数据库进行操作,这大大提高了对数据库的控制,避免了直接使用 SQL 语句对数据库进行操作。这种程序技术的底层主要是通过映射机制实现的,有兴趣的可以自己研究一下!
Web 开发中对数据库的操作是必不可少的,然而每种数据库的操作方式以及用法不尽相同。由于 Django 中 ORM 的存在,为我们操作不同种类的数据库提供了统一的方法,ORM 适配了多种常用的关系型数据库,例如 PostgreSQL、MySQL、Oracle、Sqlite3 等。
2.1 Django中定义数据表
那么在 Django 中如何使用 ORM 模块来定义一张数据表呢?
在定义数据表之前,我们应该首先理解什么是模型类。
模型类
其实模型类本质上属于一个 Python 类,只不过在 Django 中称之为做模型类 ,它是由 django.db.models.Model 派生出的子类
通过上述介绍,我们可以这样理解:Django 中模型类就相当于 ORM 模块。
定义数据表
现在有一张用户信息表 UserInfo,它有两个字段 name 和 password,可以定义如下:
class UserInfo(models.Model): name = models.CharFiled(max_length=100) password = models.CharFiled(max_length=100)
通过以上代码,UserInfo 数据表就已经创建完成,我们对代码进行逐行解析:
第 1 行,使用 from django.db import models 导入 models 模块
第 2 行,使用 class 关键字对 UserInfo 表进行类定义,并继承了models 模块中的 Model 类
第3、4 行,数据表中的字段 name 和 password 是 UserInfo 类的属性,name 和 password 字段类型都是 CharFiled,字段长度均是100。
2.2 ORM定义项目数据表
下面我们用 ORM 定义 index 应用所需的数据表,首选找到 index 应用下的 models.py 文件。
在文件里添加如下代码:
from django.db import models # Create your models here. # 创建book表 class Book(models.Model): title = models.CharField(max_length=30, unique=True, verbose_name='书名') public = models.CharField(max_length=50, verbose_name='出版社') price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='定价') retail_price = models.DecimalField(max_digits=7, decimal_places=2, verbose_name='零售价', default="30") def __str__(self): return "title:%s pub:%s price:%s" % (self.title, self.public, self.price) # 创建作者表 class Author(models.Model): name = models.CharField(max_length=30, verbose_name='姓名') email = models.EmailField(verbose_name='邮箱') def __str__(self): return '作者:%s' % self.name # 创建用户信息表 class UserInfo(models.Model): username = models.CharField(max_length=24, verbose_name='用户注册') password = models.CharField(max_length=24, verbose_name='密码')
通过上述代码,我们定义了一个名叫 Book 的数据表。
数据表由以下字段构成书名(title)、出版社(public)、价格(price)、零售价(retail_price),而且对每个字段都做添加了相应的字段属性以及字段选项。
2.3 Filed的通用字段选项
Model 中添加的字段都是 Field 类型的实例,不同的 Field 类型可能会支持不同的字段选项,但是也有很多字段选项是通用的,即可以用在任何一种 Field 类型中。这里介绍一些常用且重要的通用字段选项,它们都有对应的默认值,这些字段选项都是可选的,理解这些有助于更好地使用它们。
blank
默认值是 False,设置为 True 时,字段可以为空。设置为 False 时,字段是必须填写的。如果是字符型字段 CharField 和 TextField,它们是用空字符串来存储空值的。
unique
默认值是 False,它是一个数据库级别的选项,规定该字段在表中必须是唯一的。
null
默认为 False,如果此选项为 False 建议加入 default 选项来设置默认值。如果设置为 True,表示该列值允许为空。日期型、时间型以及数字型字段不接受空字符串。所以当设置 IntegerField,DateTimeField 型字段可以为空时,需要将 blank 与 null 均设为 True 才可以。
db_index
默认值是 False,如果设置为 True,Django 则会为该字段创建数据库索引,如果该字段经常作为查询的条件,那么就需要设置 db_index 选项,从而加快数据的检索速度。
db_column
这个选项用于设置数据库表字段的名称。如果没有指定,Django 默认使用 Model 中字段的名字。
default
用于给字段设置默认值,该选项可以设置为一个值或者是可以调用对象,但不能是可变对象,不同字段类型默认值也不同,比如 BooleanFiled 布尔类型 default 值为Ture 或者 False。主要的使用场景是当一个字段的值被用户省略时,后台服务器自动为该字段的设置默认值。
primary_key
默认值是 False,如果设置为 True,表示该字段为主键,在 Django 中 默认 id 为主键,也就是说即使你的数据表中没有创建 id 字段,Django 也会自动为你创建 id 字段并将其设置为主键。如果你在表中设置了其他字段为主键的时,那么 Django 将取消为 id 字段设置主键。
choices
这个选项用于给字段设置可以选择的值。它是一个可迭代对象,即列表或者元组,其中每一个元素都是一个二元组(a,b)的形式,a 是用来选择的对象,b 是对 a 的描述信息。比如我们对某个人性别定义数据表如下所示:
# 创建表 class UserInfo(models.Model): # 定义chocies参数的对应关系,以元组(或者列表)的形式进行表述: choices = ( (male, '男性'), (female, '女性'), ) gender = models.CharField(max_length=2,choices = choices,default='male')
verbose_name
设置此字段在 admin 后台管理系统界面上的显示名称,如果没有设置这个字段,Django 将会直接展示字段名并且将字段中的下划线转变为空格。