Django 一个简单的图书管理程序 (三 展示)

来源:互联网 发布:蔡洋 知乎 编辑:程序博客网 时间:2024/05/16 12:09

之前创建了项目,编写的借阅者的一些操作。现在尝试着添加主页,通过浏览器展示这些操作。

1. 添加网页展示的信息

右键项目名称“library”,新建包“static”。

右键包名“static”,新建文件夹“static”。

在文件夹“static”中添加网页展示风格的一些信息。也可以在http://code.google.com/p/dwz/downloads/list下载,使用dwz的一些风格。


2. 新建对主页的操作

右键项目名称“library”,新建包“common”。

2.1. 新建“views.py”

右键包名“common”,新建“views.py”,代码如下:

[python] view plaincopy
  1. #!usr/bin/env python  
  2. #coding: utf-8  
  3. ''''' 
  4. Created on 2012-8-3 
  5.  
  6. @author: jingwen.wu 
  7. '''  
  8. from django.shortcuts import render_to_response,get_object_or_404  
  9. from django.template import RequestContext  
  10. from django.http import HttpResponseRedirect  
  11. from django.core.urlresolvers import reverse  
  12. from django.contrib.auth.decorators import login_required  
  13.   
  14. def index(request):  
  15.     return render_to_response('common/index.html', context_instance=RequestContext(request))  
  16.   
  17. def nav_index(request):  
  18.     return render_to_response('common/nav_index.html', {}, context_instance=RequestContext(request))  
  19.   
  20. def nav_reader(request):  
  21.     return render_to_response('common/nav_reader.html', {}, context_instance=RequestContext(request))  


2.2. 新建“urls.py”

右键包名“common”,新建“urls.py”,代码如下:

[python] view plaincopy
  1. #!usr/bin/env python  
  2. #coding: utf-8  
  3.   
  4. ''''' 
  5. Created on 2012-8-3 
  6.  
  7. @author: jingwen.wu 
  8. '''  
  9.   
  10. from django.conf.urls.defaults import *  
  11. from django.conf import settings  
  12.   
  13. urlpatterns = patterns('',  
  14.     url(r'^$''common.views.index',name="index"),  
  15.     url(r'^nav_index/$''common.views.nav_index', name="common_index"),  
  16.     url(r'^nav_reader/$''common.views.nav_reader', name="common_reader"),  
  17. )  


2.3. 新建过滤器

右键包名“common”,新建包“templatetags”,右键“templatetags”,新建“common_tags.py”,代码如下:

[python] view plaincopy
  1. <span style="font-size:18px;">#!usr/bin/env python  
  2. #coding: utf-8  
  3. from django import template  
  4. register = template.Library()  
  5.  
  6. @register.filter(name='calculate')  
  7. def calculate(value, arg):  
  8.     return (int(arg)-1)*10 + int(value)  
  9.   
  10. </span>  
此过滤器用于页面展示的“序号”能够在翻页后依然依序递增。页面引用如下:


其中,“currentPage”为当前页码。

3. 设置“library” 的“setting”和“urls”

修改“library/library/setting.py”如下:

