前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django -自定义命令

Django -自定义命令

作者头像
IT架构圈
发布2018-06-01 12:42:30
5780
发布2018-06-01 12:42:30
举报
文章被收录于专栏:IT架构圈

Models 定义

  • Category
  • Page
代码语言:javascript
复制
# 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

代码语言:javascript
复制
    class Meta:
        verbose_name_plural = 'Categories'

verbose_name_plural

自定义 manage.py 命令

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

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

目录结构

代码语言:javascript
复制
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 同级的目录


数据已添加

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-03-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编程坑太多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Models 定义
  • 自定义 manage.py 命令
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档