Django是Python语言编写的一个全栈式Web框架,可以帮助我们快速编写一个具有数据库功能、增删查改、后台管理等功能的网站。假如你只需要一些很简单的功能,使用flask可能是个更好的选择。但是如果你想快速实现一个XX管理系统,那么用Django绝对是个好办法。本文参考了Django官方文档的Tutorials。另外我这里用的终端是Powershell,如果有些命令不能运行,去掉前面的.\
。
快速开始
安装Django
首先安装Django包,现在Django已经到了2.0版本,如果还在使用1.11请尽快升级。旧版本以后只修复bug,不会添加新功能。
pip install django
创建项目
Django安装好之后,会附带一个命令行工具django-admin
,可以帮助我们管理Django项目。我们可以使用下面的命令创建一个新的Django项目模板。这样会创建django_sample
文件夹,项目文件就在其中。另外需要注意项目文件夹最好是个性化一点的,不要和django、sys这样的第三方库或者python系统库重名。
django-admin startproject hello_django
创建好项目之后,我们进入项目文件夹中。用下面的命令就可以运行Django项目了。默认情况下,我们可以通过http://127.0.0.1:8000/来访问正在运行的项目。由于没有任何页面,所以会显示这么一个调试窗口。
python manage.py runserver
创建app
在Django项目中,app表示更小的一个功能单位,比方说在一个博客管理系统中,对博客的增删查改等功能就应该聚合在一个app中。进入项目目录中,用startapp
命令创建app。
cd .\hello_django\
django-admin startapp hello
这时候项目目录结构应该类似这样。
为了让django包含创建的app,我们还需要激活app。打开配置文件,找到INSTALLED_APPS
,然后把我们创建的app配置添加进去,这样django才能使用我们的app。
INSTALLED_APPS = [
'hello.apps.HelloConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
模型层
设置数据库
打开配置文件settings.py
,找到数据库一行,可以看到如下的配置。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
如果我们这时候使用python .\manage.py migrate
命令生成数据库表,就会在项目中出现一个db.sqlite3
文件,这就是默认的数据库文件,使用IDEA右键点击并选择As DataSource
就可以将其作为数据库打开。然后我们会看到生成了10多个数据库表,这是Django程序存储数据生成的表。
除了sqlite数据库,django还支持POstgreSQL、MySQL、Oracle这几个数据库。如果添加第三方后端支持,还可以使用SQL Server、IBM DB2等数据库。例如我现在准备使用PostgreSQL数据库,就修改为下面的配置。这时候NAME属性的意义就是数据库的名字。另外必须确保数据库事先存在,django可以自动创建表,但是不能自动创建数据库。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'test',
'USER': 'postgres',
'PASSWORD': '12345678',
'HOST': '127.0.0.1',
'PORT': '5432',
}
}
创建模型
django支持ORM模型,也就是说我们可以不使用SQL语句就对数据进行增删查改。我们要做的就是在模型中指定和数据库的关系。
打开hello app中的models.py
文件,然后添加下面两个模型。这两个模型是宠物和主人的关系。如果使用过其他ORM框架比如Hibernate之类的话,对这种结构应该非常熟悉。我们在定义模型的时候指定每一个字段的名字、长度、是否唯一等信息。值得注意的是,如果需要的值只可能是几个固定值,可以定义一个元组(该元组有一对值构成,第一个值是实际存在数据库中的值,第二个是给人类显示的友好可读值),然后传入choices
参数。models.ForeignKey
用来指定外键约束,还有一些其他的对应关系例如多对多、一对一等就不介绍了。
from django.db import models
class Owner(models.Model):
GENDER = (
('M', 'MALE'),
('F', 'FEMALE')
)
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30, unique=True)
gender = models.CharField(max_length=1, choices=GENDER)
birthday = models.DateField()
class Pet(models.Model):