[python] view plaincopy
  1. <span style="font-size:18px;"># Django settings for library project.  
  2.   
  3. import os.path  
  4.   
  5. DEBUG = True  
  6. TEMPLATE_DEBUG = DEBUG  
  7. HERE = os.path.dirname(os.path.dirname(__file__))  
  8.   
  9. ADMINS = (  
  10.     # ('Your Name', 'your_email@example.com'),  
  11. )  
  12.   
  13. MANAGERS = ADMINS  
  14.   
  15. DATABASES = {  
  16.     'default': {  
  17.         'ENGINE''django.db.backends.mysql'# Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.  
  18.         'NAME''library',                      # Or path to database file if using sqlite3.  
  19.         'USER''root',                      # Not used with sqlite3.  
  20.         'PASSWORD''mysql',                  # Not used with sqlite3.  
  21.         'HOST''localhost',                      # Set to empty string for localhost. Not used with sqlite3.  
  22.         'PORT''3306',                      # Set to empty string for default. Not used with sqlite3.  
  23.     }  
  24. }  
  25.   
  26. # Local time zone for this installation. Choices can be found here:  
  27. # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name  
  28. # although not all choices may be available on all operating systems.  
  29. # On Unix systems, a value of None will cause Django to use the same  
  30. # timezone as the operating system.  
  31. # If running in a Windows environment this must be set to the same as your  
  32. # system time zone.  
  33. TIME_ZONE = 'Asia/Shanghai'  
  34.   
  35. # Language code for this installation. All choices can be found here:  
  36. # http://www.i18nguy.com/unicode/language-identifiers.html  
  37. LANGUAGE_CODE = 'zh-cn'  
  38.   
  39. SITE_ID = 1  
  40.   
  41. # If you set this to False, Django will make some optimizations so as not  
  42. # to load the internationalization machinery.  
  43. USE_I18N = True  
  44.   
  45. # If you set this to False, Django will not format dates, numbers and  
  46. # calendars according to the current locale.  
  47. USE_L10N = True  
  48.   
  49. # If you set this to False, Django will not use timezone-aware datetimes.  
  50. USE_TZ = True  
  51.   
  52. # Absolute filesystem path to the directory that will hold user-uploaded files.  
  53. # Example: "/home/media/media.lawrence.com/media/"  
  54. MEDIA_ROOT = os.path.join(HERE, 'media').replace('\\','/')  
  55.   
  56. # URL that handles the media served from MEDIA_ROOT. Make sure to use a  
  57. # trailing slash.  
  58. # Examples: "http://media.lawrence.com/media/", "http://example.com/media/"  
  59. MEDIA_URL = '/media/'  
  60.   
  61. # Absolute path to the directory static files should be collected to.  
  62. # Don't put anything in this directory yourself; store your static files  
  63. # in apps' "static/" subdirectories and in STATICFILES_DIRS.  
  64. # Example: "/home/media/media.lawrence.com/static/"  
  65. STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')  
  66.   
  67. # URL prefix for static files.  
  68. # Example: "http://media.lawrence.com/static/"  
  69. STATIC_URL = '/static/'  
  70.   
  71. ADMIN_MEDIA_ROOT = '/static/admin/'  
  72.   
  73. # Additional locations of static files  
  74. STATICFILES_DIRS = (  
  75.     # Put strings here, like "/home/html/static" or "C:/www/django/static".  
  76.     # Always use forward slashes, even on Windows.  
  77.     # Don't forget to use absolute paths, not relative paths.  
  78.     os.path.join(HERE,'static/static/').replace('\\','/'),  
  79. )  
  80.   
  81. # List of finder classes that know how to find static files in  
  82. # various locations.  
  83. STATICFILES_FINDERS = (  
  84.     'django.contrib.staticfiles.finders.FileSystemFinder',  
  85.     'django.contrib.staticfiles.finders.AppDirectoriesFinder',  
  86. #    'django.contrib.staticfiles.finders.DefaultStorageFinder',  
  87. )  
  88.   
  89. # Make this unique, and don't share it with anybody.  
  90. SECRET_KEY = 'jlf4edatvxmm$*o)mfi=1cz_(vr21+32w(ak8_yac4*mxl8g%a'  
  91.   
  92. # List of callables that know how to import templates from various sources.  
  93. TEMPLATE_LOADERS = (  
  94.     'django.template.loaders.filesystem.Loader',  
  95.     'django.template.loaders.app_directories.Loader',  
  96. #     'django.template.loaders.eggs.Loader',  
  97. )  
  98.   
  99. MIDDLEWARE_CLASSES = (  
  100.     'django.middleware.common.CommonMiddleware',  
  101.     'django.contrib.sessions.middleware.SessionMiddleware',  
  102.     'django.middleware.csrf.CsrfViewMiddleware',  
  103.     'django.contrib.auth.middleware.AuthenticationMiddleware',  
  104.     'django.contrib.messages.middleware.MessageMiddleware',  
  105.     # Uncomment the next line for simple clickjacking protection:  
  106.     # 'django.middleware.clickjacking.XFrameOptionsMiddleware',  
  107. )  
  108.   
  109. ROOT_URLCONF = 'library.urls'  
  110.   
  111. # Python dotted path to the WSGI application used by Django's runserver.  
  112. WSGI_APPLICATION = 'library.wsgi.application'  
  113.   
  114. TEMPLATE_DIRS = (  
  115.     # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".  
  116.     # Always use forward slashes, even on Windows.  
  117.     # Don't forget to use absolute paths, not relative paths.  
  118.     os.path.join(HERE,'templates'),  
  119. )  
  120.   
  121. INSTALLED_APPS = (  
  122.     'django.contrib.auth',  
  123.     'django.contrib.contenttypes',  
  124.     'django.contrib.sessions',  
  125.     'django.contrib.sites',  
  126.     'django.contrib.messages',  
  127.     'django.contrib.staticfiles',  
  128.     # Uncomment the next line to enable the admin:  
  129.     # 'django.contrib.admin',  
  130.     # Uncomment the next line to enable admin documentation:  
  131.     # 'django.contrib.admindocs',  
  132.     'common',  
  133.     'reader',  
  134. )  
  135.   
  136. # A sample logging configuration. The only tangible logging  
  137. # performed by this configuration is to send an email to  
  138. # the site admins on every HTTP 500 error when DEBUG=False.  
  139. # See http://docs.djangoproject.com/en/dev/topics/logging for  
  140. # more details on how to customize your logging configuration.  
  141. LOGGING = {  
  142.     'version'1,  
  143.     'disable_existing_loggers'False,  
  144.     'filters': {  
  145.         'require_debug_false': {  
  146.             '()''django.utils.log.RequireDebugFalse'  
  147.         }  
  148.     },  
  149.     'handlers': {  
  150.         'mail_admins': {  
  151.             'level''ERROR',  
  152.             'filters': ['require_debug_false'],  
  153.             'class''django.utils.log.AdminEmailHandler'  
  154.         }  
  155.     },  
  156.     'loggers': {  
  157.         'django.request': {  
  158.             'handlers': ['mail_admins'],  
  159.             'level''ERROR',  
  160.             'propagate'True,  
  161.         },  
  162.     }  
  163. }  
  164.   
  165. from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS  
  166. TEMPLATE_CONTEXT_PROCESSORS += (  
  167.     'django.core.context_processors.request',  
  168. )  
  169. </span>  


