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 Web框架Pylons中使用MongoDB的例子
Dec 03 Python
python的tkinter布局之简单的聊天窗口实现方法
Sep 03 Python
Python中property属性实例解析
Feb 10 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
python email smtplib模块发送邮件代码实例
Apr 26 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
详解Python给照片换底色(蓝底换红底)
Mar 22 Python
pybind11在Windows下的使用教程
Jul 04 Python
python实现批量修改服务器密码的方法
Aug 13 Python
python 实现屏幕录制示例
Dec 23 Python
Python list运算操作代码实例解析
Jan 20 Python
python网络编程之五子棋游戏
May 14 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实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
javascript 清空form表单中某种元素的值
2009/12/26 Javascript
js定时器的使用(实例讲解)
2014/01/06 Javascript
JavaScript中的object转换成number或string规则介绍
2014/12/31 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
原生javascript实现分享到朋友圈功能 支持ios和android
2016/05/11 Javascript
JavaScript6 let 新语法优势介绍
2016/07/15 Javascript
AngularJS自定义控件实例详解
2016/12/13 Javascript
原生js实现可爱糖果数字时间特效
2016/12/30 Javascript
详解Jquery Easyui的验证扩展
2017/01/09 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
Python合并两个字典的常用方法与效率比较
2015/06/17 Python
python中使用正则表达式的连接符示例代码
2017/10/10 Python
Python3 操作符重载方法示例
2017/11/23 Python
Python网页正文转换语音文件的操作方法
2018/12/09 Python
python调用百度地图WEB服务API获取地点对应坐标值
2019/01/16 Python
利用Tensorflow的队列多线程读取数据方式
2020/02/05 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
美国现代家具网站:Design Within Reach
2018/07/19 全球购物
单位成立周年感言
2014/01/26 职场文书
学校三八妇女节活动情况总结
2014/03/09 职场文书
安全生产月演讲稿
2014/05/09 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
幸福中国演讲稿
2014/09/12 职场文书
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
介绍信的写法
2015/01/31 职场文书
党校个人总结
2015/03/04 职场文书
2015学校师德师风工作总结
2015/04/22 职场文书
感恩教育观后感
2015/06/17 职场文书
求职信如何撰写?
2019/05/22 职场文书
使用pytorch实现线性回归
2021/04/11 Python