Bootstrap

Django-后台

Django后台通过编辑每个app的admin.py文件实现。

1.新建admin项目

django-admin startproject admin

2.新建app

#进入admin文件夹
cd admin

#创建app:blog
python manage.py startapp blog

将blog加入settings.py文件。

3.新建model

在models.py中,建立Article类

# coding:utf-8
from django.db import models 

class Article(models.Model):
    title = models.CharField(u'标题', max_length=256)
    content = models.TextField(u'内容')

    pub_date = models.DateTimeField(u'发表时间', auto_now_add=True, editable = True)
    update_time = models.DateTimeField(u'更新时间',auto_now=True, null=True)
    def __unicode__(self):# 在Python3中用 __str__ 代替 __unicode__
        return self.title

4.同步数据表

# 进入包含有 manage.py 的文件夹
python manage.py makemigrations
python manage.py migrate

建立了Article的数据表。

创建管理员

python manage.py createsuperuser

5.注册模型

修改admin.py文件

from django.contrib import admin
from .models import Article


admin.site.register(Article)

6.打开服务器

python manage.py runserver

访问 http://localhost:8000/admin/, 输入设定的帐号和密码。可以在后天增加
编辑Article内容。

7.在列表显示相关内容

在admin.py中,修改如下

from django.contrib import admin
from .models import Article

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title','pub_date','update_time',)

admin.site.register(Article,ArticleAdmin)

list_display就是配置要显示的字段的。

显示费字段内容,或字段相关的内容,比如,对于Person类

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)

    def my_property(self):
        return self.first_name + ' ' + self.last_name
    my_property.short_description = "Full name of the person"

    full_name = property(my_property)
property将方法my_property转变为属性字段

在admin.py中

from django.contrib import admin
from .models import Article, Person 

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'pub_date', 'update_time',) 

class PersonAdmin(admin.ModelAdmin):
    list_display = ('full_name',)

admin.site.register(Article, ArticleAdmin)
admin.site.register(Person, PersonAdmin)

如果修改了models.py中的字段,就要更改数据表,

python manage.py makemigrations
python manage.py migrate

8.定制搜索功能

在admin.py中修改如下

class PersonAdmin(admin.ModelAdmin):
    list_display = ('full_name')
    search_fields = ('full_name',)

    def get_search_results(self, request, queryset, search_term):
        queryset, use_distinct = super(PersonAdmin, self).get_search_results(request, queryset, search_term)
        try:
            search_term_as_int = int(search_term)
            queryset |= self.model.objects.filter(age=search_term_as_int)
        except:
            pass
        return queryset, use_distinct

queryset是默认的结果,search_term是搜索关键词

9.其他功能

Django还有很多后台功能,比如
1. 定制加载的列表, 根据不同的人显示不同的内容列表,比如输入员只能看见自己输入的,审核员能看到所有的草稿,这时候就需要重写get_queryset方法
2. 修改保存时的一些操作,可以检查用户,保存的内容等,比如保存时加上添加人
3. 删除时做一些处理

参考:
自强学堂
官方文档

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;