修改“library/library/urls.py”如下:

[python] view plaincopy
  1. <span style="font-size:18px;">from django.conf.urls import patterns, include, url  
  2. from django.conf import settings  
  3. from django.conf.urls.static import static  
  4.   
  5. # Uncomment the next two lines to enable the admin:  
  6. from django.contrib import admin  
  7. admin.autodiscover()  
  8.   
  9. urlpatterns = patterns('',  
  10.     # Examples:  
  11.     # url(r'^$', 'library.views.home', name='home'),  
  12.     # url(r'^library/', include('library.foo.urls')),  
  13.   
  14.     # Uncomment the admin/doc line below to enable admin documentation:  
  15.     # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),  
  16.   
  17.     # Uncomment the next line to enable the admin:  
  18.     # url(r'^admin/', include(admin.site.urls)),  
  19.     url(r'^$''common.views.index',name="index"),  
  20.     url(r'^common/', include('common.urls')),  
  21.     url(r'^reader/', include('reader.urls')),      
  22. )  
  23.   
  24. urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)  
  25. urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)</span>  

4. 新建主页

简单修改dwz的主页信息。

右键文件夹“templates”,新建文件夹“common”。

右键文件夹“common”,新建“index.html”,代码如下:

[html] view plaincopy
  1. <span style="font-size:18px;"><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml">  
  3. <head>  
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
  5. <meta http-equiv="X-UA-Compatible" content="IE=7" />  
  6. <title>图书管理系统</title>  
  7. {% load static %}  
  8. <link href="{% get_static_prefix %}js/dwz/themes/default/style.css" rel="stylesheet" type="text/css" />  
  9. <link href="{% get_static_prefix %}js/dwz/themes/css/core.css" rel="stylesheet" type="text/css" />  
  10. <link href="{% get_static_prefix %}js/dwz/themes/css/print.css" rel="stylesheet" type="text/css" />  
  11. <link href="{% get_static_prefix %}js/dwz/uploadify/css/uploadify.css" rel="stylesheet" type="text/css" />  
  12. <!--[if IE]>  
  13. <link href="{% get_static_prefix %}js/dwz/themes/css/ieHack.css" rel="stylesheet" type="text/css" />  
  14. <![endif]-->  
  15. <style type="text/css">  
  16.     #header{height:85px}  
  17.     #leftside, #container, #splitBar, #splitBarProxy{top:90px}  
  18. </style>  
  19.   
  20. <script src="{% get_static_prefix %}js/dwz/javascripts/speedup.js" type="text/javascript"></script>  
  21. <script src="{% get_static_prefix %}js/dwz/javascripts/jquery-1.7.1.js" type="text/javascript"></script>  
  22. <script src="{% get_static_prefix %}js/dwz/javascripts/jquery.cookie.js" type="text/javascript"></script>  
  23. <script src="{% get_static_prefix %}js/dwz/javascripts/jquery.validate.js" type="text/javascript"></script>  
  24. <script src="{% get_static_prefix %}js/dwz/javascripts/jquery.bgiframe.js" type="text/javascript"></script>  
  25.   
  26. <script src="{% get_static_prefix %}js/dwz/xheditor/xheditor-1.1.12-zh-cn.min.js" type="text/javascript"></script>  
  27. <script src="{% get_static_prefix %}js/dwz/uploadify/scripts/swfobject.js" type="text/javascript"></script>  
  28. <script src="{% get_static_prefix %}js/dwz/uploadify/scripts/jquery.uploadify.v2.1.0.js" type="text/javascript"></script>  
  29.   
  30.   
  31.   
  32. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.core.js" type="text/javascript"></script>  
  33. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.util.date.js" type="text/javascript"></script>  
  34. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.validate.method.js" type="text/javascript"></script>  
  35. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.regional.zh.js" type="text/javascript"></script>  
  36. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.barDrag.js" type="text/javascript"></script>  
  37. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.drag.js" type="text/javascript"></script>  
  38. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.tree.js" type="text/javascript"></script>  
  39. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.accordion.js" type="text/javascript"></script>  
  40. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.ui.js" type="text/javascript"></script>  
  41. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.theme.js" type="text/javascript"></script>  
  42. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.switchEnv.js" type="text/javascript"></script>  
  43. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.alertMsg.js" type="text/javascript"></script>  
  44. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.contextmenu.js" type="text/javascript"></script>  
  45. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.navTab.js" type="text/javascript"></script>  
  46. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.tab.js" type="text/javascript"></script>  
  47. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.resize.js" type="text/javascript"></script>  
  48. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.dialog.js" type="text/javascript"></script>  
  49. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.dialogDrag.js" type="text/javascript"></script>  
  50. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.sortDrag.js" type="text/javascript"></script>  
  51. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.cssTable.js" type="text/javascript"></script>  
  52. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.stable.js" type="text/javascript"></script>  
  53. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.taskBar.js" type="text/javascript"></script>  
  54. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.ajax.js" type="text/javascript"></script>  
  55. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.pagination.js" type="text/javascript"></script>  
  56. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.database.js" type="text/javascript"></script>  
  57. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.datepicker.js" type="text/javascript"></script>  
  58. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.effects.js" type="text/javascript"></script>  
  59. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.panel.js" type="text/javascript"></script>  
  60. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.checkbox.js" type="text/javascript"></script>  
  61. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.history.js" type="text/javascript"></script>  
  62. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.combox.js" type="text/javascript"></script>  
  63. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.print.js" type="text/javascript"></script>  
  64. <!-- 
  65. <script src="bin/dwz.min.js" type="text/javascript"></script> 
  66. -->  
  67. <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.regional.zh.js" type="text/javascript"></script>  
  68.   
  69.   
  70. <script type="text/javascript">  
  71. //标识dwz是否初始化  
  72. dwzinit = true;  
  73.   
  74. function fleshVerify(){  
  75.     //重载验证码  
  76.     $('#verifyImg').attr("src", '__APP__/Public/verify/'+new Date().getTime());  
  77. }  
  78. function dialogAjaxMenu(json){  
  79.     dialogAjaxDone(json);  
  80.     if (json.statusCode == DWZ.statusCode.ok){  
  81.         //$("#sidebar").loadUrl("__APP__/Public/menu");  
  82.     }  
  83. }  
  84. function navTabAjaxMenu(json){  
  85.     navTabAjaxDone(json);  
  86.     if (json.statusCode == DWZ.statusCode.ok){  
  87.         //$("#sidebar").loadUrl("__APP__/Public/menu");  
  88.     }  
  89. }  
  90. $(function(){  
  91.     DWZ.init("{% get_static_prefix %}js/dwz/dwz.frag.xml", {  
  92.         loginUrl:"login_dialog.html", loginTitle:"登录",  // 弹出登录对话框  
  93. //      loginUrl:"login.html",  // 跳到登录页面  
  94.         statusCode:{ok:200, error:300, timeout:301}, //【可选】  
  95.         pageInfo:{pageNum:"pageNum", numPerPage:"numPerPage", orderField:"orderField", orderDirection:"orderDirection"}, //【可选】  
  96.         debug:false,    // 调试模式 【true|false】  
  97.         callback:function(){  
  98.             initEnv();  
  99.             $("#themeList").theme({themeBase:"{% get_static_prefix %}js/dwz/themes"}); // themeBase 相对于index页面的主题base路径  
  100.             //$("#sidebar").loadUrl("__APP__/Public/menu");  
  101.                         //initUI();  
  102.         }  
  103.     });  
  104. });  
  105.   
  106.   
  107. //清理浏览器内存,只对IE起效,FF不需要  
  108. if ($.browser.msie) {  
  109.     window.setInterval("CollectGarbage();", 10000);  
  110. }  
  111.   
  112.   
  113. //新加处理ajax提交表单的处理方式  
  114. jQuery(document).ajaxSend(function(event, xhr, settings) {  
  115.     function getCookie(name) {  
  116.         var cookieValue = null;  
  117.         if (document.cookie && document.cookie != '') {  
  118.             var cookies = document.cookie.split(';');  
  119.             for (var i = 0; i < cookies.length; i++) {  
  120.                 var cookie = jQuery.trim(cookies[i]);  
  121.                 // Does this cookie string begin with the name we want?  
  122.                 if (cookie.substring(0, name.length + 1) == (name + '=')) {  
  123.                     cookieValue = decodeURIComponent(cookie.substring(name.length + 1));  
  124.                     break;  
  125.                 }  
  126.             }  
  127.         }  
  128.         return cookieValue;  
  129.     }  
  130.     function sameOrigin(url) {  
  131.         // url could be relative or scheme relative or absolute  
  132.         var host = document.location.host; // host + port  
  133.         var protocol = document.location.protocol;  
  134.         var sr_origin = '//' + host;  
  135.         var origin = protocol + sr_origin;  
  136.         // Allow absolute or scheme relative URLs to same origin  
  137.         return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||  
  138.             (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||  
  139.             // or any other URL that isn't scheme relative or absolute i.e relative.  
  140.             !(/^(\/\/|http:|https:).*/.test(url));  
  141.     }  
  142.     function safeMethod(method) {  
  143.         return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));  
  144.     }  
  145.   
  146.     if (!safeMethod(settings.type) && sameOrigin(settings.url)) {  
  147.         xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));  
  148.     }  
  149. });  
  150.   
  151.   
  152. </script>  
  153. </head>  
  154.   
  155.   
  156.   
  157. <body scroll="no">  
  158.     <div id="layout">  
  159.         <div id="header">  
  160.             <div class="headerNav">  
  161.                 <!-- <a class="logo" href="{$Think.config.bbsurl}">Logo</a> -->  
  162.   
  163.                 <ul class="themeList" id="themeList">  
  164.                     <li theme="default"><div class="selected">蓝色</div></li>  
  165.                     <li theme="green"><div>绿色</div></li>  
  166.                 </ul>  
  167.             </div>  
  168.               
  169.             <div id="navMenu">  
  170.                 <ul>  
  171.                     <li class="selected"><a href="{% url common_index %}"><span>首页</span></a></li>  
  172.                     <li><a href="{% url common_reader %}"><span>借阅人管理</span></a></li>  
  173.                 </ul>  
  174.             </div>  
  175.               
  176.         </div>  
  177.   
  178.         <div id="leftside">  
  179.             <div id="sidebar_s">  
  180.                 <div class="collapse">  
  181.                     <div class="toggleCollapse"><div></div></div>  
  182.                 </div>  
  183.             </div>  
  184.             <div id="sidebar">  
  185.                 <div class="toggleCollapse"><h2>主菜单</h2><div>收缩</div></div>  
  186.   
  187.                 <div class="accordion" fillSpace="sidebar">  
  188.                     <div class="accordionHeader">  
  189.                         <h2><span>Folder</span>系统管理</h2>  
  190.                     </div>  
  191.                     <div class="accordionContent">  
  192.                         <ul class="tree treeFolder expand">  
  193.                             <li><a>常用操作</a>  
  194.                                 <ul>  
  195.                                     <li><a class="add" href="{% url readers_add %}" target="dialog" mask="true" width="600" height="400" title="添加借阅人" rel="addreader"><span>添加借阅人</span></a></li>  
  196.                                 </ul>  
  197.                             </li>  
  198.                               
  199.                             <li><a>系统操作</a>  
  200.                                 <ul>  
  201.                                     <li><a href="{% url readers_index %}" target="navTab" rel="readerindex" title="借阅人管理">借阅人管理</a></li>  
  202.                                 </ul>  
  203.                             </li>  
  204.                                           
  205.                         </ul>  
  206.                     </div>  
  207.                 </div>  
  208.   
  209.             </div>  
  210.         </div>  
  211.         <div id="container">  
  212.             <div id="navTab" class="tabsPage">  
  213.                 <div class="tabsPageHeader">  
  214.                     <div class="tabsPageHeaderContent"><!-- 显示左右控制时添加 class="tabsPageHeaderMargin" -->  
  215.                         <ul class="navTab-tab">  
  216.                             <li tabid="main" class="main"><a href="javascript:;"><span><span class="home_icon">我的主页</span></span></a></li>  
  217.                         </ul>  
  218.                     </div>  
  219.                     <div class="tabsLeft">left</div><!-- 禁用只需要添加一个样式 class="tabsLeft tabsLeftDisabled" -->  
  220.                     <div class="tabsRight">right</div><!-- 禁用只需要添加一个样式 class="tabsRight tabsRightDisabled" -->  
  221.                     <div class="tabsMore">more</div>  
  222.                 </div>  
  223.                 <ul class="tabsMoreList">  
  224.                     <li><a href="javascript:;">我的主页</a></li>  
  225.                 </ul>  
  226.                 <div class="navTab-panel tabsPageContent layoutBox">  
  227.                     <div class="page unitBox">  
  228.                         <div class="accountInfo">  
  229.                             <p><span>这是一个简单的图书管理程序</span></p>  
  230.                         </div>  
  231.                         <div class="pageFormContent" layoutH="80">  
  232.                             <iframe width="100%" class="share_self"  frameborder="0" scrolling="no" src=""></iframe>  
  233.                         </div>  
  234.                     </div>  
  235.                       
  236.                 </div>  
  237.             </div>  
  238.         </div>  
  239.   
  240.     </div>  
  241.   
  242. </body>  
  243. </html>  
  244. </span>  

