基于python的图书管理系统设计与实现,python课程设计图书管理系统_1

  基于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 path

  from 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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: