Django---简易图书管理系统(BS架构)

mac2022-06-30  54

Django---简易图书管理系统

一丶配置

创建app01

# 1.在具有manage.py文件的目录下,启动cmd,创建一个新的app01 python manage.py startapp app01 # 2.在settings配置文件中对 app01进行注册 INSTALLED_APPS=[ 'app01.apps.App01Config', ] # 额外:创建整个项目时,创建新的app,pycharm会默认帮你注册 . 若是cmd创建,需要手动注册

静态文件配置:

# settings文件,配置静态资源 STATIC_URL = '/static/' # 固定写法: 映射关系,从项目中引入静态资源是通过/static/开头 STATICFILES_DIRS=[ # 固定写法: 项目文件夹下创建一个static文件夹'存放'静态资源. os.path.join(BASE_DIR,'static') ]

数据库配置:

# settings文件,配置数据库 (使用的是mysql数据库,库需要先创建好) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # 数据库引擎 'NAME': 'day55_bookmgsystec', # 数据库名 'USER': 'XXX', # 用户 'PASSWORD': 'XXX', # 密码 'HOST': '127.0.0.1', # ip地址 'PORT': 3306, # 端口 } } # 由于使用的是mysql数据库.python3需要使用pymysql去连接数据库.默认提供的数据库连接不支持mysql # 1.在与项目同名的文件夹下 ,找到__init__.py文件 # 2.编写连接代码 import pymysql pymysql.install_as_MySQLdb() # 连接mysql数据库

额外:

# 在settings文件中找到下面的句子注释掉. post提交数据时需要进行校验 'django.middleware.csrf.CsrfViewMiddleware',

二丶数据库编写

使用orm操作数据库:

# 1.找到app01下的 models.py文件. 创建表和字段 class Pub(models.Model): # Pub 类名 等同于 表名 pid=models.AutoField(primary_key=True) # pid 类的属性 等同于 表的字段(AutoFiled:自增) pname=models.CharField(max_length=32,unique=True) # pname 同理

数据迁移

# 1.在models.py文件已经编写好了表的信息. 需要把信息同步到数据库 # 2.启动Terminal窗口执行两条命令 # 检查models.py文件是否进行了变更,并记录.会在migrations文件夹下创建一个变更记录文件 python manage.py makemigrations # 将在migrations文件夹下创建一个变更记录文件,同步到数据库 python manage.py migrate

三丶路由关系

查看

# 1.在url.py穿件一个请求和函数的对应关系 from django.conf.urls import url from django.contrib import admin from app01 import views # 导入app01 urlpatterns = [ url(r'^publisher_list/', views.publisher_list), ] # 2.在app01下的views.py文件中编写函数 from app01 import models # 导入 models文件,使用orm操作数据库 # 查询列表 def publisher_list(request): # 查询全部的内容, 按照pid排序 all_pub = models.Pub.objects.all().order_by('pid') # 返回一个页面,并把数据传到页面 return render(request, 'publisher_list.html', {'all_pub': all_pub}) <!-- publisher_list.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> table, h1 { text-align: center; } button { position: absolute; top: 60px; left: 520px; } </style> </head> <body> <h1>图书管理系统</h1> <button>添加</button> <table border="1px" width="500px" align="center"> <thead> <tr> <th>序号</th> <th>编号</th> <th>出版社名称</th> <th>操作</th> </tr> </thead> <tbody> <!-- 使用模版语言:把传过来的数据 进行解析,展示 {{变量}} --> {% for pub in all_pub %} <tr> <td>{{ forloop.counter }}</td> <td>{{ pub.pid }}</td> <td>{{ pub.pname }}</td> <td> <a href="/publisher_edit?pk={{ pub.pk }}">编辑</a> | <a href="/publisher_del?pk={{ pub.pk }}">删除</a> </td> </tr> {% endfor %} </tbody> </table> <script> window.onload= function () { var tag=document.getElementsByTagName('button')[0] tag.onclick=function () { location.href='/publisher_add' //添加按钮跳转到添加页面 } } </script> </body> </html>

增加

