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”,代码如下:
- #!usr/bin/env python
- #coding: utf-8
- '''''
- Created on 2012-8-3
- @author: jingwen.wu
- '''
- from django.shortcuts import render_to_response,get_object_or_404
- from django.template import RequestContext
- from django.http import HttpResponseRedirect
- from django.core.urlresolvers import reverse
- from django.contrib.auth.decorators import login_required
- def index(request):
- return render_to_response('common/index.html', context_instance=RequestContext(request))
- def nav_index(request):
- return render_to_response('common/nav_index.html', {}, context_instance=RequestContext(request))
- def nav_reader(request):
- return render_to_response('common/nav_reader.html', {}, context_instance=RequestContext(request))
2.2. 新建“urls.py”
右键包名“common”,新建“urls.py”,代码如下:- #!usr/bin/env python
- #coding: utf-8
- '''''
- Created on 2012-8-3
- @author: jingwen.wu
- '''
- from django.conf.urls.defaults import *
- from django.conf import settings
- urlpatterns = patterns('',
- url(r'^$', 'common.views.index',name="index"),
- url(r'^nav_index/$', 'common.views.nav_index', name="common_index"),
- url(r'^nav_reader/$', 'common.views.nav_reader', name="common_reader"),
- )
2.3. 新建过滤器
右键包名“common”,新建包“templatetags”,右键“templatetags”,新建“common_tags.py”,代码如下:- <span style="font-size:18px;">#!usr/bin/env python
- #coding: utf-8
- from django import template
- register = template.Library()
- @register.filter(name='calculate')
- def calculate(value, arg):
- return (int(arg)-1)*10 + int(value)
- </span>
其中,“currentPage”为当前页码。
3. 设置“library” 的“setting”和“urls”
修改“library/library/setting.py”如下:
- <span style="font-size:18px;"># Django settings for library project.
- import os.path
- DEBUG = True
- TEMPLATE_DEBUG = DEBUG
- HERE = os.path.dirname(os.path.dirname(__file__))
- ADMINS = (
- # ('Your Name', 'your_email@example.com'),
- )
- MANAGERS = ADMINS
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
- 'NAME': 'library', # Or path to database file if using sqlite3.
- 'USER': 'root', # Not used with sqlite3.
- 'PASSWORD': 'mysql', # Not used with sqlite3.
- 'HOST': 'localhost', # Set to empty string for localhost. Not used with sqlite3.
- 'PORT': '3306', # Set to empty string for default. Not used with sqlite3.
- }
- }
- # Local time zone for this installation. Choices can be found here:
- # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
- # although not all choices may be available on all operating systems.
- # On Unix systems, a value of None will cause Django to use the same
- # timezone as the operating system.
- # If running in a Windows environment this must be set to the same as your
- # system time zone.
- TIME_ZONE = 'Asia/Shanghai'
- # Language code for this installation. All choices can be found here:
- # http://www.i18nguy.com/unicode/language-identifiers.html
- LANGUAGE_CODE = 'zh-cn'
- SITE_ID = 1
- # If you set this to False, Django will make some optimizations so as not
- # to load the internationalization machinery.
- USE_I18N = True
- # If you set this to False, Django will not format dates, numbers and
- # calendars according to the current locale.
- USE_L10N = True
- # If you set this to False, Django will not use timezone-aware datetimes.
- USE_TZ = True
- # Absolute filesystem path to the directory that will hold user-uploaded files.
- # Example: "/home/media/media.lawrence.com/media/"
- MEDIA_ROOT = os.path.join(HERE, 'media').replace('\\','/')
- # URL that handles the media served from MEDIA_ROOT. Make sure to use a
- # trailing slash.
- # Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
- MEDIA_URL = '/media/'
- # Absolute path to the directory static files should be collected to.
- # Don't put anything in this directory yourself; store your static files
- # in apps' "static/" subdirectories and in STATICFILES_DIRS.
- # Example: "/home/media/media.lawrence.com/static/"
- STATIC_ROOT = os.path.join(HERE, 'static').replace('\\','/')
- # URL prefix for static files.
- # Example: "http://media.lawrence.com/static/"
- STATIC_URL = '/static/'
- ADMIN_MEDIA_ROOT = '/static/admin/'
- # Additional locations of static files
- STATICFILES_DIRS = (
- # Put strings here, like "/home/html/static" or "C:/www/django/static".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
- os.path.join(HERE,'static/static/').replace('\\','/'),
- )
- # List of finder classes that know how to find static files in
- # various locations.
- STATICFILES_FINDERS = (
- 'django.contrib.staticfiles.finders.FileSystemFinder',
- 'django.contrib.staticfiles.finders.AppDirectoriesFinder',
- # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
- )
- # Make this unique, and don't share it with anybody.
- SECRET_KEY = 'jlf4edatvxmm$*o)mfi=1cz_(vr21+32w(ak8_yac4*mxl8g%a'
- # List of callables that know how to import templates from various sources.
- TEMPLATE_LOADERS = (
- 'django.template.loaders.filesystem.Loader',
- 'django.template.loaders.app_directories.Loader',
- # 'django.template.loaders.eggs.Loader',
- )
- MIDDLEWARE_CLASSES = (
- 'django.middleware.common.CommonMiddleware',
- 'django.contrib.sessions.middleware.SessionMiddleware',
- 'django.middleware.csrf.CsrfViewMiddleware',
- 'django.contrib.auth.middleware.AuthenticationMiddleware',
- 'django.contrib.messages.middleware.MessageMiddleware',
- # Uncomment the next line for simple clickjacking protection:
- # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
- )
- ROOT_URLCONF = 'library.urls'
- # Python dotted path to the WSGI application used by Django's runserver.
- WSGI_APPLICATION = 'library.wsgi.application'
- TEMPLATE_DIRS = (
- # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
- # Always use forward slashes, even on Windows.
- # Don't forget to use absolute paths, not relative paths.
- os.path.join(HERE,'templates'),
- )
- INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- 'django.contrib.messages',
- 'django.contrib.staticfiles',
- # Uncomment the next line to enable the admin:
- # 'django.contrib.admin',
- # Uncomment the next line to enable admin documentation:
- # 'django.contrib.admindocs',
- 'common',
- 'reader',
- )
- # A sample logging configuration. The only tangible logging
- # performed by this configuration is to send an email to
- # the site admins on every HTTP 500 error when DEBUG=False.
- # See http://docs.djangoproject.com/en/dev/topics/logging for
- # more details on how to customize your logging configuration.
- LOGGING = {
- 'version': 1,
- 'disable_existing_loggers': False,
- 'filters': {
- 'require_debug_false': {
- '()': 'django.utils.log.RequireDebugFalse'
- }
- },
- 'handlers': {
- 'mail_admins': {
- 'level': 'ERROR',
- 'filters': ['require_debug_false'],
- 'class': 'django.utils.log.AdminEmailHandler'
- }
- },
- 'loggers': {
- 'django.request': {
- 'handlers': ['mail_admins'],
- 'level': 'ERROR',
- 'propagate': True,
- },
- }
- }
- from django.conf.global_settings import TEMPLATE_CONTEXT_PROCESSORS
- TEMPLATE_CONTEXT_PROCESSORS += (
- 'django.core.context_processors.request',
- )
- </span>
- <span style="font-size:18px;">from django.conf.urls import patterns, include, url
- from django.conf import settings
- from django.conf.urls.static import static
- # Uncomment the next two lines to enable the admin:
- from django.contrib import admin
- admin.autodiscover()
- urlpatterns = patterns('',
- # Examples:
- # url(r'^$', 'library.views.home', name='home'),
- # url(r'^library/', include('library.foo.urls')),
- # Uncomment the admin/doc line below to enable admin documentation:
- # url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
- # Uncomment the next line to enable the admin:
- # url(r'^admin/', include(admin.site.urls)),
- url(r'^$', 'common.views.index',name="index"),
- url(r'^common/', include('common.urls')),
- url(r'^reader/', include('reader.urls')),
- )
- urlpatterns += static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
- urlpatterns += static(settings.STATIC_URL, document_root = settings.STATIC_ROOT)</span>
4. 新建主页
简单修改dwz的主页信息。
右键文件夹“templates”,新建文件夹“common”。
右键文件夹“common”,新建“index.html”,代码如下:
- <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">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <meta http-equiv="X-UA-Compatible" content="IE=7" />
- <title>图书管理系统</title>
- {% load static %}
- <link href="{% get_static_prefix %}js/dwz/themes/default/style.css" rel="stylesheet" type="text/css" />
- <link href="{% get_static_prefix %}js/dwz/themes/css/core.css" rel="stylesheet" type="text/css" />
- <link href="{% get_static_prefix %}js/dwz/themes/css/print.css" rel="stylesheet" type="text/css" />
- <link href="{% get_static_prefix %}js/dwz/uploadify/css/uploadify.css" rel="stylesheet" type="text/css" />
- <!--[if IE]>
- <link href="{% get_static_prefix %}js/dwz/themes/css/ieHack.css" rel="stylesheet" type="text/css" />
- <![endif]-->
- <style type="text/css">
- #header{height:85px}
- #leftside, #container, #splitBar, #splitBarProxy{top:90px}
- </style>
- <script src="{% get_static_prefix %}js/dwz/javascripts/speedup.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/jquery-1.7.1.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/jquery.cookie.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/jquery.validate.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/jquery.bgiframe.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/xheditor/xheditor-1.1.12-zh-cn.min.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/uploadify/scripts/swfobject.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/uploadify/scripts/jquery.uploadify.v2.1.0.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.core.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.util.date.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.validate.method.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.regional.zh.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.barDrag.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.drag.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.tree.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.accordion.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.ui.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.theme.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.switchEnv.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.alertMsg.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.contextmenu.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.navTab.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.tab.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.resize.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.dialog.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.dialogDrag.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.sortDrag.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.cssTable.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.stable.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.taskBar.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.ajax.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.pagination.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.database.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.datepicker.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.effects.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.panel.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.checkbox.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.history.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.combox.js" type="text/javascript"></script>
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.print.js" type="text/javascript"></script>
- <!--
- <script src="bin/dwz.min.js" type="text/javascript"></script>
- -->
- <script src="{% get_static_prefix %}js/dwz/javascripts/dwz.regional.zh.js" type="text/javascript"></script>
- <script type="text/javascript">
- //标识dwz是否初始化
- dwzinit = true;
- function fleshVerify(){
- //重载验证码
- $('#verifyImg').attr("src", '__APP__/Public/verify/'+new Date().getTime());
- }
- function dialogAjaxMenu(json){
- dialogAjaxDone(json);
- if (json.statusCode == DWZ.statusCode.ok){
- //$("#sidebar").loadUrl("__APP__/Public/menu");
- }
- }
- function navTabAjaxMenu(json){
- navTabAjaxDone(json);
- if (json.statusCode == DWZ.statusCode.ok){
- //$("#sidebar").loadUrl("__APP__/Public/menu");
- }
- }
- $(function(){
- DWZ.init("{% get_static_prefix %}js/dwz/dwz.frag.xml", {
- loginUrl:"login_dialog.html", loginTitle:"登录", // 弹出登录对话框
- // loginUrl:"login.html", // 跳到登录页面
- statusCode:{ok:200, error:300, timeout:301}, //【可选】
- pageInfo:{pageNum:"pageNum", numPerPage:"numPerPage", orderField:"orderField", orderDirection:"orderDirection"}, //【可选】
- debug:false, // 调试模式 【true|false】
- callback:function(){
- initEnv();
- $("#themeList").theme({themeBase:"{% get_static_prefix %}js/dwz/themes"}); // themeBase 相对于index页面的主题base路径
- //$("#sidebar").loadUrl("__APP__/Public/menu");
- //initUI();
- }
- });
- });
- //清理浏览器内存,只对IE起效,FF不需要
- if ($.browser.msie) {
- window.setInterval("CollectGarbage();", 10000);
- }
- //新加处理ajax提交表单的处理方式
- jQuery(document).ajaxSend(function(event, xhr, settings) {
- function getCookie(name) {
- var cookieValue = null;
- if (document.cookie && document.cookie != '') {
- var cookies = document.cookie.split(';');
- for (var i = 0; i < cookies.length; i++) {
- var cookie = jQuery.trim(cookies[i]);
- // Does this cookie string begin with the name we want?
- if (cookie.substring(0, name.length + 1) == (name + '=')) {
- cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
- break;
- }
- }
- }
- return cookieValue;
- }
- function sameOrigin(url) {
- // url could be relative or scheme relative or absolute
- var host = document.location.host; // host + port
- var protocol = document.location.protocol;
- var sr_origin = '//' + host;
- var origin = protocol + sr_origin;
- // Allow absolute or scheme relative URLs to same origin
- return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
- (url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
- // or any other URL that isn't scheme relative or absolute i.e relative.
- !(/^(\/\/|http:|https:).*/.test(url));
- }
- function safeMethod(method) {
- return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
- }
- if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
- xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
- }
- });
- </script>
- </head>
- <body scroll="no">
- <div id="layout">
- <div id="header">
- <div class="headerNav">
- <!-- <a class="logo" href="{$Think.config.bbsurl}">Logo</a> -->
- <ul class="themeList" id="themeList">
- <li theme="default"><div class="selected">蓝色</div></li>
- <li theme="green"><div>绿色</div></li>
- </ul>
- </div>
- <div id="navMenu">
- <ul>
- <li class="selected"><a href="{% url common_index %}"><span>首页</span></a></li>
- <li><a href="{% url common_reader %}"><span>借阅人管理</span></a></li>
- </ul>
- </div>
- </div>
- <div id="leftside">
- <div id="sidebar_s">
- <div class="collapse">
- <div class="toggleCollapse"><div></div></div>
- </div>
- </div>
- <div id="sidebar">
- <div class="toggleCollapse"><h2>主菜单</h2><div>收缩</div></div>
- <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 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 readers_index %}" target="navTab" rel="readerindex" title="借阅人管理">借阅人管理</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div>
- </div>
- </div>
- <div id="container">
- <div id="navTab" class="tabsPage">
- <div class="tabsPageHeader">
- <div class="tabsPageHeaderContent"><!-- 显示左右控制时添加 class="tabsPageHeaderMargin" -->
- <ul class="navTab-tab">
- <li tabid="main" class="main"><a href="javascript:;"><span><span class="home_icon">我的主页</span></span></a></li>
- </ul>
- </div>
- <div class="tabsLeft">left</div><!-- 禁用只需要添加一个样式 class="tabsLeft tabsLeftDisabled" -->
- <div class="tabsRight">right</div><!-- 禁用只需要添加一个样式 class="tabsRight tabsRightDisabled" -->
- <div class="tabsMore">more</div>
- </div>
- <ul class="tabsMoreList">
- <li><a href="javascript:;">我的主页</a></li>
- </ul>
- <div class="navTab-panel tabsPageContent layoutBox">
- <div class="page unitBox">
- <div class="accountInfo">
- <p><span>这是一个简单的图书管理程序</span></p>
- </div>
- <div class="pageFormContent" layoutH="80">
- <iframe width="100%" class="share_self" frameborder="0" scrolling="no" src=""></iframe>
- </div>
- </div>
- </div>
- </div>
- </div>
- </div>
- </body>
- </html>
- </span>
新建“nav_index.html”,代码如下:
- <span style="font-size:18px;"><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="addequipment"><span>添加图书</span></a></li>
- <li><a class="add" href="{% url readers_add %}" target="dialog" mask="true" width="600" height="400" title="添加借阅人" rel="addrack"><span>添加借阅人</span></a></li>
- </ul>
- </li>
- <li><a>图书管理管理</a>
- <ul>
- <li><a href="{% url books_index %}" target="navTab" rel="bookindex" title="图书管理">图书管理</a></li>
- <li><a href="{% url readers_index %}" target="navTab" rel="readerindex" title="借阅人管理">借阅人管理</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div></span>
新建“nav_reader.html”,代码如下:
- <span style="font-size:18px;"><script type="text/javascript">
- navTab.openTab("readerindex", "{% url readers_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 readers_index %}" target="navTab" rel="readerindex" title="借阅人管理">借阅人管理</a></li>
- </ul>
- </li>
- </ul>
- </div>
- </div></span>
5. 目录结构
到目前为止,一个只有借阅人操作的可以使用的程序写好了,目录结构如下:
6. 新建数据表
右键项目名称“library”,点击,点击同步数据库。如下图所示:
一般对“models”修改后都需要同步数据库。操作时先删除需改动的数据表,再同步数据库。
7. 运行
点击的小三角,点击,如下图所示:
添加参数“runserver 8081 --noreload”,点击“run”,运行程序,如下图所示:
其中,“8081”为访问端口。
如下图所示提示信息表示运行成功。
打开浏览器,输入“http://127.0.0.1:8081”,回车,就可以看到程序的主页,如下图所示:
添加:
借阅人管理:
- Django 一个简单的图书管理程序 (三 展示)
- Django 一个简单的图书管理程序(一建立项目)
- Django 一个简单的图书管理程序(四 编写图书管理)
- Django 一个简单的图书管理程序(二编写借阅人管理)
- Django 一个简单的图书管理程序(五 通过查询添加借阅人)
- Django 一个简单的图书管理程序(六 添加CSV文件导入导出操作)
- 图书管理程序(三)
- 一个简单的文件管理程序
- 图书管理程序(二)
- 图书管理程序(一)
- 简单Java图书管理程序(只实现了界面的显示)
- 一个程序下载的管理程序(三)
- 一个简单的学生成绩管理程序
- 一个简单的CD唱片管理程序
- pyqt一个简单的计划管理程序
- 图书管理程序
- 图书管理程序
- 一个简单的学生成绩管理程序(二叉树实现)
- android技巧:把自己的app变成手机系统自带的app[/system/app]
- Java当中的IO(二)
- Spring3.x JSR-303
- frameset
- MySql计算百分比
- Django 一个简单的图书管理程序 (三 展示)
- CentOS安装中文支持(linux中文文件名乱码)
- 各种流媒体服务器的区别
- C#捕获未处理异常
- python之解释性语言
- LNK ERROR 2005
- 数字接口系列文章:SPI 总线
- Android 使用Webview无法播放视频问题的解决办法
- SetWindowExtEx