Django 一个简单的图书管理程序(二编写借阅人管理)

二. 编写借阅人

1. 新建借阅人package

在选中项目名称“library”右键,新建一个借阅人的package,如下图所示:

 

左键


输入包名称点解“Finish”。


2. 新建models

右键“reader”的package,新建一个“models.py”,如下图所示:


左键


输入“models”,点击“Finish”。

现在添加代码:

#!usr/bin/env python
#coding: utf-8
'''
Created on 2012-7-30

@author: jingwen.wu
'''
from django.db import models

class Reader(models.Model):
    account = models.CharField(max_length = 64) #账号
    name = models.CharField(max_length = 64)   #姓名
    email = models.CharField(max_length = 128) #邮箱
    contact = models.IntegerField(max_length = 16)  #联系方式
    
    def __unicode__(self):
        return self.account

        


3,新建“views.py”

新建方法如同新建“models.py”,代码如下:

#!usr/bin/env python
#coding: utf-8
'''
Created on 2012-7-30

@author: jingwen.wu
'''
from reader.models import Reader

from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.http import HttpResponse
from django.utils import simplejson
from django.shortcuts import render_to_response, get_object_or_404

'''显示借阅人列表'''
def index(request):
    
    readers = Reader.objects.order_by('account')
    paginator = Paginator(readers, 10) #每页显示的行数
    page = request.POST.get('pageNum', 1)
    try:
        if int(page) > paginator.num_pages:
            page = str(paginator.num_pages)
        readers = paginator.page(page)
    except (EmptyPage, InvalidPage):
        readers = paginator.page(paginator.num_pages)
    return render_to_response('reader/basepage.html', {'readers':readers, 'currentPage':page, 'numPerPage':5})

'''添加借阅人信息'''
def addReader(request):
    
    if request.POST:
        account = request.POST.get('account', None)
        name = request.POST.get('name', None)
        email = request.POST.get('email', None)
        contact = request.POST.get('contact', None)
        '''验证借阅人是否已经存在'''
        readers = Reader.objects.filter(account__iexact = account)
        if readers:
            return HttpResponse(simplejson.dumps({"status":201, "statusCode":201, "navTabId":request.POST.get('navTabId', 'readerindex'), "callbackType":request.POST.get('callbackType', None), "message":u'此账户已存在不能重复添加', "info":u'此账户已存在不能重复添加', "result":u'此账户已存在不能重复添加'}), mimetype='application/json')
        else:
            reader = Reader(account=account, name=name, email=email, contact=contact)
            reader.save()
            return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId', 'readerindex'), "callbackType":request.POST.get('callbackType', 'closeCurrent'), "message":u'添加成功'}), mimetype='application/json')
        
    return render_to_response('reader/add.html')

'''编辑借阅人信息'''
def editReader(request, id):
    
    reader = get_object_or_404(Reader, pk = int(id))
    if request.POST:
        reader.name = request.POST.get('name', None)
        reader.email = request.POST.get('email', None)
        reader.contact = request.POST.get('contact', None)
        reader.save()
        return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId', 'readerindex'), "callbackType":request.POST.get('callbackType', 'closeCurrent'), "menssage":u'编辑成功', "info":u'编辑成功', "result":u'编辑成功'}), mimetype='application/json')
    
    return render_to_response('reader/edit.html', {'reader': reader}) 

'''删除借阅人信息'''
def delReader(request, id):
    
    reader = Reader.objects.get(id = id)
    reader.delete()
    return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId', 'readerindex'), "callbackType":request.POST.get('callbackType', None), "message":u'删除成功', "info":u'删除成功', "result":u'删除成功'}), mimetype='application/json')

'''批量删除借阅人信息'''
def selecteddelReader(request):
    ids = request.POST.get('ids', None)
    if ids:
        readers = Reader.objects.extra( where=['id IN (' + ids + ')'] )
        readers.delete()
        return HttpResponse(simplejson.dumps({"statusCode":200, "navTabId":request.POST.get('navTabId', 'readerindex'), "callbackType":request.POST.get('callbackType', None), "message":u'删除成功', "info":u'删除成功', "result":u'删除成功'}), mimetype='application/json')

'''查询借阅人信息'''    
def searchReader(request): 
    if 'q' in request.POST and request.POST['q']:
        q = request.POST['q']
        readers = Reader.objects.filter(name__icontains = q)
    else:
        readers = Reader.objects.order_by('name')
    paginator = Paginator(readers, 10)
    page = request.POST.get('pageNum', 1)
    try:
        if int(page) > paginator.num_pages:
            page = str(paginator.num_pages)
        readers = paginator.page(page)
    except(EmptyPage, InvalidPage):
        readers = paginator.page(paginator.num_pages)
    if 'q' in request.POST and request.POST['q']:
        return render_to_response('reader/basepage.html', {'readers':readers, 'currentPage':page, 'numPerPage':5, 'q':q})
    else:
        return render_to_response('reader/basepage.html', {'readers':readers, 'currentPage':page, 'numPerPage':5})    

4,新建“urls.py”

代码如下:

#!usr/bin/env python
#coding: utf-8
'''
Created on 2012-7-30

@author: jingwen.wu
'''
from django.conf.urls.defaults import *
from django.conf import settings

