$ pip3 install djangorestframework
$ pip3 install django-filter
$ pip3 install Markdown
Scrum板数据图
在任何项目中,对数据的建模都是关键的第一步,需要考虑的要点:
- 任务板通常见于Scrum风格的开发中,用于在当前的sprint中管理任务
- 任务从后台日志中被转移到待办任务集合中
- 过程中可以通过多种状态来跟踪进度,例如“进行中”或者“测试中”
- 一个任务要成为“已完成”状态,之前的任务必须是它的一部分
$ django-admin.py startproject scrum
$ cd scrum/
$ python3 manage.py startapp board
项目配置
scrum/settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Third party apps
'rest_framework',
'rest_framework.authtoken',
# Internal apps
'board',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
scrum/urls.py
from django.conf.urls import include, url
from rest_framework.authtoken.views import obtain_auth_token
urlpatterns = [
url(r'^api/token/', obtain_auth_token, name='api-token'),
]
from django.db import models
from django.conf import settings
from django.utils.translation import ugettext_lazy as _
class Sprint(models.Model):
name = models.CharField(max_length=100, blank=True, default='')
description = models.TextField(blank=True, default='')
end = models.DateField(unique=True)
def __str__(self):
return self.name or _('Sprint ending %s') % self.end
class Task(models.Model):
STATUS_TODO = 1
STATUS_IN_PROGRESS = 2
STATUS_TESTING = 3
STATUS_DONE = 4
STATUS_CHOICES = (
(STATUS_TODO, _('Not Started')),
(STATUS_IN_PROGRESS, _('In Progress')),
(STATUS_TESTING, _('Testing')),
(STATUS_DONE, _('Done')),
)
name = models.CharField(max_length=100)
description = models.TextField(blank=True, default='')
sprint = models.ForeignKey(Sprint, blank=True, null=True, on_delete=models.DO_NOTHING)
status = models.SmallIntegerField(choices=STATUS_CHOICES, default=STATUS_TODO)
order = models.SmallIntegerField(default=0)
assigned = models.ForeignKey(settings.AUTH_USER_MODEL, null=True, blank=True, on_delete=models.DO_NOTHING)
started = models.DateField(blank=True, null=True)
due = models.DateField(blank=True, null=True)
completed = models.DateField(blank=True, null=True)
def __str__(self):
return self.name
$ subl board/models.py
$ python3 manage.py makemigrations board
$ python3 manage.py migrate
$ python3 manage.py createsuperuser
Username (leave blank to use 'dong'): demo
Email address: demo@example.com
设计API
链接资源文件