1. 程式人生 > >python web開發——Django後臺管理

python web開發——Django後臺管理

Django 管理後臺

Django自帶了管理後臺,而且非常強大,這個模組是settings.py 中配置的django.contrib.admin應用。

建立一個管理員使用者

我們首先來建立一個後臺管理員使用者,併為其設定密碼。

建立賬號:

python manage.py createsuperuser

會要求我們輸入使用者名稱、郵箱和密碼。
建立好之後,啟動伺服器:

python manage.py runserver

在瀏覽器中輸入如下地址:

進入管理後臺登陸介面,輸入剛才設定的使用者名稱和密碼就可以登陸了。

讓我們自己的應用可以在後臺管理

開啟polls/admin.py輸入如下程式碼:

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.contrib import admin
from .models import Question
# Register your models here.
admin.site.register(Question)

這樣在後臺我們就可以編輯我們的Question了。

自定義管理表單

調整欄位順序

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from
django.contrib import admin from .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_literals

from
django.contrib import admin from .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_literals

from django.contrib import admin
from .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 admin
from .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_literals

from django.contrib import admin
from .models import Question
# Register your models here.

class ChoiceInine(admin.StackedInline):
    model = Choice
    extra = 3
class 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_literals

from 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_name
class 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 %}