urlpatterns = patterns('',
    url(r'^$', 'reader.views.index',name="readers_index"),
    url(r'^index/$', 'reader.views.index', name="readers_index"),
    url(r'^add/$', 'reader.views.addReader',name="readers_add"),
    url(r'^edit/(?P<id>\d+)/$', 'reader.views.editReader',name="readers_edit"),
    url(r'^delete/(?P<id>\d+)/$', 'reader.views.delReader',name="readers_delete"),
    url(r'^selecteddelete/$', 'reader.views.selecteddelReader',name="readers_selecteddelete"),
    url(r'^search/$', 'reader.views.searchReader',name="readers_search"),   
)
其中,url()的第一个参数是正则表达式。“r”标明在正则表达式中“\”不为转义符。


5. 前台界面

现在来添加前台界面,界面用DWZ富客户端框架展示。前台界面用总过三个界面,总览的基础页、添加页和编辑页。

右键项目名称“library”,添加文件夹“templates”,如下图所示:



左键


输入文件夹名称“templates”,点击“Finish”。

右键文件夹“templates”,添加文件夹“reader”。

右键文件夹“reader”,添加基础页的.html文件,如下图所示:


点击


输入页面名称“basepage.html”,点击“Finish”。

编写“basepage.html”时应以“Text Editor”方式打开。一般默认以“Web Browser”方式。


添加代码如下:

<form id="pagerForm" action="{% url readers_index %}" method="post">
	<input type="hidden" name="pageNum" value="{{ currentPage }}"/>
	<input type="hidden" name="numPerPage" value="{{ numPerPage }}"/>
	<input type="hidden" name="account" value=""/>
</form>

<script type="text/javascript">
  	if(typeof(dwzinit)=='undefined') {
		self.location="/"
  	}
</script>

<div class="page">
	<div class="pageHeader">
		<form οnsubmit="return navTabSearch(this);" action="{% url readers_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 readers_add %}" target="dialog" mask="true" width="600" height="400" title="添加借阅人" rel="addresource"><span>新增</span></a></li>
                <li><a title="确实要删除这些记录吗?" target="selectedTodo" rel="ids" postType="string" href="{% url readers_selecteddelete %}" class="delete"><span>批量删除</span></a></li> 
                <li class="line">line</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="15%">账号</th>
				<th width="15%">姓名</th>
				<th width="25%">邮箱</th>
				<th width="15%">联系电话</th>
				<th width="27%">操作</th>
			</tr>
			</thead>
			<tbody>
		   {% for reader in readers.object_list %}
           <tr target="sid_group" rel="{{ reader.id }}">
           <td><input name="ids" value="{{ reader.id }}" type="checkbox"></td>
           {% load common_tags %}
           <td>{{ forloop.counter|calculate:currentPage }}</td>
           <td>{{ reader.account }}</td>
           <td>{{ reader.name }}</td>
           <td>{{ reader.email }}</td>
           <td>{{ reader.contact }}</td>
           <td>
              <a class="edit" href="{% url readers_edit reader.id %}" target="dialog" mask="true"  width="600" height="400" rel="editresource"><span>编辑</span></a>
              <a class="delete" href="{% url readers_delete reader.id %}" target="ajaxTodo"  rel="deleteres" title="您确定要删除该项吗?"><span>删除</span></a>
           </td>
           </tr>
           {% endfor %}
			</tbody>
		</table>
		<div class="panelBar">
			<div class="pages">
				<span>共{{ readers.paginator.count }}条</span>
			</div>
			<div class="pagination" targetType="navTab" totalCount="{{ readers.paginator.count }}" numPerPage="{{ readers.paginator.per_page }}" pageNumShown="10" currentPage="{{ currentPage }}"></div>
		</div>
		
	</div>
</div>

其中,“action”的内容指向之前“urls”中设置的匹配关系;“calculate”是一个过滤器,用于翻页后“序号”依然能够依序递增,会在之后详细介绍。


再添加添加页“add.html”的代码如下:

<div class="page">
	<div class="pageContent">
	
	<form method="post" action="{% url readers_add %}" class="pageForm required-validate" οnsubmit="return validateCallback(this, dialogAjaxDone)">{% csrf_token %}
		<input type="hidden" name="navTabId" value="readerindex"/>
		<div class="pageFormContent" layoutH="58">

			<div class="unit">
				<label>账号:</label>
				<input type="text" class="required" size="30"  name="account" value="" />
			</div>
			<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 email" size="30" name="email" value="" />
			</div>
			
            <div class="unit">
				<label>联系电话:</label>
				<input type="text" class="required" size="30" name="contact" value="" />
			</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>

添加“edit.html”的代码如下:

<div class="page">
	<div class="pageContent">
	
	<form method="post" action="{% url readers_edit reader.id %}" class="pageForm required-validate" οnsubmit="return validateCallback(this, dialogAjaxDone)">
		<input type="hidden" name="navTabId" value="readerindex"/>
		<div class="pageFormContent" layoutH="58">

			<div class="unit">
				<label>账号:</label>
				<input type="text" class="required" size="30"  name="account" value="{{ reader.account }}" readonly="readonly" />
			</div>
			<div class="unit">
				<label>姓名:</label>
				<input type="text" size="30" name="name" value="{{ reader.name }}" />
			</div>
            <div class="unit">
				<label>邮箱:</label>
				<input type="text" class="required email" size="30" name="email" value="{{ reader.email }}" />
			</div>
            <div class="unit">
				<label>联系电话:</label>
				<input type="text" class="required phone" size="30" name="contact" value="{{ reader.contact }}" />
			</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>
“edit.html”的代码和“add.html”的代码很相似,只是修改了“action”的指向,再给每个“value”添加了变量,这样可以在修改信息时看到已有信息的内容。




  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值