Django开发restful api的最佳实践 (二)
本系列的第一篇我们从使用Pycharm IDE从创建项目开始,一步一步完成了项目框架的搭建,这一篇我们就开始真正的coding
- 我们首先来定义model
我们打算为一个类似书籍管理的系统做个api,所以我们的model就是book,作为示例,我们只保存书本的名字,即name, 然后在加两个date_created和date_modified。用于标识创建和修改时间。
好了,编辑models.py
1
2
3
4
5
6
7
8
9
10 #api/models.py
from django.db import models
class Book(models.Model):
name = models.CharField(max_length=255, blank=False, unique=True)
date_created = models.DateTimeField(auto_now_add=True)
date_modified = models.DateTimeField(auto_now=True)
def __str__(self):
"""返回一个友好的用于表示此对象的字符串 类比java的toString"""
return "{}".format(self.name)
-
migrate模型,migration是django中用于保证model和db schema之间的一致性的一种机制,每次我们修改了model的字段定义后,执行migrate,就可以在数据库的表中同步这些修改。
在命令行 执行
1python manage.py makemigrations这样就基于当前的model定义创建了一个migration
然后就要执行这次migration,
1 | python manage.py migration |
- 正常情况下现在基本上我们就可以实现持久化到db了,我们来写测试用例,我们在创建app的时候,django已经为我们给每一个app生成了tests.py文件,我们的测试用例就写在这个文件中,代码如下
1
2
3
4
5
6
7
8
9
10 from django.test import TestCase
from .models import Book
class ModelTestCase(TestCase):
def setUp(self):
self.book = Book(name="Thinking in Python")
def test_model_can_create_a_book(self):
old_count = Book.objects.count()
self.book.save()
new_count = Book.objects.count()
self.assertEqual(old_count + 1, new_count)
然后我们运行
1 | python manage.py test |
发现可以通过测试 ok至此我们完成了除了djangorestframework之外的所有工作了,最后一篇再来写drf的代码。