# 1.在url.py穿件一个请求和函数的对应关系 from django.conf.urls import url from django.contrib import admin from app01 import views # 导入app01 urlpatterns = [ url(r'^publisher_add/', views.publisher_add), ] # 2.在app01下的views.py文件中编写函数 from app01 import models # 导入 models文件,使用orm操作数据库 # 添加 def publisher_add(request): pub_name, error = '', '' # 判断发送方式 是不是post请求 if request.method == 'POST': # 获取提交的信息 pub_name = request.POST.get('pname') # 对应前端inpu, t框的name值 # 如果输入为空 if not pub_name: error = '输入的内容为空' elif models.Pub.objects.filter(pname=pub_name): # 数据库里是否存在当前数据的值 error = '出版社名称已存在' else: # 添加 # 方式一 models.Pub.objects.create(pname=pub_name) # 方式二 # obj = models.Publisher(name=pub_name) # obj.save() return redirect(to='/publisher_list/') return render(request, 'publisher_add.html', {'error': error, 'data': pub_name}) <!-- publisher_add.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post" style="text-align: center"> <h1>添加出版社</h1> <input type="text" name="pname" value="{{ data }}"/> <br> <span style="color: red;">{{ error }}</span> <br> <input type="submit"/> <input type="reset" id="rest" value="取消"/> </form> <script> window.onload = function () { var back = document.getElementById('rest') back.onclick = function () { location.href = '/publisher_list' } } </script> </body> </html>

编辑

# 1.在url.py穿件一个请求和函数的对应关系 from django.conf.urls import url from django.contrib import admin from app01 import views # 导入app01 urlpatterns = [ url(r'^publisher_edit/', views.publisher_edit), ] # 2.在app01下的views.py文件中编写函数 from app01 import models # 导入 models文件,使用orm操作数据库 # 编辑 def publisher_edit(request): error, data = '', '' # 从url 获得 pk的值 pk = request.GET.get('pk') # 从数据库里查询符合条件的第一个对象 obj = models.Pub.objects.filter(pk=pk).first() # 从数据库中查不出数据 if not obj: return HttpResponse('更新数据不存在') if request.method == 'POST': # 获得表单 提交的数据 pname = request.POST.get('pname') if not pname: error = '内容为空' elif models.Pub.objects.filter(pname=pname): error = '出版社已存在' else: # 更改 已经查询出来 obj对象的值 obj.pname = pname # 提交 obj.save() return redirect(to='/publisher_list') return render(request, 'publisher_edit.html', {'error': error, 'data': obj}) <!-- publisher_edit.html --> <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <form action="" method="post" style="text-align: center"> <h1>更新出版社</h1> <input type="text" name="pname" value="{{ data.pname }}"/> <br> <span style="color: red;">{{ error }}</span> <br> <input type="submit" value="更新"/> <input type="reset" id="rest" value="取消"/> </form> <script> window.onload=function () { var back=document.getElementById('rest') back.onclick=function () { location.href='/publisher_list' } } </script> </body> </html>

删除

# 1.在url.py穿件一个请求和函数的对应关系 from django.conf.urls import url from django.contrib import admin from app01 import views # 导入app01 urlpatterns = [ url(r'^publisher_del/', views.publisher_del), ] # 2.在app01下的views.py文件中编写函数 from app01 import models # 导入 models文件,使用orm操作数据库 # 删除 def publisher_del(request): # 获得url的pk的值 pk = request.GET.get('pk') # 从数据库中查一下, 看看有没有, # query = models.Pub.objects.filter(pk=pk) # 对象列表 obj = models.Pub.objects.filter(pk=pk).first() # 获取第一个对象 if not obj: return HttpResponse('删除的不存在') # 删除数据 # 方式一 ,删除所有列表对象中,符合条件的所有值 # query.delete() # 方式二 # 按照索引删 # query[0].delete() # 方式三 obj.delete() # 跳转到展示页面 return redirect(to='/publisher_list')

转载于:https://www.cnblogs.com/dengl/p/11407696.html

相关资源:双鱼林Python基于Django图书管理系统 v1.0
最新回复(0)