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 相关文章推荐
详解Django中的ifequal和ifnotequal标签使用
Jul 16 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
Python实现冒泡排序的简单应用示例
Dec 11 Python
解决每次打开pycharm直接进入项目的问题
Oct 28 Python
python画双y轴图像的示例代码
Jul 07 Python
Numpy中对向量、矩阵的使用详解
Oct 29 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
python3读取csv文件任意行列代码实例
Jan 13 Python
pytorch构建多模型实例
Jan 15 Python
Keras 切换后端方式(Theano和TensorFlow)
Jun 19 Python
django序列化时使用外键的真实值操作
Jul 15 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 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中用date函数获取当前时间有误的解决办法
2013/08/02 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
基于PHP实现等比压缩图片大小
2016/03/04 PHP
阿里云Win2016安装Apache和PHP环境图文教程
2018/03/11 PHP
JavaScript While 循环基础教程
2007/04/05 Javascript
身份证号码前六位所代表的省,市,区, 以及地区编码下载
2007/04/12 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
商城常用滚动的焦点图效果代码简单实用
2013/03/28 Javascript
用js实现in_array的方法
2013/11/05 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
JavaScript中的异常捕捉介绍
2014/12/31 Javascript
ros::spin() 和 ros::spinOnce()函数的区别及详解
2016/10/01 Javascript
详解vue 中使用 AJAX获取数据的方法
2017/01/18 Javascript
关于vue.js v-bind 的一些理解和思考
2017/06/06 Javascript
vue element upload组件 file-list的动态绑定实现
2019/10/11 Javascript
JavaScript 替换所有匹配内容及正则替换方法
2020/02/12 Javascript
[17:45]DOTA2 HEROES教学视频教你分分钟做大人-军团指挥官
2014/06/11 DOTA
[02:20]DOTA2亚洲邀请赛 EHOME战队出场宣传片
2015/02/07 DOTA
python中django框架通过正则搜索页面上email地址的方法
2015/03/21 Python
python调用java模块SmartXLS和jpype修改excel文件的方法
2015/04/28 Python
Python中统计函数运行耗时的方法
2015/05/05 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
Python3之文件读写操作的实例讲解
2018/01/23 Python
记一次python 内存泄漏问题及解决过程
2018/11/29 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
Python中函数的返回值示例浅析
2019/08/28 Python
Python continue语句实例用法
2020/02/06 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
历史学专业大学生找工作的自我评价
2013/10/16 职场文书
签约仪式主持词
2014/03/19 职场文书
节能环保家庭事迹材料
2014/08/27 职场文书
给老婆的检讨书
2015/01/27 职场文书
教师专业技术工作总结2015
2015/05/13 职场文书
如何给HttpServletRequest增加消息头
2021/06/30 Java/Android
Django中session进行权限管理的使用
2021/07/09 Python