python web开发——Django后台管理

来源:互联网 发布:新浪足球数据库 编辑:程序博客网 时间:2024/05/20 15:57

Django 管理后台

Django自带了管理后台,而且非常强大,这个模块是settings.py 中配置的django.contrib.admin应用。

创建一个管理员用户

我们首先来创建一个后台管理员用户,并为其设置密码。

创建账号:

python manage.py createsuperuser

会要求我们输入用户名、邮箱和密码。
创建好之后,启动服务器:

python manage.py runserver

在浏览器中输入如下地址:

http://127.0.0.1:8000/admin/

进入管理后台登陆界面,输入刚才设置的用户名和密码就可以登陆了。

让我们自己的应用可以在后台管理

打开polls/admin.py输入如下代码:

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom .models import Question# Register your models here.admin.site.register(Question)

这样在后台我们就可以编辑我们的Question了。

自定义管理表单

调整字段顺序

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom .models import Question# Register your models here.class QuestionAdmin(admin.ModelAdmin):    fields = ['pub_date','question_text']admin.site.register(Question,QuestionAdmin)

这样可以先添加日期,后添加问题内容。

对字段分组

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom .models import Question# Register your models here.class QuestionAdmin(admin.ModelAdmin):    #fields = ['pub_date','question_text']    fieldsets = [        (None,              {'fields':['question_text']},         'Date information',{'fields':['pub_date']}),    ]admin.site.register(Question,QuestionAdmin)

每个字段集指定HTML样式类

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom .models import Question# Register your models here.class QuestionAdmin(admin.ModelAdmin):#    fields = ['pub_date','question_text']    fieldsets = [        (None,              {'fields':['question_text']},         'Date information',{'fields':['pub_date'],'classes':['collapse']}),    ]admin.site.register(Question,QuestionAdmin)

添加关联对象

好了,我们已经有自己的Question管理界面。 但是一个Question有多个Choices,管理界面中并没有将选项显示出来。

有两种方法来解决这个问题:

1.第一种是像我们为Question做的一样,在管理站点中注册Choice

# -*- coding: utf-8 -*-from django.contrib import adminfrom .models import Question# Register your models here.admin.site.register(Question)admin.site.register(Choice)

2.在添加Question时添加Choice

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.contrib import adminfrom .models import Question# Register your models here.class ChoiceInine(admin.StackedInline):    model = Choice    extra = 3class QuestionAdmin(admin.ModelAdmin):    fieldsets = [        (None,              {'fields':['question_text']},         'Date information',{'fields':['pub_date'],'classes':['collapse']}),    ]    inlines = [ChoiceInine]admin.site.register(Question,QuestionAdmin)

将Choice改为单行输入:

class ChoiceInine(admin.TabularInline):

让对象显示字段

默认地,Django显示每个对象的str()返回的内容。但有时如果我们能显示个别的字段将很有帮助。我们使用list_display 选项来实现这个功能,它是一个要显示的字段名称的元组:

class Question(models.Model):    list_display=('question_text','pub_date')

显示中文

修改模型如下:

# -*- coding: utf-8 -*-from __future__ import unicode_literalsfrom django.db import models# Create your models here.class Question(models.Model):    question_text = models.CharField(verbose_name="问题",max_length=200)    pub_date = models.DateTimeField(verbose_name="发布日期")    def __str__(self):        return self.question_text    class Meta:        verbose_name = ('问题')        verbose_name_plural=verbose_nameclass Choice(models.Model):    question = models.ForeignKey(Question)    choice_text = models.CharField(verbose_name='选项',max_length=200)    vote = models.IntegerField(verbose_name='投票数',default=0)    def __str__(self):        return self.choice_text    def Meta:        verbose_name = ('选项')        verbose_name_plural=verbose_name

自定义管理后台的外观

自定义管理后台步骤如下:

1.创建一个templates文件,在myblog目录下面(包含manage.py的目录)。

2.让系统识别该模板目录,打开settings.py,找到TEMPLATES选项。

TEMPLATES = [    {        'BACKEND': 'django.template.backends.django.DjangoTemplates',        'DIRS': [],        'APP_DIRS': True,        'OPTIONS': {            'context_processors': [                'django.template.context_processors.debug',                'django.template.context_processors.request',                'django.contrib.auth.context_processors.auth',                'django.contrib.messages.context_processors.messages',            ],        },    },]

3.在templates下创建一个名为admin的文件夹,然后从Django安装的原目录下(目录为django/contrib/admin/templates)将模板页面的源文件admin/base_site.html拷贝到这个文件夹里。

修改如下:

{% extends "admin/base.html" %}{% block title %}{{ title }} | {{ site_title|default:_('Django site admin') }}{% endblock %}{% block branding %}<h1 id="site-name"><a href="{% url 'admin:index' %}">{{ site_header|default:_('Django administration') }}</a></h1>{% endblock %}{% block nav-global %}{% endblock %}
原创粉丝点击