基于python的图书管理系统设计与实现,python课程设计图书管理系统
本文主要详细介绍Python的简单图书馆管理系统。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享Python实现简单图书管理系统的具体代码,供大家参考。具体内容如下
首先,展示图书管理系统的首页:
这是图书管理系统的发行图书页面:
最后,图书管理系统的图书详情页是图书已被删除的管理页面。
图书管理系统是为实习阶段制作的,可以实现查询图书明细、添加图书、删除图书等功能。附上以下源代码:
views.py文件中的代码如下:
从django.shortcuts导入渲染,重定向,反转
从django.db导入连接
#因为cursor对象将在下面的视图函数中使用,所以在这里它被定义为一个函数。
def get_cursor():
返回connection.cursor()
定义索引(请求):
cursor=get_cursor()
cursor . execute( select * from db01 )
books=cursor.fetchall()
# books此时是一个包含多个元组的元组。
#打印以查看
#打印(书籍)
# ((1,《三国演义》,《罗贯中》),(2,《西游记》,《罗贯中》),(3,《水浒传》,《施耐庵》))
#此时,如果我们想在浏览器中显示它,我们必须将它传递给DTL模板。
#可以直接获取tuple并在render()函数中将其传递给参数context,无需定义中间变量context,
#例如,在这种情况下,定义了一个中间变量。
# context={
# 书籍 :书籍
# }
#下面我们将把获得的元组直接传递给render()函数。
return render(request, index.html ,context={books:books})
def add_book(请求):
#因为“过帐请求”用于在DTL模板中提交数据,所以有必要首先确定提交数据的方式。
#如果作为get请求提交,会直接返回到已发布图书的视图;否则,数据将被添加到数据库表中。
#一定要注意:这里的get必须是提交方法GET。它不是函数GET()
#否则会造成每次点击“出书”都会增加一条数据信息,都是无,无。
if request.method==GET:
return render(请求, add_book.html )
else:
名称=请求。POST.get(name )
作者=请求。POST.get(作者)
cursor=get_cursor()
#当获取name,author时,因为数据库中的两种类型都是字符串类型,
#所以在这里,你需要用单引号把它括起来,执行下面的语句把数据插入数据库。
cursor . execute( insert into db01(id,name,author)值(null, %s , %s) % (name,author))
#回到首页,可以使用重定向,可以反转查看功能的url名称。
返回重定向(反向( index ))
定义book_detail(请求,book_id):
cursor=get_cursor()
#将提交的数据与数据库中的id进行比较,如果匹配,将返回一个元组。
#(根据id的唯一性,只返回一个元组)
#此处仅获取名称、属性字段的信息。
cursor.execute(select id,name,author from db01,其中id=%s % book_id )
#可以用fetchone()来获取。
book=cursor.fetchone()
#得到这本书的元组后,就可以渲染到模板里了。
return render(request,book_detail.html,context={book:book})
def del_book(request):
# 判断提交数据的方式是否是post请求
if request.method == "POST":
# 使用POST方式获取图书的book_id,
book_id = request.POST.get(book_id)
# 将获取的图书的book_id与数据库中的id信息进行比较
cursor = get_cursor()
# 注意:此处删除的信息不能写明属性,否者的话,会提交数据不成功。
# cursor.execute("delete id,name,author from db01 where id = %s" % book_id)
cursor.execute("delete from db01 where id=%s" % book_id)
return redirect(reverse(index))
else:
raise RuntimeError("提交数据的方式不是post请求")
因为各个页面的header部分都是相同的。所以在这里采用模板继承的方式,进行实现模板结构的优化。
其中父模板base.html代码如下:
<!DOCTYPE html><html lang="en">
<head>
<meta charset="UTF-8">
<title>图书管理系统</title>
<link rel="stylesheet" href="{% static index.css %}">
</head>
<body>
<header>
<nav>
<ul class="nav">
<li><a href="/">首页</a></li>
<li><a href="{% url add %}">发布图书</a></li>
</ul>
</nav>
</header>
{% block content %}
{% endblock %}
<footer>
</footer>
</body>
</html>
首页index.html模板中代码如下:
{% extends base.html %}{% block content %}
<table>
<thead>
<tr>
<th>序号</th>
<th>书名</th>
<th>作者</th>
</tr>
</thead>
<tbody>
{% for book in books %}
<tr>
<td>{{ forloop.counter }}</td>
<td><a href="{% url detail book_id=book.0 %}">{{ book.1 }}</a></td>
<td>{{ book.2 }}</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
发布图书模板add_book.html中的代码如下:
{% extends base.html %}{% block content %}
{# 其中,这个action表示的当前的这个表单内容,你要提交给那个视图进行接收,#}
{# 在这里我们提交给当前视图add_book()进行处理数据,就不用写了 #}
{# 而method方法是采用哪种方式进行提交表单数据,常用的有get,post,在这里采用post请求。 #}
<form action="" method="post">
<table>
<tr>
<td>书名:</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>作者:</td>
<td><input type="text" name="author"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="提交" name="sub"></td>
</tr>
</table>
</form>
{% endblock %}
在urls.py中视图函数与url进行适当的映射:
from django.urls import pathfrom front import views
urlpatterns = [
path(, views.index, name = index),
path(add/, views.add_book, name = add),
path(book/detail/<int:book_id>/, views.book_detail, name = detail),
path(book/del/,views.del_book, name = del),
]
并且需要注意的是:在settings.py文件中需要关闭csrf的验证。
MIDDLEWARE = [django.middleware.security.SecurityMiddleware,
django.contrib.sessions.middleware.SessionMiddleware,
django.middleware.common.CommonMiddleware,
# django.middleware.csrf.CsrfViewMiddleware,
django.contrib.auth.middleware.AuthenticationMiddleware,
django.contrib.messages.middleware.MessageMiddleware,
django.middleware.clickjacking.XFrameOptionsMiddleware,
]
并且在settings.py文件中,添加加载静态文件的路径变量
STATICFILES_DIRS = [os.path.join(BASE_DIR,static)
]
并且设置pycharm与mysql数据库连接的信息:
DATABASES = {default: {
ENGINE: django.db.backends.mysql,
NAME: db01,
USERNAME: root,
PASSWORD: root,
HOST: 127.0.0.1,
PORT: 3306
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。