Django 一个简单的图书管理程序(四 编写图书管理)
来源:互联网 发布:scrivener 注册机 mac 编辑:程序博客网 时间:2024/05/17 01:44
现在在已有的框架中添加图书管理。
右键项目名称“library”,新建包“book”。
1. 新建“models.py”
右键包名“book”,新建“models.py”,代码如下:
#!usr/bin/env python#coding: utf-8'''Created on 2012-7-30@author: jingwen.wu'''from django.db import modelsfrom reader.models import Readerclass Book(models.Model): name = models.CharField(max_length = 128) #书名 press = models.CharField(max_length = 128, blank = True) #出版社 author = models.CharField(max_length = 64, blank = True) #作者 publicationTime = models.DateTimeField(blank = True) #出版时间 reader = models.ForeignKey(Reader, blank = True) #借阅人员 def __unicode__(self): return self.name借阅人作为外键被引用。
2. 新建“views.py”
右键包名“book”,新建“views.py”,代码如下:
#!usr/bin/env python#coding: utf-8'''Created on 2012-7-30@author: jingwen.wu'''from book.models import Bookfrom reader.models import Readerfrom django.core.paginator import Paginator, InvalidPage, EmptyPagefrom django.shortcuts import render_to_response, get_object_or_404from django.http import HttpResponsefrom django.utils import simplejsonfrom django.template import RequestContextdef index(request): books = Book.objects.order_by('name') paginator = Paginator(books, 10) # 每页显示数目 page = request.POST.get('pageNum', 1) try: if int(page) > paginator.num_pages: page = str(paginator.num_pages) books = paginator.page(page) except (EmptyPage, InvalidPage): books = paginator.page(paginator.num_pages) return render_to_response('book/basepage.html', {'books':books, 'currentPage':page, 'numPerPager':5})def addBook(request): if request.POST: name = request.POST.get('name', None) press = request.POST.get('press', None) author = request.POST.get('author', None) publicationTime = request.POST.get('publicationTime', None) '''验证是否有重复的书名''' names = Book.objects.filter(name__iexact = name) if names: return HttpResponse(simplejson.dumps({"status":201, "statusCode":201, "navTabId":request.POST.get('navTabId', 'bookindex'), "callbackType":request.POST.get('callbackType', None), "message":u'此书名已经存在不能重复添加', "info":u'此书名已经存在不能重复添加', "result":u'此书名已经存在不能重复添加'}), mimetype='application/json') else: book = Book(name=name, press=press, author=author, publicationTime=publicationTime) book.save() return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId', 'bookindex'), "callbackType":request.POST.get('callbackType', 'closeCurrent'), "message":u'添加成功'}), mimetype='application/json') return render_to_response('book/add.html') def editBook(request, id): book = get_object_or_404(Book, pk=int(id)) # 404:服务器找不到指定的资源 if request.POST: book.name = request.POST.get('name', None) book.press = request.POST.get('press', None) book.author = request.POST.get('author', None) book.publicationTime = request.POST.get('publicationTime', None) book.reader = request.POST.get('reader', None) book.save() return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId', 'bookindex'), "callbackType":request.POST.get('callbackType', 'closeCurrent'), "message":u'编辑书本信息成功', "info":u'编辑书本信息成功'}), mimetype='application/json') return render_to_response('book/edit.html', {'book': book})def delBook(request, id): book = Book.objects.get( id = id ) book.delete() return HttpResponse(simplejson.dumps({"statusCode":200, "nabTabId":request.POST.get('navTabId', 'bookindex'), "callbackType":request.POST.get('callbackType', None), "message":u'删除成功', "info":u'删除成功', "result":u'删除成功'}), mimetype='application/json')def selecteddelBook(request): ids = request.POST.get('ids', None) if ids: books = Book.objects.extra( where=['id IN (' + ids + ')']) books.delete() return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId', 'bookindex'), "callbackType":request.POST.get('callbackType', None), "message":u'删除成功', "info":u'删除成功', "result":u'删除成功'}), mimetype='application/json')def searchBook(request): if 'q' in request.POST and request.POST['q']: q = request.POST['q'] books = Book.objects.filter(name__icontains = q) else: books = Book.objects.order_by('name') paginator = Paginator(books, 10) page = request.POST.get('pageNum', 1) try: if int(page) > paginator.num_pages: page = str(paginator.num_pages) books = paginator.page(page) except (EmptyPage, InvalidPage): books = paginator.page(paginator.num_pages) if 'q' in request.POST and request.POST['q']: return render_to_response('book/basepage.html', {'books':books, 'currentPage':page, 'numPerPage':5, 'q':q}) else: return render_to_response('book/basepage.html', {'books':books, 'currentPage':page, 'numPerPage':5})
3. 新建“urls.py”
右键包名“book”,新建“urls.py”,代码如下:
#!usr/bin/env python#coding: utf-8'''Created on 2012-7-30@author: jingwen.wu'''from django.conf.urls.defaults import url, patternsfrom django.conf import settingsurlpatterns = patterns('', url(r'^$', 'book.views.index',name="books_index"), url(r'^index/$', 'book.views.index', name="books_index"), url(r'^add/$', 'book.views.addBook',name="books_add"), url(r'^edit/(?P<id>\d+)/$', 'book.views.editBook',name="books_edit"), url(r'^delete/(?P<id>\d+)/$', 'book.views.delBook',name="books_delete"), url(r'^selecteddelete/$', 'book.views.selecteddelBook',name="books_selecteddelete"), url(r'^search/$', 'book.views.searchBook',name="books_search"), )
右键文件夹“templates”,新建文件夹“book”
4.1. 新建“basepage.html”
右键文件夹“book”, 新建“basepages.html”,代码如下:
<form id="pagerForm" action="{% url books_index %}" method="post"><input type="hidden", name="pageNum" value="{{ currentPage }}"/><input type="hidden", name="numPerPage" value="{{ numPerPage }}"/><input type="hidden", name="numPerPage" value=""/></form><script type="text/javascript">if(typeof(dwzinit)=='undefined'){self.location="/"}</script><div class="page"><div class="pageHeader"><form onsubmit="return navTabSearch(this);" action="{% url books_search %}" method="post"><div class="searchBar"><table class="searchContent"><tr><td >图书名称:<input type="text" name="q" value="{{ q }}"/></td><td ><div class="buttonActive"><div class="buttonContent"><button type="submit">检索</button></div></div></td></tr></table></div></form></div><div class="pageContent"><div class="panelBar"><ul class="toolBar"><li><a class="add" href="{% url books_add %}" target="dialog" mask="true" width="600", height="400", title="添加图书" rel="addresource"><span>新增</span></a></li><li><a class="delete" title="确实要删除这些记录吗?" target="selectedTodo" rel="ids" postType="string" href="{% url books_selecteddelete %}" ><span>批量删除</span></a></li></ul></div><table class="table" width="100%" layoutH="116"><thead><tr><th width="3%"><input type="checkbox" group="ids" class="checkboxCtrl"></th><th width="5%">序号</th><th width="25%">名称</th><th width="15%">作者</th><th width="20%">出版社</th><th width="10%">出版时间</th><th width="10%">借阅人</th><th width="10%">操作</th></tr></thead><tbody>{% for book in books.object_list %}<tr target="sid_group" rel="{{ book.id }}"><td><input name="ids" value="{{ book.id }}" type="checkbox"/></td>{% load common_tags %}<td>{{ forloop.counter|calculate:currentPage}}</td><td>{{ book.name }}</td><td>{{ book.author }}</td><td>{{ book.press }}</td><td>{{ book.publicationTime|date:"Y-m-d" }}</td><td>{{ book.reader.name}}</td><td><a class="edit" href="{% url books_edit book.id %}" target="dialog" mask="true" width="720" height="500" rel="editresource"><span>编辑</span></a><a class="delete" href="{% url books_delete book.id %}" target="ajaxTodo" rel="deleteresource" title="确定要删除该项吗?"><span>删除</span></a></td></tr>{% endfor %}</tbody></table><div class="panelBar"><div class="pages"><span>共{{ books.paginator.count }}</span></div><div class="pagination" targetType="navTab" totalCount="{{ books.paginator.count }}" numPerPage="{{ books.paginator.per_page }}" pageNumShown="10" currentPage="{{ currentPage }}"></div></div></div></div>
4.2. 新建“add.html”
右键文件夹“book”,新建“add.html”,代码如下:
<div class="page"><div class="pageContent"><form method="post" action="{% url books_add %}" class="pageForm required-validate" onsubmit="return validateCallback(this, dialogAjaxDone)">{% csrf_token %}<input type="hidden" name="navTabId" value="bookindex"/><div class="pageFormContent" layoutH="58"><div class="unit"><label>名称:</label><input type="text" class="required" size="30" name="name" value=""/></div><div class="unit"><label>作者:</label><input type="text" class="required" size="30" name="author" value=""/></div><div class="unit"><label>出版社:</label><input type="text" class="required" size="30" name="press" value=""/></div><div class="unit"><label>出版时间:</label><input type="text" name="publicationTime" class="date" size="30" format="yyyy-MM-dd" readonly="true" yearstart="-100" yearend="200" /><a class="inputDateButton" href="javascript:;">选择</a><span class="info">yyyy-MM-dd</span></div><div class="formBar"><ul><li><div class="buttonActive"><div class="buttonContent"><button type="submit">保存</button></div></div></li><li><div class="button"><div class="buttonContent"><button type="button" class="close">取消</button></div></div></li></ul></div></div></form></div></div>
4.3. 新建“edit.html”
右键文件夹“book”,新建“edit.html”,代码如下:
<div class="page"><div class="pageContent"><form method="post" avtion="{% url books_edit %}" class="pageForm required-validate" onsubmit="reture validateCallback(this, dialogAjaxDone)"><input type="hidden" name="nabTabId" value="bookindex"/><div class="pageFormContent" layoutH="58"><div class="unit"><label>名称:</label><input type="text" class="required" size="30" name="name" value="{{ book.name }}" readonly="readonly" /></div><div class="unit"><label>作者:</label><input type="text" class="required" size="30" name="author" value="{{ book.author }}" readonly="readonly"/></div><div class="unit"><label>出版社:</label><input type="text" class="required" size="30" name="press" value="{{ book.press }}" readonly="readonly"/></div><div class="unit"><label>出版时间:</label><input type="text" name="publicationTime" class="date" size="30" format="yyyy-MM-dd" readonly="true" value='{{ book.publicationTime|date:"Y-m-d" }}' yearstart="-10" yearend="20" readonly="readonly"/><span class="info">年-月-日</span></div><div><label>借阅人</label><input type="text" class="required" size="30" name="reader" value="{{ book.reader.name}}"/></div></div><div class="formBar"><ul><li><div class="buttonActive"><div class="buttonContent"><button type="submit">保存</button></div></div></li><li><div class="button"><div class="buttonContent"><button type="button" class="close">取消</button></div></div></li></ul></div></form></div></div>
4.4. 新建“nav_book.html”
在页面左上方添加图书的快捷导航键, 连接到“nav_book.html”。右键文件夹“commmon”,新建“nav_book.html”代码如下:
<script type="text/javascript">navTab.openTab("bookindex", "{% url books_index %}", {title:"图书管理"});</script><div class="accordion" fillSpace="sidebar"><div class="accordionHeader"><h2><span>Folder</span>系统管理</h2></div><div class="accordionContent"><ul class="tree treeFolder expand"><li><a>常用操作</a><ul><li><a class="add" href="{% url books_add %}" target="dialog" mask="true" width="600" height="400" title="添加图书" rel="addbook"><span>添加图书</span></a></li><li><a class="add" href="{% url readers_add %}" target="dialog" mask="true" width="600" height="400" title="添加借阅人" rel="addreader"><span>添加借阅人</span></a></li></ul></li><li><a>图书管理</a><ul><li><a href="{% url books_index %}" target="navTab" rel="bookindex" title="图书管理">图书管理</a></li></ul></li></ul></div></div>
在“library/common/views.py”中添加代码:
def nav_book(request): return render_to_response('common/nav_book.html', {}, context_instance=RequestContext(request))
在“library/common/urls.py”中的“urlpatterns = patterns()”添加代码:
url(r'^nav_book/$', 'common.views.nav_book', name="common_book"),
在“library/templates/common/index.html”的“id = "navMenu" ”里添加:
<li><a href="{% url common_book %}"><span>图书管理</span></a></li>
在“library/templates/common/index.html”的“常用操作”里添加:
<li><a class="add" href="{% url books_add %}" target="dialog" mask="true" width="600" height="400" title="添加图书" rel="addbook"><span>添加图书</span></a></li>
在“library/templates/common/index.html”的“系统操作”里添加:
<li><a href="{% url books_index %}" target="navTab" rel="bookindex" title="图书管理" >图书管理</a></li>
5. 修改“setting”
在“library/library/setting.py”的“INSTALLED_APPS = ()”中添加“'book',”
6. 同步数据库
7. 运行
首页:
添加:
图书管理:
- Django 一个简单的图书管理程序(四 编写图书管理)
- Django 一个简单的图书管理程序(二编写借阅人管理)
- Django 一个简单的图书管理程序(一建立项目)
- Django 一个简单的图书管理程序 (三 展示)
- Django 一个简单的图书管理程序(五 通过查询添加借阅人)
- Django 一个简单的图书管理程序(六 添加CSV文件导入导出操作)
- 图书管理程序(三)
- 图书管理程序(二)
- 图书管理程序(一)
- 图书管理程序
- 图书管理程序
- 用c++编写简单的图书管理系统怎么弄
- 用c++编写简单的图书管理系统怎么弄
- 简单的图书管理系统
- Vue---- 简单的图书管理
- 简单Java图书管理程序(只实现了界面的显示)
- H5+css+js一个简单的图书管理系统
- 简单图书管理系统
- 我对 回调函数 的理解
- CFileDialog类对象 调用GetFolderPath()运行错误
- ubuntu bochs2.5.1安装
- 数据库—实例总结
- 黑色情人节我们来聊聊黑帽seo
- Django 一个简单的图书管理程序(四 编写图书管理)
- Objective C桥接模式
- 局域网内连接MySQL
- SetWindowPos
- 在 WPF 中使用 SQLite
- 学车总结
- 震子
- MYSQL优化——CPU 占用 100% 的解决过程
- The Data types reference sheet