Django编写一个填充脚本

本文介绍如何通过编写Python脚本自动填充数据库,以简化测试数据的输入过程。通过具体实例展示了如何为Django应用的Category和Page模型填充真实数据,从而提高测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

把测试数据输入数据库是件麻烦事。很多开发者选择随机按键,输入虚假的测试数据,例如
wTFzmN00bz7 。与其这样,不如编写一个脚本,把真实可信的数据自动填充到数据库中。如此一
来,演示或测试应用时,你将看到合理的示例。而且,部署应用或者与同事分享时,你自己和同
事无需自己动手输入示例数据。鉴于此,最好编写一个填充脚本。
下面为 Rango 应用编写一个填充脚本。在 Django 项目的根目录中新建一个 Python 文件,命名为
populate_rango.py,写入下述代码:

1 import os
2 os.environ.setdefault('DJANGO_SETTINGS_MODULE',
3                        'tango_with_django_project.settings')
4
5 import django
6 django.setup()
7 from rango.models import Category, Page
8
9 def populate():
10     # 首先创建一些字典,列出想添加到各分类的网页
11     # 然后创建一个嵌套字典,设置各分类
12     # 这么做看起来不易理解,但是便于迭代,方便为模型添加数据
class Category(models.Model):
name = models.CharField(max_length=128, unique=True)
class Meta:
verbose_name_plural = 'Categories'
def __str__(self):
return self.name

13
14 python_pages = [
15     {"title": "Official Python Tutorial",
16     "url":"http://docs.python.org/2/tutorial/"},
17     {"title":"How to Think like a Computer Scientist",
18     "url":"http://www.greenteapress.com/thinkpython/"},
19     {"title":"Learn Python in 10 Minutes",
20     "url":"http://www.korokithakis.net/tutorials/python/"} ]
21
22 django_pages = [
23     {"title":"Official Django Tutorial",
24     "url":"https://docs.djangoproject.com/en/1.9/intro/tutorial01/"},
25     {"title":"Django Rocks",
26     "url":"http://www.djangorocks.com/"},
27     {"title":"How to Tango with Django",
28     "url":"http://www.tangowithdjango.com/"} ]
29
30 other_pages = [
31     {"title":"Bottle",
32     "url":"http://bottlepy.org/docs/dev/"},
33     {"title":"Flask",
34     "url":"http://flask.pocoo.org"} ]
35
36 cats = {"Python": {"pages": python_pages},
37     "Django": {"pages": django_pages},
38     "Other Frameworks": {"pages": other_pages} }
39
40 # 如果想添加更多分类或网页,添加到前面的字典中即可
41
42 # 下述代码迭代 cats 字典,添加各分类,并把相关的网页添加到分类中
43 # 如果使用的是 Python 2.x,要使用 cats.iteritems() 迭代
44 # 迭代字典的正确方式参见
45 # http://docs.quantifiedcode.com/python-anti-patterns/readability/
46
47 for cat, cat_data in cats.items():
48     c = add_cat(cat)
49         for p in cat_data["pages"]:
50             add_page(c, p["title"], p["url"])

# 打印添加的分类
53     for c in Category.objects.all():
54         for p in Page.objects.filter(category=c):
55             print("- {0} - {1}".format(str(c), str(p)))
56
57 def add_page(cat, title, url, views=0):
58     p = Page.objects.get_or_create(category=cat, title=title)[0]
59     p.url=url
60     p.views=views
61     p.save()
62     return p
63
64 def add_cat(name):
65     c = Category.objects.get_or_create(name=name)[0]
66     c.save()
67     return c
68
69 # 从这开始执行
70 if __name__ == '__main__':
71     print("Starting Rango population script...")
72     populate()

◆ 导入模型 ◆

导入 Django 模型之前要导入 django ,并把环境变量 DJANGO_SETTINGS_MODULE 设为项目的设
置文件,然后调用 django.setup() ,导入 Django 项目的设置(第 1-6 行)。
如果缺少这重要的一步,导入模型时会抛出异常,这是因为所需的 Django 基础设施未初始
化。鉴于此,我们在第 7 行才导入 Category 和 Page 模型。

 

保存文件,在终端把当前工作目录切换到 Django 项目的根目录,然后执行 python
populate_rango.py 命令。你应该会看到类似下面的输出,在不同的电脑中添加分类的顺序可能有
所不同。

$ python populate_rango.py
Starting Rango population script...
- Python - Official Python Tutorial
- Python - How to Think like a Computer Scientist
- Python - Learn Python in 10 Minutes
- Django - Official Django Tutorial
- Django - Django Rocks
- Django - How to Tango with Django
- Other Frameworks - Bottle
- Other Frameworks - Flask

然后,确认填充脚本确实把数据填充进数据库中了。重启 Django 开发服务器,访问管理界面
(http://127.0.0.1:8000/admin/),检查有没有新的分类和网页出现。点击“Pages”,有没有看到所
有网页,如下图所示?
编写填充脚本要花点时间,但从长远来看,最终是能节省时间的。把应用部署到其他地方,只需
运行填充脚本就能立即演示,这样多方便。单元测试也能用到填充脚本

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值