part 二是关于django的自带的管理员界面
在这里提醒以下,昨天创建数据库的时候忘了说一点,今天把我自己也坑了, 关于如果要在数据库里插入中文的话,
一开始创建数据库的时候就要加上 create database name default charset=utf8
我的处理办法可能比较复杂,删了原本的数据库(幸好没有往里边插数据)
然后再重新创建一次,
回到命令号, python manage.py makemigrations
python manage.py migrate
可以 python manage.py createsuperuser 创建管理员,然后会让你输入用户名, 邮箱, 密码
也可以 python manage.py syncdb 数据库同步完成之后会出现与 createsuperuser相同的界面
然后python manage.py runserver
浏览器打开 127,0,0.1:8000/admin
就可以看到登录界面了
有的打开可能是英文界面, 这就要到settings.py 里边修改配置文件了,编码改为 'zh-c' LANGUAGE_CODE = 'zh-cn'
登录进去之后我们看到的界面是这样的
并没有我们创建的表
可以这样
在polls 的admin.py中加入下边一行
from polls.models import Question admin.site.register(Question)
出现了我们问题的管理界面
然后下边一堆关于怎么优化管理员界面青自行参阅django官方文档tutorial ,直接展示结果,(对书中作出了部分改动),优化了关于中文显示部分
models.py
#coding=utf-8
from django.db import models
from django.utils import timezone
import datetime
class Question(models.Model):
question_text = models.CharField("问题描述", max_length=200)
pub_date = models.DateTimeField("更新日期")
def __unicode__(self):
return self.question_text
def was_published_recently(self):
return self.pub_date >= timezone.now() - datetime.timedelta(days=1)
list_display = ('question_text', 'pub_date', 'was_published_recently')
was_published_recently.admin_order_field = 'pub_date'
#was_published_recently.boolean = True
was_published_recently.short_description = '近期发布?'
Question.short_description = "问题"
class Choice(models.Model):
question = models.ForeignKey(Question)
choice_text = models.CharField("选项", max_length=200)
votes = models.IntegerField("票数", default=0)
def __unicode__ (self):
return self.choice_text
admin.py
#coding=utf8
from django.contrib import admin
from polls.models import Question, Choice
#class QuestionAdmin(admin.ModelAdmin):
# fields = ['pub_date', 'question_text']
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
("问题设置", {'fields':['question_text']}),
('日期信息', {'fields':['pub_date'], 'classes':['collapse']}),
]
inlines = [ChoiceInline]
list_display = ('question_text', 'pub_date', 'was_published_recently')
list_filter = ['pub_date']
#search_fields = ['pub_date']
search_fields = ['question_text']
admin.site.register(Question, QuestionAdmin)
最终结果如上,感觉还是不错的,(注意上边的显示不是中文乱码, 是我手打随意打的)
最后文档介绍了一点有意思的东西, 重载管理员界面模板,每次管理员上来都看到django管理, 原文说这是ridiculous ,其实是山寨气息浓厚~
在工程的根目录下创建目录templates/admin
并且把在settings里边加入
TEMPLATE_DIRS = [os.path.join(BASE_DIR, 'templates')]
在django 的 安装目录下,不知道django的安装目录可以这样,
python
import sys sys.path = sys.path[1:] import django print(django.__path__)" 然后把django/contrib/admin/templates admin/base_site.html 复制到我们创建的目录下templates/admin 把我的里边的文件改为 {% extends "admin/base.html" %} {% block title %}投票管理{% endblock %} {% block branding %} <h1 id="site-name"><a href="{% url 'admin:index' %}"><h1 id="site-name"><a href="{% url 'admin:index' %}">投票管理</a></h1></a></h1> {% endblock %} {% block nav-global %}{% endblock %} 这样出来的就不知django管理了,这少不是那么山寨了~