新建“nav_index.html”,代码如下:

[html] view plaincopy
  1. <span style="font-size:18px;"><div class="accordion" fillSpace="sidebar">  
  2.     <div class="accordionHeader">  
  3.         <h2><span>Folder</span>图书管理</h2>  
  4.     </div>  
  5.     <div class="accordionContent">  
  6.         <ul class="tree treeFolder expand">  
  7.             <li><a>常用操作</a>  
  8.                 <ul>  
  9.                     <li><a class="add" href="{% url books_add %}" target="dialog" mask="true" width="600" height="400" title="添加图书" rel="addequipment"><span>添加图书</span></a></li>  
  10.                     <li><a class="add" href="{% url readers_add %}" target="dialog" mask="true" width="600" height="400" title="添加借阅人" rel="addrack"><span>添加借阅人</span></a></li>  
  11.                 </ul>  
  12.             </li>  
  13.                               
  14.             <li><a>图书管理管理</a>  
  15.                 <ul>  
  16.                     <li><a href="{% url books_index %}" target="navTab" rel="bookindex" title="图书管理">图书管理</a></li>  
  17.                     <li><a href="{% url readers_index %}" target="navTab" rel="readerindex" title="借阅人管理">借阅人管理</a></li>  
  18.                 </ul>  
  19.             </li>                   
  20.         </ul>  
  21.     </div>  
  22. </div></span>  

