应用是一个Web应用程序,它完成具体的事项 —— 比如一个博客系统、一个存储公共档案的数据库或者一个简单的投票应用。
应用可以放在Python path上的任何位置。在本教程中,我们将放在与manage.py文件同级目录下,以便可以将它作为顶层模块导入,
而不是testproject的子模块。我们以创建一个投票系统为例来创建一个应用。
现在我们切换到与manage.py文件同级目录下
1.创建应用
$ python manage.py startapp myapp
我们可以看一下执行命令后增加了哪些目录文件:
$ ls -la
total 80
drwxr-xr-x 6 chenqianqian staff 204 4 17 17:39 .
drwxr-xr-x+ 41 chenqianqian staff 1394 4 17 17:24 ..
-rw-r--r-- 1 chenqianqian staff 36864 4 17 17:33 db.sqlite3
-rwxr-xr-x 1 chenqianqian staff 809 4 17 17:24 manage.py
drwxr-xr-x 9 chenqianqian staff 306 4 17 17:39myapp
drwxr-xr-x 7 chenqianqian staff 238 4 17 17:33 testproject
$ cd myapp/
$ ls -la
total 40
drwxr-xr-x 9 chenqianqian staff 306 4 17 17:39 .
drwxr-xr-x 6 chenqianqian staff 204 4 17 17:39 ..
-rw-r--r-- 1 chenqianqian staff 0 4 17 17:39 __init__.py
-rw-r--r-- 1 chenqianqian staff 63 4 17 17:39 admin.py
-rw-r--r-- 1 chenqianqian staff 85 4 17 17:39 apps.py
drwxr-xr-x 3 chenqianqian staff 102 4 17 17:39 migrations
-rw-r--r-- 1 chenqianqian staff 57 4 17 17:39 models.py
-rw-r--r-- 1 chenqianqian staff 60 4 17 17:39 tests.py
-rw-r--r-- 1 chenqianqian staff 63 4 17 17:39 views.py
2.创建数据模型
定义模型即定义该模型所对应的数据库设计及其附带的元数据。在这个简单的投票应用中,我们将创建两个模型: Question和Choice。Question对象具有一个question_text(问题)属性和一个publish_date(发布时间)属性。 Choice有两个字段:选择的内容和选择的得票统计。 每个Choice与一个Question关联。
编辑models.py 文件:
$ vi models.py
$ more models.py
from django.db import models
# Create your models here.
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('data publlish')
class Choice(models.Model):
question=models.ForeignKey(Question)
choice_text=models.CharField(max_length=200)
vote=models.IntegerField(default=0)
上述代码非常直观。每个模型都用一个类表示,该类继承自django.db.models.Model。每个模型都有一些类变量,在模型中每个类变量都代表了数据库中的一个字段。注意我们使用ForeignKey定义了一个关联。它告诉Django每个Choice都只关联一个Question。
3.激活模型
编辑testproject/settings.py文件,并修改INSTALLED_APPS设置以包含字符串'myapp':
# Application definition
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
让Django知道要包含myapp应用。 让我们运行另外一个命令:
$ python manage.py makemigrations myapp
通过运行makemigrations告诉Django,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改存储为迁移文件。这些文件存储在myapp/migrations下,我们可以通过以下命令来查看迁移行为所执行的SQL语句:
$ python manage.py sqlmigrate myapp 0001
如果有兴趣,你还可以运行python manage.py check;它会检查你的项目中的模型是否存在问题,而不用执行迁移或者操作数据库。
由于我们新增了一些模型,所以需要我们执行下面命令创建相应的数据库表:
$ python manage.py migrate
结论:当我们创建应用模型时需要进行三个步骤--编辑models.py文件,运行python manage.py makemigrations命令,运行python manage.py migrate命令
4.进一步丰富models.py文件
我们可以根据应用的需要向models.py文件中增加函数的定义
#--------------------------------------------------------------------
import datetime
from django.db import models
from django.utils import timezone
# Create your models here.
class Question(models.Model):
question_text=models.CharField(max_length=200)
pub_date=models.DateTimeField('data publlish')
def _str_(self):
return self.question_text
def was_published_recently(self):
return self.pub_date>=timezone.now-datetime.timedelta(days=1)
class Choice(models.Model):
question=models.ForeignKey(Question)
choice_text=models.CharField(max_length=200)
vote=models.IntegerField(default=0)
def _str_(self):
return self.choice_text
#------------------------------------------------------------------------