Django admin实现图书管理系统菜鸟级教程完整实例


Posted in Python onDecember 12, 2017

Django 有着强大而又及其易用的admin后台,在这里,你可以轻松实现复杂代码实现的功能,如搜索,筛选,分页,题目可编辑,多选框.

简单到,一行代码就可以实现一个功能,而且模块之间耦合得相当完美.

不信,一起来看看吧!?用Django实现管理书籍的系统,并能在前台界面对书籍进行增删查改,筛选,分页,以及批量查询修改功能.

准备工作

#准备好你的数据库模型思维导图

Django admin实现图书管理系统菜鸟级教程完整实例

0.新建一个Django项目,起名为books,并且同时新建一个应用book11

Django admin实现图书管理系统菜鸟级教程完整实例

1.首先要设置models模块,根据思维导图,我们知道需要定义3张表,分别是Book,Author,Publisher.

1.1然而,django强大的地方在于,你无需在数据库开辟一张表,ORM的模型,让你只需要关注你要操作的对象.这里用类对象,来替代表,从而使得定义一张数据表Book,就只需要简单的创建Book类对象,即可

#先设计作者Author对象(表)[models.py]
​
class Author(models.Model): #继承于models.Model这个父类,从而实现多态
  first_name=models.CharField(max_length=32) #名字的字段,使用字符串格式,最大长度32
  last_name=models.CharField(max_length=32)
  email=models.EmailField()         #email字段,使用email自带的格式
  def __unicode__(self):           #定义unicode函数,是为了让对象在实例化的时候,可以返回打印输出它的名字<阿文>.不至于显示为<** object>
    return "%s--%s"%(self.first_name,self.last_name)
#出版社
class Publisher(models.Model):
  name=models.CharField(max_length=64,unique=True) #出版社名称,唯一,是主键
  address=models.CharField(max_length=64,unique=True)
  city=models.CharField(max_length=32)
  state_province=models.CharField(max_length=32)
  country=models.CharField(max_length=32)
  website=models.URLField()            #主页,采用自带的url格式
  def __unicode__(self):
    return "%s"%(self.name)
#定义一个选项,里面包含3个可选框,用以下面的书籍表publisher_state下拉选择
STATUS_CHOICES=(
  ('checkout',u'已出版'),
  ('dai',u'待出版'),
  ('status',u'审核中'),
)
#书籍表
class Book(models.Model):
  name=models.CharField(max_length=64)  
  authors=models.ManyToManyField(Author) #作者,多对多的关系
  publisher=models.ForeignKey(Publisher) #出版社,外键管理到Publisher表
  publisher_date=models.DateField(auto_now_add=True)
  publisher_state=models.CharField(max_length=20,choices=STATUS_CHOICES,default='checkout') #出版状态,是一个可选框
  def __unicode__(self):
    return "%s--%s"%(self.name,self.publisher_date)

完整的代码:

Django admin实现图书管理系统菜鸟级教程完整实例

1.2然后,创建完models后,一定要创建映射文件,并且映射到数据库,否则数据库是不存在的

python manage.py makemigrations
python manage.py migrate

2.调试shell的models模块,使用对象操作增删查改

##进入shell 模式
python manage.py shell
##导入Publisher对象
from book11.models import Publisher
##查询id=1的queryset赋值给p
p=Publisher.objects.get(id=1)
#对的对象进行操作,修改city="changsha",等价于[Publisher.objects.filter(id=1).update(city='changsha')]操作.
p.city='changsha'
#需要提交保存,否则不生效
p.save()

前后对比,操作数据库字段就像操作对象一样简单!这便是ORM的优势

Django admin实现图书管理系统菜鸟级教程完整实例

Django admin实现图书管理系统菜鸟级教程完整实例

3.增加一个admin用户

G:\git\web\books>python manage.py createsuperuser #增加一个超级用户
Username (leave blank to use 'huan5'): admin #用户名
Email address: admin@qq.com         #邮箱
Password:                  #输8位密码2次
Password (again):
Superuser created successfully.

4.编辑admin.py

4.1将models导入,并且注册网站的Author,Publisher,Boos模块

#设置默认编码符
# -*- coding: utf-8 -*-
from book11 import models #导入数据库
admin.site.register(models.Author)
admin.site.register(models.Publisher)
admin.site.register(models.Book)
#启动服务
python manage.py runserver 0.0.0.0:8086
#并打开浏览器执行
http://127.0.0.1:8086

Django admin实现图书管理系统菜鸟级教程完整实例

书名已经成功显示出来

4.2配置一些扩展功能

from book11 import models
# 创建一个Bookadmin的modeladmin的子类
class Bookadmin(admin.ModelAdmin):
  list_display=('id','name','publisher','publisher_date','publisher_state')
  search_fields=('name',)
  list_filter=('publisher','publisher_date',)
  list_per_page=5
  list_editable=('name','publisher_state',)
  list_select_related=('publisher',)
  filter_horizontal=('authors',)
  raw_id_fields=('publisher',)
  actions=['set_publisher_checkout','set_publisher_dai','set_publisher_status','set_publisher_del',]
admin.site.register(models.Author,Authoradmin) #不要忘了把这些定义好的扩展写进来
admin.site.register(models.Publisher,Publisheradmin)
admin.site.register(models.Book,Bookadmin)

Django admin实现图书管理系统菜鸟级教程完整实例

Django admin实现图书管理系统菜鸟级教程完整实例

#配置作者页面的扩展内容
class Authoradmin(admin.ModelAdmin):
  list_display=('first_name','last_name','email')

Django admin实现图书管理系统菜鸟级教程完整实例

#配置出版社的扩展显示
class Publisheradmin(admin.ModelAdmin):
  list_display = ('name','address','country',)

