基于python的图书管理系统测试步骤_Django admin实现图书管理系统菜鸟级教程完整实例...

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

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

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

准备工作

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

2017121295216027.png?2017111295226

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

2017121295307391.png?2017111295318

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)

完整的代码:

2017121295450254.png?201711129550

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的优势

2017121295742810.png?2017111295754

2017121295819606.png?2017111295829

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

2017121295958150.png?201711121008

书名已经成功显示出来

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)

20171212100118705.png?2017111210135

20171212100208763.png?2017111210220

#配置作者页面的扩展内容

class Authoradmin(admin.ModelAdmin):

list_display=('first_name','last_name','email')

20171212100320432.png?2017111210331

#配置出版社的扩展显示

class Publisheradmin(admin.ModelAdmin):

list_display = ('name','address','country',)

20171212100422214.png?2017111210433

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="设置所有的书籍为--删除"

效果图

20171212100536155.png?2017111210547

调试成功

附上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实现图书管理系统菜鸟级教程完整实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站:

django实现用户登陆功能详解

Python通过Django实现用户注册和邮箱验证功能代码

Python编程django实现同一个ip十分钟内只能注册一次

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

本文标题: Django admin实现图书管理系统菜鸟级教程完整实例

本文地址: http://www.cppcns.com/jiaoben/python/214183.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c# image转换为bitmap_Python PIL.Image与numpy.array之间的相互转换

前言有时我们使用PIL库读入图像数据后需要查看图像数据的维度&#xff0c;比如shape&#xff0c;或者有时我们需要对图像数据进行numpy类型的处理&#xff0c;所以涉及到相互转化&#xff0c;这里简单记录一下。方法当使用PIL.Image.open()打开图片后&#xff0c;如果要使用img…

计算机网络互联设备功能,计算机网络互联设备简介

一、网卡v 网络适配器&#xff0c;俗称网卡(NIC&#xff0c;Network InterfaceCard 或 Ethernet network card ) 原理&#xff1a;• 工作在OSI/RM中数据链路层的设备– 是局域网接入设备&#xff0c;单机与网络间架设的桥梁 特征&#xff1a;• MACaddress&#xff1a;– uniq…

安全使用计算机事例,计算机安全案例分析.ppt

您所在位置&#xff1a;网站首页 > 海量文档&nbsp>&nbsp资格/认证考试&nbsp>&nbsp安全工程师考试计算机安全案例分析.ppt35页本文档一共被下载&#xff1a;次,您可全文免费在线阅读后下载本文档。下载提示1.本站不保证该用户上传的文档完整性&#…

bootstrap外不引用连接_网络编程Netty IoT百万长连接优化,万字长文精讲

IoT是什么The Internet of things的简称IoT&#xff0c;即是物联网的意思IoT推送系统的设计比如说&#xff0c;像一些智能设备&#xff0c;需要通过APP或者微信中的小程序等&#xff0c;给设备发送一条指令&#xff0c;让这个设备下载或者播放音乐&#xff0c;那么需要做什么才…

计算机基础知识与程序设计二,计算机基础与程序设计.doc

