创建Django项目
django-admin startproject name
创建子应用
python manager.py startapp name
创建工程
在使用Flask框架时,项目工程目录的组织与创建是需要我们自己手动创建完成的。
在django中,项目工程目录可以借助django提供的命令帮助我们创建。
1>. 创建
创建工程的命令为:
django-admin startproject 工程名称
-
例如:想要在桌面的code目录中创建一个名为demo的项目工程,可执行如下命令:
cd ~/Desktop/Code django-admin startproject bookmanager
执行后,会多出一个新目录名为bookmanager,此即为新创建的工程目录。
2>. 工程目录说明
查看创建的工程目录,结构如下
-
与项目同名的目录,此处为bookmanager。
-
settings.py是项目的整体配置文件。
-
urls.py是项目的URL配置文件。
-
wsgi.py是项目与WSGI兼容的Web服务器入口。
-
manage.py是项目管理文件,通过它管理项目。
3>. 运行开发服务器
在开发阶段,为了能够快速预览到开发的效果,django提供了一个纯python编写的轻量级web服务器,仅在开发阶段使用。
运行服务器命令如下:
python manage.py runserver ip:端口
"或:"
python manage.py runserver
可以不写IP和端口,默认IP是127.0.0.1,默认端口为8000。
启动后可见如下信息:
在浏览器中输入网址“127.0.0.1:8000”便可看到效果。
-
django默认工作在调式Debug模式下,如果增加、修改、删除文件,服务器会自动重启。
-
按ctrl+c停止服务器。
创建子应用
在Web应用中,通常有一些业务功能模块是在不同的项目中都可以复用的,故在开发中通常将工程项目拆分为不同的子功能模块,各功能模块间可以保持相对的独立,在其他工程项目中需要用到某个特定功能模块时,可以将该模块代码整体复制过去,达到复用。
在Flask框架中也有类似子功能应用模块的概念,即蓝图Blueprint。
Django的视图编写是放在子应用中的。
1>. 创建
在django中,创建子应用模块目录仍然可以通过命令来操作,即:
python manage.py startapp 子应用名称
manage.py为上述创建工程时自动生成的管理文件。
例如,在刚才创建的bookmanager工程中,想要创建一个用户book子应用模块,可执行:
cd ~/Desktop/code/book
python manage.py startapp book
执行后,可以看到工程目录中多出了一个名为book的子目录。
2>. 子应用目录说明
查看此时的工程目录,结构如下:
-
admin.py文件跟网站的后台管理站点配置相关。
-
apps.py文件用于配置当前子应用的相关信息。
-
migrations目录用于存放数据库迁移历史文件。
-
models.py文件用户保存数据库模型类。
-
tests.py文件用于开发测试用例,编写单元测试。
-
views.py文件用于编写Web应用视图。
3>. 注册安装子应用
创建出来的子应用目录文件虽然被放到了工程项目目录中,但是django工程并不能立即直接使用该子应用,需要注册安装后才能使用。
在工程配置文件settings.py中,INSTALLED_APPS项保存了工程中已经注册安装的子应用,初始工程中的INSTALLED_APPS如下:
注册安装一个子应用的方法,即是将子应用的配置信息文件apps.py中的Config类添加到INSTALLED_APPS列表中。
例如,将刚创建的book子应用添加到工程中,可在INSTALLED_APPS列表中添加’book.apps.BookConfig’。
模型
使用Django进行数据库开发的提示 :
-
MVT设计模式中的Model, 专门负责和数据库交互.对应(models.py)
-
由于Model中内嵌了ORM框架, 所以不需要直接面向数据库编程.
-
而是定义模型类, 通过模型类和对象完成数据库表的增删改查.
-
ORM框架就是把数据库表的行与相应的对象建立关联, 互相转换.使得数据库的操作面向对象.
使用Django进行数据库开发的步骤 :
-
定义模型类
-
模型迁移
-
操作数据库
1. 定义模型类
根据书籍表结构设计模型类:
-
模型类:BookInfo
-
书籍名称字段:name
根据人物表结构设计模型类:
-
模型类:PeopleInfo
-
人物姓名字段:name
-
人物性别字段:gender
-
外键约束:book
外键要指定所属的模型类book = models.ForeignKey(BookInfo)
说明 :
-
书籍-人物的关系为一对多. 一本书中可以有多个英雄.
-
不需要定义主键字段, 在生成表时会自动添加, 并且值为自增长.
根据数据库表的设计
-
在models.py中定义模型类,继承自models.Model
-
# models.py from django.db import models # Create your models here. # 准备书籍列表信息的模型类 class BookInfo(models.Model): # 创建字段,字段类型... name = models.CharField(max_length=10) # 准备人物列表信息的模型类 class PeopleInfo(models.Model): name = models.CharField(max_length=10) gender = models.BooleanField() # 外键约束:人物属于哪本书 book = models.ForeignKey(BookInfo)
2>. 模型迁移(数据库迁移) (建表)
数据迁移(Data migration)是指在存储类型、格式和计算机系统之间的数据转换。
-
数据迁移当一个机构决定使用新的计算系统或与当前的系统不兼容的数据管理系统时是必须的。
-
数据迁移通常有计划的执行来完成一个自动的迁移,从单调的任务中解放人力资源。当机构或个人改变计算机系统或升级到新的系统时需要它。
数据库迁移主要分为热迁移和冷迁移:
热迁移是将内存数据和硬盘数据同步进行迁移。
热迁移的优势在于其对用户业务的影响是非常小的;
热迁移对内存数据进行了迁移,用户业务应用对其是无感知的。
而缺点是热迁移的过程是不可中断的,整个操作过程相对复杂。
冷迁移就是在关机迁移。
优势是整个冷迁移过程的操作简单,一般为自动化操作。
但其缺点是该方式不支持内存数据的保存,容易导致内存数据的丢失。
迁移由两步完成 :
-
生成迁移文件:根据模型类生成创建表的语句
python manage.py makemigrations
-
执行迁移:根据第一步生成的语句在数据库中创建表
python manage.py migrate
-
迁移前
-
迁移后
-
提示:默认采用sqlite3数据库来存储数据