Django -自定义命令

Models 定义

  • Category
  • Page
# rango/models.pyfrom django.db import modelsclass Category(models.Model):
    title = models.CharField(max_length=64, unique=True)
    pinyin = models.CharField(max_length=128, null=True, blank=True)
    description = models.TextField(null=True, blank=True)
    url = models.URLField(max_length=200)
    like = models.IntegerField(default=0)    class Meta:
        verbose_name_plural = 'Categories'

    def __str__(self):
        return self.titleclass Page(models.Model):
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    name = models.CharField(max_length=200)
    url = models.URLField(max_length=200)
    view = models.IntegerField(default=0)    def __str__(self):
        return self.name

以下代码修复了 Django Admin 中标题复数显示的问题,默认是直接在后面加 s

    class Meta:
        verbose_name_plural = 'Categories'

verbose_name_plural

自定义 manage.py 命令

以下代码通过自定义 manage.py 命令来插入数据,数据通过爬虫在豆瓣电影获取

  • 新建包(Python Package)目录:rango/management/commands

目录结构

from django.core.management import BaseCommand, CommandErrorfrom rango.models import Category, Pageclass Command(BaseCommand):help = 'execute this command to build data on database'#def add_arguments(self, parser):#    parser.add_augument()def handle(self, *args, **options):
    filename = 'doubanMovies.txt'
    with open(filename, encoding='utf-8') as file:
        current_category = None
        for line in file:
            line = line.strip()            if line.endswith(':'):
                line = line[:-1]
                line = line.split()
                title = line[0]
                pinyin = line[1]
                url = '/rango/category/'+ pinyin
                current_category = Category.objects.create(title=title, pinyin=pinyin, url=url)
                self.stdout.write('Create Category: ' + title + ' -- ' + url)            else:
                content = line.split()
                current_category.page_set.create(name=content[0], url=content[1])
                self.stdout.write('  Create Page: ' + content[0] + ' -- ' + content[1])

执行自定义命令

注意!因为 python manage.py buildData 是在包含 mange.py 文件的目录执行的,所以爬虫结果的文件 doubanMovies.txt 要放在和 manage.py 同级的目录


数据已添加

原文发布于微信公众号 - 编程坑太多(idig88)

原文发表时间:2018-03-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏杨建荣的学习笔记

一条关于swap争用的报警邮件分析(一)(r7笔记第28天)

最近这些天有一台服务器总是会收到剩余swap过低的告警。 邮件内容大体如下: ############ ZABBIX-监控系统: --------------...

38740
来自专栏程序小工

windows7使用Sphinx+PHP+MySQL详细介绍

由于业务需要,需要做类似淘宝商城商品检索的功能,对于数据量很大的情况,MySQL 查询的效率损耗很大,需要使用专门的索引引擎进行搜索查询,实现功能,对于和 PH...

55010
来自专栏架构师之旅

Oracle 数据泵详解附案例

一、EXPDP和IMPDP使用说明 Oracle Database 10g引入了最新的数据泵(Data Dump)技术,数据泵导出导入(EXPDP和IMPDP)...

22350
来自专栏乐沙弥的世界

RMAN 数据库克隆文件位置转换方法

      在使用RMAN克隆数据库时,如果辅助数据库(新数据库)使用了与目标数据库(原数据库)使用了不同的路径,那么就存在位置转换的问题。在Oracle中,控...

8310
来自专栏数据和云

【循序渐进Oracle】Oracle的逻辑备份与恢复

编辑手记:针对最近发生的炉石及GitLab事件,我们不得不再次强调备份的重要性。DBA的四大守则,第一条就是备份重于一切。年初做好备份,愿你的系统17无恙。 本...

47580
来自专栏沃趣科技

ASM 翻译系列第三十二弹:自制数据抽取小工具

原作者:Bane Radulovic 译者: 邱大龙 审核: 魏兴华 DBGeeK社区联合出品 Find block in ASM 在本系列文章【 ...

492100
来自专栏郭耀华‘s Blog

LitePal——Android数据库框架完整使用手册

LitePal for Android LitePal是一个开源的Android库,使开发人员使用SQLite数据库非常简单。您无需编写任何SQL语句就可以完...

42470
来自专栏张戈的专栏

常用MySQL语句搜集整理

折腾 WordPress 多少要接触到 MySQL 的一些操作,比如,玛思阁之前重装 postview 插件后发现所有的 view 数据都被清空了!只好到 ph...

40750
来自专栏MySQL内核

MySQL InnoDB引擎表空间(tablespace)

现在的MySQL版本已经可以实现自动扩展表空间,其中innodb_file_per_table默认是开启的,表示为每一张新建的表创建表空间,这样可以避免ibda...

92750
来自专栏python3

django操作非ORM创建的表

工作中会遇见很多二次开发的时候,表都是已经创建好的,用django的ORM进行二次开发,怎么操作数据库中的表呢?

19420

扫码关注云+社区

领取腾讯云代金券