计算机基础与程序设计.doc (17页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;14.9 积分&#xfeff;《计算机基础与稈序设计》是高等教冇H学考试工科备专业的基础课。这门课也是大部分学 生学习计算…

为什么python 为什么没有接口_python没有接口吗

接口只是定义了一些方法&#xff0c;而没有去实现&#xff0c;多用于程序设计时&#xff0c;只是设计需要有什么样的功能&#xff0c;但是并没有实现任何功能&#xff0c;这些功能需要被另一个类&#xff08;B&#xff09;继承后&#xff0c;由 类B去实现其中的某个功能或全部功…

画直线_在鸡面前画一条直线,为什么它会晕?西瓜视频这知识好冷告诉答案

为什么世界有那么多的未解之谜&#xff0c;我们无从而知&#xff0c;今天我们来探讨一下在鸡面前画条直线为什么会晕&#xff1f;你们知道吗&#xff1f;今天西瓜视频这知识好冷告诉你们答案&#xff0c;帮助你们掌握生活中所不知道的涨知识&#xff0c;增加我们的知识库。优秀…

永洪bi_案例分享!永洪BI助力知名三甲医院数字化转型升级

案例一&#xff1a;“新数据需求立刻看到结果”建院至今已有100余年的历史&#xff0c;现已发展成为集医疗、科研、教学为一体的某家三级甲等综合医院&#xff0c;通过永洪科技大数据平台&#xff0c;基于医院的HIS系统为数据源&#xff0c;分别从运营管理、药品管理、病例管理…

github mac 添加 ssh_计算机专业MAC操作技巧(二)

1、MAC 终端启动jupyter jupyter安装与配置就不赘述了&#xff0c;MAC终端启动jupyter有点独特。尝试了很多次都没有打开浏览器&#xff0c;把踩的坑总结一下&#xff1a;一直出现找不到浏览器的错误&#xff0c;在本地浏览器中一直打不开。&#xff08;1&#xff09;、首先先在…

计算机有必要报英语四级吗,我已工作了,现在有必要去考英语四级吗?还是 – 手机爱问...

2010-02-20有哪些是衡量好坏的重要指标呢&#xff1f;眼看就是春节&#xff0c;电视还没买回家&#xff0c;不是偷懒&#xff0c;是不晓得该如何抉择是好&#xff1f;需要网友帮忙。液晶显示不像PDP、CRT那样属于自发光显示。液晶面板也好&#xff0c;背光技术也罢。只是显示屏…

python分支结构说课_Python_3.8平台上的分支结构(模块.类.函数)_11

计算机 python语言_3.8平台上的分支结构(模块.类.函数)11上节说了&#xff0c;python程序有注释、缩进和程序主题。其应用软件由模块--文件*.py分割保存。模块中有变量、函数、类(数据与函数)等。模块是最基础的最小的结构要素单元。并用__main__模块演示了按照较规范的执行顺序…

计算机应用基础自主学习,《计算机应用基础》自主学习指导

本资料可供职业中学、高职及初学计算机基础的学生参考也可以供授课教师参考《计算机应用基础》自主学习指导一、课程内容、要求、目的1、本课程是一门有关计算机知识的入门课程&#xff0c;主要着重计算机的基础知识、基本概念和基本操作技能的学习和培养&#xff0c;并兼顾实用…

java run里面定义变量_Java程序员50多道最热门的多线程和并发面试题(答案解析)...

下面是Java程序员相关的热门面试题&#xff0c;你可以用它来好好准备面试。1) 什么是线程&#xff1f;线程是操作系统能够进行运算调度的最小单位&#xff0c;它被包含在进程之中&#xff0c;是进程中的实际运作单位。程序员可以通过它进行多处理器编程&#xff0c;你可以使用多…

qpython获取手机gps_基于Python获取照片的GPS位置信息

这篇文章主要介绍了基于Python获取照片的GPS位置信息,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 昨天听人说&#xff0c;用手机拍照会带着GPS信息&#xff0c;原来没注意过这个&#xff0c;因此查看下并使用…

计算机盐城工学院和常熟理工,【选专业】这6所二本院校的专业,就业不输一本学生!...

原标题&#xff1a;【选专业】这6所二本院校的专业&#xff0c;就业不输一本学生&#xff01;距离高考只剩下十来天&#xff0c;家长们除了要关心孩子的情况&#xff0c;对于志愿填报也渐渐开始关注起来&#xff0c;这个时候许多家长才发现&#xff0c;志愿填报居然这么麻烦&am…

蒸汽机器人q和锤石q_英雄联盟:圣杯锤石的启发,辅助的作用是否应该更倾向多元化?...

圣杯锤石的套路我个人最早是从主播青蛙那儿了解的&#xff0c;偶然地刷到和锤石有关的剪辑&#xff0c;发现他已经在使用圣杯替代基克的聚合&#xff0c;在多次观察锤石在团战中的表现和圣杯的作用后&#xff0c;我觉得这种打法值得说道说道。当然强不强我无从得知&#xff0c;…

计算机英语的语言特点及教学,计算机英语的语言特点及教学.doc

计算机英语的语言特点及教学.doc (6页)本资源提供全文预览&#xff0c;点击全文预览即可全文预览,如果喜欢文档就下载吧&#xff0c;查找使用更方便哦&#xff01;9.90 积分&#xfeff;计算机英语的语言特点及教学  1计算机英语的语言特点  计算机英语具有简明性  较传统…

npz文件转为npy_Numpy_快速操作数组 4.4 数组的文件输入输出

Numpy作者&#xff1a;PureFFFmennory对象类型&#xff1a;ndarry上一节&#xff1a;4.3 使用向量计算代替数组PureFFFmennory&#xff1a;《Python for Data Analysis 2nd》学习笔记Chapter 4-4.3​zhuanlan.zhihu.com4.4 数组的文件输入与输出NumPy能够以文本或二进制格式保存…

csv导入mysql_mysql导入超大csv指南

mysql导入超大csv指南需求描述手头下载了一个比较大(400Mb)的语料数据&#xff0c;需要从里面提取出某两种语言的句子对&#xff0c;因为数据特别大&#xff0c;且csv并非标准以逗号分隔而是以tab分隔&#xff0c;尝试用Navicat的导入向导导入失败。另外以后也可能会有处理超大…

光滑噪声数据常用的方法_数据挖掘中常用的数据清洗方法

是新朋友吗&#xff1f;记得先点蓝字关注我哦&#xff5e;数据挖掘中常用的数据清洗方法在数据挖掘过程中&#xff0c;数据清洗主要根据探索性分析后得到的一些结论入手&#xff0c;然后主要对四类异常数据进行处理&#xff0c;分别是缺失值(missing value)&#xff0c;异常值(…