博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django:(博客系统)使用使用mysql数据->后台管理tag/post/category的配置
阅读量:5958 次
发布时间:2019-06-19

本文共 6315 字,大约阅读时间需要 21 分钟。

  Django后台一般是不需要人为的去开发的,因为django已经通过配置实现哪些模块是后台需要管理,如何排序,列表展示哪些列,列显示名称,是否为空(默认值),过滤条件,分页页数,列表中哪些项可编辑等等。

  那么具体如何针对上一篇文章《》中的tag/post/category模型进行修改配置来实现呢?可以参考django官网文章:https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overview

  Django自动管理工具是django.contrib的一部分。django.contrib是一套庞大的功能集,它是Django基本代码的组成部分,Django框架就是由众多包含附加组件(add-on)的基本代码构成的。 你可以把django.contrib看作是可选的Python标准库或普遍模式的实际实现。 它们与Django捆绑在一起,这样你在开发中就不用“重复发明轮子”了。

  管理工具是本书讲述django.contrib的第一个部分。从技术层面上讲,它被称作django.contrib.admin。django.contrib中其它可用的特性,如用户鉴别系统(django.contrib.auth)、支持匿名会话(django.contrib.sessioins)以及用户评注系统(django.contrib.comments)。这些,我们将在第十六章详细讨论。在成为一个Django专家以前,你将会知道更多django.contrib的特性。 目前,你只需要知道Django自带很多优秀的附加组件,它们都存在于django.contrib包里。

激活管理界面

Django管理站点完全是可选择的,因为仅仅某些特殊类型的站点才需要这些功能。 这意味着你需要在你的项目中花费几个步骤去激活它。

第一步,对你的settings文件做如下这些改变: 

  1. 'django.contrib.admin'加入setting的INSTALLED_APPS配置中 (INSTALLED_APPS中的配置顺序是没有关系的, 但是我们喜欢保持一定顺序以方便人来阅读)

  1. 保证INSTALLED_APPS中包含'django.contrib.auth''django.contrib.contenttypes''django.contrib.sessions',Django的管理工具需要这3个包。 (如果你跟随本文制作mysite项目的话,那么请注意我们在第五章的时候把这三项INSTALLED_APPS条目注释了。现在,请把注释取消。)

  1. 确保MIDDLEWARE_CLASSES 包含'django.middleware.common.CommonMiddleware''django.contrib.sessions.middleware.SessionMiddleware''django.contrib.auth.middleware.AuthenticationMiddleware' 。

运行 python manage.py syncdb (

Django 1.7.1及以上 用以下命令# 1. 创建更改的文件python manage.py makemigrations# 2. 将生成的py文件应用到数据库python manage.py migrate旧版本的Django 1.6及以下用python manage.py syncdb

)。这一步将生成管理界面使用的额外数据库表。 当你把'django.contrib.auth'加进INSTALLED_APPS后,第一次运行syncdb命令时, 系统会请你创建一个超级用户。 如果你不这么作,你需要运行python manage.py createsuperuser来另外创建一个admin的用户帐号,否则你将不能登入admin (提醒一句: 只有当INSTALLED_APPS包含'django.contrib.auth'时,python manage.py createsuperuser这个命令才可用.)

第三,将admin访问配置在URLconf(记住,在urls.py中). 默认情况下,命令django-admin.py startproject生成的文件urls.py是将Django admin的路径注释掉的,你所要做的就是取消注释。 请注意,以下内容是必须确保存在的:

# Include these import statements...from django.contrib import adminadmin.autodiscover()# And include this URLpattern...urlpatterns = patterns('',    # ...    (r'^admin/', include(admin.site.urls)),    # ...)

当这一切都配置好后,现在你将发现Django管理工具可以运行了。 启动开发服务器(如前:`` python manage.py runserver`` ),然后在浏览器中访问:http://127.0.0.1:8000/admin/

要了解更多内容,请参考:《

如何建tag/post/category实现后台自动管理功能?

如果想让后台自动管理只需要在blog\admin.py中添加如下代码即可:

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom models import Tagfrom models import Postfrom models import Categoryclass PostAdmin(admin.ModelAdmin):    list_display = ['title', 'category', 'author', 'create_time', 'modify_time']class TagAdmin(admin.ModelAdmin):    list_display = ['name', 'create_time', 'modify_time']class CategoryAdmin(admin.ModelAdmin):    list_display = ['name', 'create_time', 'modify_time']admin.site.register(Tag, TagAdmin)admin.site.register(Post, PostAdmin)admin.site.register(Category, CategoryAdmin)

登录后台查看效果:

设置文章字段显示名称、排序、分页、筛选字段:

经过上边设置了后台管理,及设置了后台列表展示字段效果如下:

但是这样貌似不是特别美观,没有分页、没有搜索、没有默认排序、不可以在列表中修改category、没有按照发布日期搜索、及文章分类搜索功能,那么如何实现呢?

1)字段中文设置:

需要修改models.py中字段显示别名:

# coding:utf-8from __future__ import unicode_literalsfrom django.db import modelsfrom django.contrib.auth.admin import User# '''# 文章栏目(分类)实体# '''@python_2_unicode_compatibleclass Category(models.Model):    name = models.CharField(u'文章栏目', max_length=128)  # 文章栏目(分类)名称    create_time = models.DateTimeField(u'创建时间', auto_now_add=True, editable=False)  # 创建时间    modify_time = models.DateTimeField(u'修改时间', auto_now=True, null=True)  # 修改时间    def __str__(self):        return self.name# '''# 文章标签实体# '''@python_2_unicode_compatibleclass Tag(models.Model):    name = models.CharField(u'文章标签', max_length=128)  # 文章标签名称    create_time = models.DateTimeField(u'创建时间', auto_now_add=True, editable=False)  # 创建时间    modify_time = models.DateTimeField(u'修改时间', auto_now=True, null=True)  # 修改时间    def __str__(self):        return self.name# """# 文章实体# """@python_2_unicode_compatibleclass Post(models.Model):    title = models.CharField(u'标题', max_length=128)  # 文章标题,定义最大长度为128    '''    如果不使用blank=True标识,则当该值为空时会保存操作会抛出异常    '''    summary = models.CharField(verbose_name=u'简介', max_length=256, blank=True)  # 文章简介,定义最大长度为126。, type=models.CharField    body = models.TextField(verbose_name=u'内容')  # 文章内容,较长因此定义为TextField, type=models.TextField    create_time = models.DateTimeField(u'创建时间', auto_now_add=True, editable=True)  # 文章创建时间    modify_time = models.DateTimeField(u'修改时间', auto_now=True, null=True)  # 文章修改时间    views = models.PositiveIntegerField(default=0, verbose_name='阅读数')  # 文章阅读数量,默认为0    '''    一篇文章只能归属一个栏目,而一个栏目下可能会拥有多篇文章,因此这是一对多的关联关系。    关于用法请阅读:https://docs.djangoproject.com/en/1.10/topics/db/models/#relationships    '''    category = models.ForeignKey(Category, verbose_name='分类')  # 文章分类    '''    一篇文章允许有多个标签,一个标签允许被多篇文章使用,因此他们的关系是多对多关系,但是同时该值可以不设置,因此使用black=True标识该字段允许为空。    '''    tags = models.ManyToManyField(Tag, verbose_name='标签', blank=True)  # 文章标签    '''    # 由于django.contrib.auth 是 Django 内置的应用,它用于处理网站用户的注册、登录等流程,User 是 Django 为我们已经写好的用户模型。    #一篇文章对应一个作者,而一个作者可能会写多篇文章,因此这是一对多的关联关系,和 Category 类似。    '''    author = models.ForeignKey(User, verbose_name='作者')  # 文章作者    def __str__(self):        return self.title    def __unicode__(self):        return self.title

2)设置文章筛选过滤、分页、搜索字段、默认排序、列表中可编辑category、快速筛选(发布时间、文章分类)

修改blog\admin.py

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom models import Tagfrom models import Postfrom models import Categoryclass PostAdmin(admin.ModelAdmin):    list_display = ['title', 'category', 'author', 'create_time', 'modify_time']#设置列表显示字段    search_fields = ('title',)                                                  #设置搜索字段    list_filter = ('category','create_time',)                                   #设置按照发布时间、分类快速筛选    list_per_page = 10                                                          #设置分页    list_editable = ['category', ]                                              #设置列表可编辑列class TagAdmin(admin.ModelAdmin):    list_display = ['name', 'create_time', 'modify_time']    search_fields = ('name',)class CategoryAdmin(admin.ModelAdmin):    list_display = ['name', 'create_time', 'modify_time']    search_fields = ('name',)admin.site.register(Tag, TagAdmin)admin.site.register(Post, PostAdmin)admin.site.register(Category, CategoryAdmin)

效果:

 

转载地址:http://sjuax.baihongyu.com/

你可能感兴趣的文章
JS——特效秀
查看>>
Beta冲刺——day6
查看>>
前端:CheckBox事件函数js
查看>>
Comet OJ - Contest #3 题解
查看>>
[网络流24题-9]试题库问题
查看>>
jquery选择器详解
查看>>
C# 保留2位小数
查看>>
使用xshell远程连接Linux
查看>>
杭电ACM1007
查看>>
faster-RCNN台标检测
查看>>
Unix环境高级编程 centos中配置apue编译环境
查看>>
运算符
查看>>
数据结构之各排序算法
查看>>
网页分帧操作<frameset>,<iframe>标签
查看>>
Vue生产环境部署
查看>>
酒店之王
查看>>
html5判断用户摇晃了手机(转)
查看>>
VS下Qt4.8.4安装
查看>>
Linux df命令
查看>>
redhat6.5 配置使用centos的yum源
查看>>