Django admin实现图书管理系统菜鸟级教程完整实例

4.3为了批量操作,我们给他增加了actions,定义如下

def set_publisher_checkout(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME) #选中传入的表单中,勾选的checkbox对应的id集合
    models.Book.objects.filter(id__in=selected).update(publisher_state='checkout') #将所有选中的id对象,修改出版状态为checkout
  def set_publisher_dai(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='dai')
  def set_publisher_status(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='status')
  def set_publisher_del(modeladmin,request,queryset):    #########扩展部分,增加对选中的记录今夕删除!###########
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).delete()
​
  set_publisher_checkout.short_description="设置所有的书籍为--已出版"     #为了使界面更加友好,添加别名
  set_publisher_status.short_description="设置所有的书籍为--审核中"
  set_publisher_dai.short_description="设置所有的书籍为--待出版"
  set_publisher_del.short_description="设置所有的书籍为--删除"

效果图

Django admin实现图书管理系统菜鸟级教程完整实例

调试成功

附上admin.py的全部代码,方便调试不成功的小伙伴

# -*- coding: utf-8 -*-
from __future__ import unicode_literals
​
from django.contrib import admin
from book11 import models
# Register your models here.
class Bookadmin(admin.ModelAdmin):
  list_display=('id','name','publisher','publisher_date','publisher_state')
  search_fields=('name',)
  list_filter=('publisher','publisher_date',)
  list_per_page=5
  list_editable=('name','publisher_state',)
  list_select_related=('publisher',)
  filter_horizontal=('authors',)
  raw_id_fields=('publisher',)
  actions=['set_publisher_checkout','set_publisher_dai','set_publisher_status','set_publisher_del',]
​
  def set_publisher_checkout(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='checkout')
  def set_publisher_dai(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='dai')
  def set_publisher_status(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).update(publisher_state='status')
  def set_publisher_del(modeladmin,request,queryset):
    selected=request.POST.getlist(admin.ACTION_CHECKBOX_NAME)
    models.Book.objects.filter(id__in=selected).delete()
​
  set_publisher_checkout.short_description="设置所有的书籍为--已出版"
  set_publisher_status.short_description="设置所有的书籍为--审核中"
  set_publisher_dai.short_description="设置所有的书籍为--待出版"
  set_publisher_del.short_description="设置所有的书籍为--删除"
​
class Authoradmin(admin.ModelAdmin):
  list_display=('first_name','last_name','email')
​
class Publisheradmin(admin.ModelAdmin):
  list_display = ('name','address','country',)
​
admin.site.register(models.Author,Authoradmin)
admin.site.register(models.Publisher,Publisheradmin)
admin.site.register(models.Book,Bookadmin)

不禁感叹再也没有比django更加简单好用,容易操作的后台了.

总结

Django真的太强大。。

以上就是本文关于Django admin实现图书管理系统菜鸟级教程完整实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python登录QQ邮箱发信的实现代码
Feb 10 Python
使用Python的内建模块collections的教程
Apr 28 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
Python图像处理之识别图像中的文字(实例讲解)
May 10 Python
基于python log取对数详解
Jun 08 Python
Python引用计数操作示例
Aug 23 Python
Django项目后台不挂断运行的方法
Aug 31 Python
解析Python3中的Import
Oct 13 Python
Python解释器以及PyCharm的安装教程图文详解
Feb 26 Python
Python脚本实现监听服务器的思路代码详解
May 28 Python
基于Django filter中用contains和icontains的区别(详解)
Dec 12 #Python
Python有序查找算法之二分法实例分析
Dec 11 #Python
django实现用户登陆功能详解
Dec 11 #Python
Python通过Django实现用户注册和邮箱验证功能代码
Dec 11 #Python
Python实现冒泡排序的简单应用示例
Dec 11 #Python
Python最火、R极具潜力 2017机器学习调查报告
Dec 11 #Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
Dec 11 #Python
You might like
php中批量修改文件后缀名的函数代码
2011/10/23 PHP
用穿越火线快速入门php面向对象
2012/02/22 PHP
php对csv文件的读取,写入,输出下载操作详解
2013/08/10 PHP
zf框架的数据库追踪器使用示例
2014/03/13 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
js怎么终止程序return不行换jfslk
2013/05/30 Javascript
jquery 单引号和双引号的区别及使用注意
2013/07/31 Javascript
Node.js中的流(Stream)介绍
2015/03/30 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
浅谈Sublime Text 3运行JavaScript控制台
2016/06/06 Javascript
JavaScript“尽快失败”的原则实例详解
2016/10/08 Javascript
JS根据生日月份和日期计算星座的简单实现方法
2016/11/24 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
JavaScript定时器设置、使用与倒计时案例详解
2019/07/08 Javascript
js简单的分页器插件代码实例
2019/09/11 Javascript
Vue使用轮询定时发送请求代码
2020/08/10 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
[58:15]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 NB vs Liquid
2018/04/02 DOTA
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Python实现的购物车功能示例
2018/02/11 Python
使用Python画了一棵圣诞树的实例代码
2020/11/27 Python
Python关于拓扑排序知识点讲解
2021/01/04 Python
python基于opencv 实现图像时钟
2021/01/04 Python
Eastbay官网:美国最大的运动鞋网络零售商
2016/07/27 全球购物
Booking.com西班牙:全球酒店预订
2018/03/30 全球购物
size?丹麦官网:英国伦敦的球鞋精品店
2019/04/15 全球购物
教师批评与自我批评总结
2014/10/16 职场文书
小学少先队辅导员述职报告
2015/01/10 职场文书
MySQL令人大跌眼镜的隐式转换
2021/08/23 MySQL