专栏首页编程坑太多Django -自定义命令

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),作者:看更多☞

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 『互联网架构』软件架构-分布式架构(14)

    那时候的容器之间都没有进行物理的隔离,都是部署在同一个jvm上的。所以久而久之,它们之间互相的耦合互相的依赖,业务之前有千丝万缕的,添加和修改增加新的业务的时候...

    IT故事会
  • 『高级篇』docker之微服务业务分析(九)

    IT故事会
  • JSONP跨域ajax请求

    IT故事会
  • Django 模型层之多表操作

    Django还提供了一种直观而搞笑的方式在查询(lookups)种表示关联关系,它能自动确认SQL JOIN联系。要做跨关系查询,就使用两个下划线来连接模型(m...

    py3study
  • Detectron学习三:自定义数据层

    博客:https://www.cnblogs.com/marsggbo/p/11727556.html

    CV_Learner
  • 这段时间的学习小结(1.17总结)

    去了新的环境学习,感觉还可以,当然因为期末刚结束的原因,导致这段时间有点松懈,后天就要回家了,还是非常开心的。

    dejavu1zz
  • 一个HTTP打趴80%面试者

    HTTP(超文本传输协议)是应用层上的一种客户端/服务端模型的通信协议,它由请求和响应构成,且是无状态的。(暂不介绍HTTP2)

    陈殷
  • 一个HTTP打趴80%面试者 转

    面试一年多,每当我问起面试者对HTTP的了解时,个个回答令我瞠目结舌,这些开发者都有3-5年的经验。请不要让我叫你野生程序员,是时候了解HTTP了,让我们当个正...

    双面人
  • 浅析 Spring 中的事件驱动机制

    今天来简单地聊聊事件驱动,其实写这篇文章挺令我挺苦恼的,因为事件驱动这个名词,我没有找到很好的定性解释,担心自己的表述有误,而说到事件驱动可能立刻联想到如此众多...

    三哥
  • 浅析Spring中的事件驱动机制

    今天来简单地聊聊事件驱动,其实写这篇文章挺令我挺苦恼的,因为事件驱动这个名词,我没有找到很好的定性解释,担心自己的表述有误,而说到事件驱动可能立刻联想到如此众多...

    kirito-moe

扫码关注云+社区

领取腾讯云代金券