新建“nav_reader.html”,代码如下:

[html] view plaincopy
  1. <span style="font-size:18px;"><script type="text/javascript">  
  2.     navTab.openTab("readerindex", "{% url readers_index %}", {title:"借阅人管理"});  
  3. </script>  
  4. <div class="accordion" fillSpace="sidebar">  
  5.     <div class="accordionHeader">  
  6.         <h2><span>Folder</span>系统管理</h2>  
  7.     </div>  
  8.     <div class="accordionContent">  
  9.         <ul class="tree treeFolder expand">  
  10.             <li><a>常用操作</a>  
  11.                 <ul>  
  12.                     <li><a class="add" href="{% url books_add %}" target="dialog" mask="true" width="600" height="400" title="添加图书" rel="addbook"><span>添加图书</span></a></li>  
  13.                     <li><a class="add" href="{% url readers_add %}" target="dialog" mask="true" width="600" height="400" title="添加借阅人" rel="addreader"><span>添加借阅人</span></a></li>  
  14.                 </ul>  
  15.             </li>  
  16.           
  17.             <li><a>借阅人管理</a>  
  18.                 <ul>  
  19.                     <li><a href="{% url readers_index %}" target="navTab" rel="readerindex" title="借阅人管理">借阅人管理</a></li>  
  20.                 </ul>  
  21.             </li>  
  22.                       
  23.         </ul>  
  24.     </div>  
  25. </div></span>  

5. 目录结构

到目前为止,一个只有借阅人操作的可以使用的程序写好了,目录结构如下:



6. 新建数据表

右键项目名称“library”,点击,点击同步数据库。如下图所示:


一般对“models”修改后都需要同步数据库。操作时先删除需改动的数据表,再同步数据库。


7. 运行

点击的小三角,点击,如下图所示:



添加参数“runserver 8081 --noreload”,点击“run”,运行程序,如下图所示:


其中,“8081”为访问端口。

如下图所示提示信息表示运行成功。



打开浏览器,输入“http://127.0.0.1:8081”,回车,就可以看到程序的主页,如下图所示:


添加:

借阅人管理:

原创粉丝点击