Python的Django框架下管理站点的基本方法


Posted in Python onJuly 17, 2015

对于某一类网站, 管理界面 是基础设施中非常重要的一部分。 这是以网页和有限的可信任管理者为基础的界面,它可以让你添加,编辑和删除网站内容。 一些常见的例子: 你可以用这个界面发布博客,后台的网站管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并发布在网站上,这些都是使用管理界面的例子。

但是管理界面有一问题: 创建它太繁琐。 当你开发对公众的功能时,网页开发是有趣的,但是创建管理界面通常是千篇一律的。 你必须认证用户,显示并管理表格,验证输入的有效性诸如此类。 这很繁琐而且是重复劳动。

Django 在对这些繁琐和重复的工作进行了哪些改进? 它用不能再少的代码为你做了所有的一切。 Django 中创建管理界面已经不是问题。

这一章是关于 Django 的自动管理界面。 这个特性是这样起作用的: 它读取你模式中的元数据,然后提供给你一个强大而且可以使用的界面,网站管理者可以用它立即工作。

请注意我们建议你读这章,即使你不打算用admin。因为我们将介绍一些概念,这些概念可以应用到Django的所有方面,而不仅仅是admin
django.contrib 包

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文件做如下这些改变:

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

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

    确保MIDDLEWARE_CLASSES 包含'django.middleware.common.CommonMiddleware' 、'django.contrib.sessions.middleware.SessionMiddleware' 和'django.contrib.auth.middleware.AuthenticationMiddleware' 。(再次提醒,如果有跟着做mysite的话,请把在第五章做的注释取消。)

运行 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 admin
admin.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/

将你的Models加入到Admin管理中

有一个关键步骤我们还没做。 让我们将自己的模块加入管理工具中,这样我们就能够通过这个漂亮的界面添加、修改和删除数据库中的对象了。
在其中,我们定义了三个模块: Publisher 、 Author 和 Book 。

在`` books`` 目录下(`` mysite/books`` ),创建一个文件:`` admin.py`` ,然后输入以下代码:

from django.contrib import admin
from mysite.books.models import Publisher, Author, Book

admin.site.register(Publisher)
admin.site.register(Author)
admin.site.register(Book)

这些代码通知管理工具为这些模块逐一提供界面。

完成后,打开页面 `` http://127.0.0.1:8000/admin/`` ,你会看到一个Books区域,其中包含Authors、Books和Publishers。  (你可能需要先停止,然后再启动服务(`` runserver`` ),才能使其生效。)

现在你拥有一个功能完整的管理界面来管理这三个模块了。 很简单吧!

花点时间添加和修改记录,以填充数据库。 如果你跟着第五章的例子一起创建Publisher对象的话(并且没有删除),你会在列表中看到那些记录。

这里需要提到的一个特性是,管理工具处理外键和多对多关系(这两种关系可以在`` Book`` 模块中找到)的方法。 作为提醒,这里有个`` Book`` 模块的例子:

class Book(models.Model):
  title = models.CharField(max_length=100)
  authors = models.ManyToManyField(Author)
  publisher = models.ForeignKey(Publisher)
  publication_date = models.DateField()

  def __unicode__(self):
    return self.title

在Add book页面中(`` http://127.0.0.1:8000/admin/books/book/add/`` ),`` 外键`` publisher用一个选择框显示,`` 多对多`` 字段author用一个多选框显示。 点击两个字段后面的绿色加号,可以让你添加相关的记录。 举个例子,如果你点击Publisher后面的加号,你将会得到一个弹出窗口来添加一个publisher。 当你在那个窗口中成功创建了一个publisher后,Add book表单会自动把它更新到字段上去 花巧.

Python 相关文章推荐
python处理中文编码和判断编码示例
Feb 26 Python
为Python的web框架编写前端模版的教程
Apr 30 Python
编写Python脚本批量下载DesktopNexus壁纸的教程
May 06 Python
Python两个字典键同值相加的几种方法
Mar 05 Python
详解python校验SQL脚本命名规则
Mar 22 Python
django中账号密码验证登陆功能的实现方法
Jul 15 Python
Python模块汇总(常用第三方库)
Oct 07 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
Feb 26 Python
Python3 pyecharts生成Html文件柱状图及折线图代码实例
Sep 29 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
详解Python中openpyxl模块基本用法
Feb 23 Python
学点简单的Django之第一个Django程序的实现
Feb 24 Python
Django中更新多个对象数据与删除对象的方法
Jul 17 #Python
Django框架中数据的连锁查询和限制返回数据的方法
Jul 17 #Python
Django中对数据查询结果进行排序的方法
Jul 17 #Python
在Python的Django框架中获取单个对象数据的简单方法
Jul 17 #Python
Python的Django框架中的数据过滤功能
Jul 17 #Python
在Python的Django框架中更新数据库数据的方法
Jul 17 #Python
在Django框架中运行Python应用全攻略
Jul 17 #Python
You might like
深入解析PHP中逗号与点号的区别
2013/08/05 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
简单谈谈PHP面向对象之标识对象
2017/06/27 PHP
PHP定义字符串的四种方式详解
2018/02/06 PHP
thinkphp3.2同时连接两个数据库的简单方法
2019/08/13 PHP
JavaScript的Function详细
2006/11/14 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
使用jQuery.fn自定义jQuery翻页插件
2013/01/20 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
jQuery实现HTML表格单元格的合并功能
2016/04/06 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
2016/05/24 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
AngularJS自定义插件实现网站用户引导功能示例
2016/11/07 Javascript
jQuery实现限制文本框的输入长度
2017/01/11 Javascript
node.js中express中间件body-parser的介绍与用法详解
2017/05/23 Javascript
JS实现求数组起始项到终止项之和的方法【基于数组扩展函数】
2017/06/13 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
js异步接口并发数量控制的方法示例
2020/11/22 Javascript
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
对python-3-print重定向输出的几种方法总结
2018/05/11 Python
解决pycharm 远程调试 上传 helpers 卡住的问题
2019/06/27 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
解决tensorboard多个events文件显示紊乱的问题
2020/02/15 Python
python读取文件指定行内容实例讲解
2020/03/02 Python
Python3如何使用tabulate打印数据
2020/09/25 Python
python批量修改文件名的示例
2020/09/27 Python
日本土著品牌,综合型购物网站:Cecile
2016/08/23 全球购物
英国领先的运动营养品牌:Protein Dynamix
2018/01/02 全球购物
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
家长给孩子的评语
2014/01/30 职场文书
《池塘边的叫声》教学反思
2014/04/12 职场文书
商务助理求职信范文
2014/04/20 职场文书
2019森林防火宣传标语大全!
2019/07/03 职场文书
Python实现Telnet自动连接检测密码的示例
2021/04/16 Python