当前位置 : 主页 > 编程语言 > python >

Django(part39)--制作图书管理系统

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,仅供参考,有错必究 文章目录 ​​制作图书管理系统​​ ​​第一步​​ ​​第二步​​ ​​第三步​​ 制作图书管理系统 我们基于上一个博客Django(part38)–制作登录界

学习笔记,仅供参考,有错必究



文章目录

  • ​​制作图书管理系统​​
  • ​​第一步​​
  • ​​第二步​​
  • ​​第三步​​



制作图书管理系统



我们基于上一个博客Django(part38)–制作登录界面的mywebsite_bookstore项目,制作一个图书管理系统。



第一步



向数据库中添加一些图书信息

首先我们先创建后台管理账号:

F:\MyStudio\PythonStudio\goatbishop.project01\Django\mywebsite_bookstore>python manage.py createsuperuser
Username (leave blank to use 'goatbishop'):
Email address: goatbishop@gmail.com
Password:
Password (again):
This password is entirely numeric.
Bypass password validation and create user anyway? [y/N]: N
Password:
Password (again):
Superuser created successfully.



我们打开bookstore应用下的admin.py,并进行注册:

from django.contrib import admin
from . import models

# Register your models here.


class Book_Manager(admin.ModelAdmin):
list_display = ['title', 'pub_house','price', 'market_price']
list_filter = ['pub_house']
search_fields = ['title', 'pub_house']
list_editable = ['market_price']

admin.site.register(models.Book, Book_Manager)



开启服务,进入admin数据库后台管理系统,随便添加几本书:

Django(part39)--制作图书管理系统_html



第二步



设置登录用户可以浏览、删除、修改和添加图书信息,但是未登录的用户,只能浏览图书信息,无权更改。



首先,我们在主模板文件夹下,修改主页homepage.html:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>

{# 判断是否有userinfo来确定是否已经登陆 #}
{% if request.session.userinfo %}
欢迎:{{request.session.userinfo.username }}
<br>
<a href="/userinfo/logout/">退出登录</a>
<br><br>
<div>
<a href="/bookstore/add/">添加新书</a>
<a href="/bookstore/list_all/">查看全部图书</a>
</div>

{% else %}
<ul>
<li><a href="/userinfo/login/">登陆</a></li>
<li><a href="/userinfo/reg/">注册</a></li>

</ul>
游客, 您可以<a href="/bookstore/list_all/">查看全部图书</a>
<br><br>
若您想对书籍信息进行修改,请先登录!
{% endif %}

</body>
</html>



如果我们在登录状态下,主页是这样的:

Django(part39)--制作图书管理系统_django_02

在未登录状态下,主页是这样的:

Django(part39)--制作图书管理系统_图书管理系统_03



我们先在bookstore应用下的urls.py模块中添加路由:

from django.urls import re_path
from . import views

urlpatterns = [
re_path(r'^$', views.homepage),
re_path(r'^add/$', views.new_book),
re_path(r'^list_all/$', views.list_books),
re_path(r'^mod/(\w+)/$', views.mod_book_info),
re_path(r'^del/(\w+)/$', views.del_book),
]

再bookstore应用下的views.py模块中添加视图函数:

from django.shortcuts import render

# Create your views here.

from django.http import HttpResponse
from . import models
from django.http import Http404

def homepage(request):
return render(request, 'index.html')

def new_book(request):
# 为添加新收功能提供权限验证
if 'userinfo' not in request.session:
raise Http404

if request.method == 'GET':
return render(request, 'new_book.html')
elif request.method == 'POST':
title = request.POST.get('title', '')
pub_house = request.POST.get('pub_house', '')
price = request.POST.get('price', '')
market_price = request.POST.get('market_price', '')
# 用Book.object管理器的create方法来创建新书
abook = models.Book.objects.create(title=title,
price=price,
market_price=market_price,
pub_house=pub_house)
print('添加新书,成功添加新书:', abook.title)
return HttpResponse('<a href="/bookstore/">添加新书成功,点我跳转到书库</a>')

def list_books(request):
books = models.Book.objects.all()
return render(request, 'book_list.html', locals())


def mod_book_info(request, book_name):
# 先根据book_id 找到对应的一本书
try:
abook = models.Book.objects.get(title = book_name)
except:
return HttpResponse("没有找到" + book_name + "的图书信息")

if request.method == 'GET':
return render(request, "mod_price.html", locals())
elif request.method == 'POST':
try:
m_price = request.POST.get('market_price', '0.0')
abook.market_price = m_price
abook.save() # 提交修改
html = "修改成功 <div><a href='/bookstore/list_all/'>回到书籍浏览界面</a></div>"
return HttpResponse(html)
except:
return HttpResponse("修改失败")


from django.http import HttpResponseRedirect # 改入 HttpResponseRedirect模块用于 重定向url
def del_book(request, book_name):
try:
abook = models.Book.objects.get(title = book_name)
abook.delete()
return HttpResponseRedirect('/bookstore/list_all/')
except:
return HttpResponse("没有找到" + book_name + "的图书信息,删除失败")



在主模板文件夹下创建各种模板。

index.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>书库</title>
</head>
<body>
<ul>
{% if request.session.userinfo %}
<li><a href="/bookstore/add/">添加新图书</a></li>
<li><a href="/bookstore/list_all/">显示所有图书</a></li>
{% else %}
<li><a href="/bookstore/list_all/">显示所有图书</a></li>
{% endif %}
</ul>
</body>
</html>

mod_price.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>修改价格</title>
</head>
<body>
<form action="/bookstore/mod/{{ abook.title }}/" method="post">
<div>书名: {{ abook.title }}</div>
<div>版社名: {{ abook.pub_house }}</div>
<div>定价: {{ abook.price }}</div>
<div>
零售价:<input type="text" name="market_price" value="{{ abook.market_price }}"placeholder="零售价" required>
</div>
<div>
<input type="submit" value="修改价格">
</div>
</form>
</body>
</html>

new_book.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>添加新书</title>
</head>
<body>
<form action="/bookstore/add/" method="post">
<div>
<input type="text" name="title" placeholder="新书名" required value="书名">
</div>
<div>
<input type="text" name="pub_house" placeholder="新版社名" required>
</div>
<div>
<input type="text" name="price" placeholder="定价" required>
</div>
<div>
<input type="text" name="market_price" placeholder="零售价" required>
</div>
<div>
<input type="submit" value="添加新书">
</div>
</form>
</body>
</html>

book_list.html

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图书列表</title>
</head>
<body>
<a href="/bookstore/">进入书库</a> &nbsp;
<a href="/">返回首页</a>
<table>
<tr>
<th>书名</th>
<th>出版社</th>
<th>定价</th>
<th>零售价</th>
<th>修改</th>
<th>删除</th>
</tr>
{% for abook in books %}
<tr>
<td>{{ abook.title }}</td>
<td>{{ abook.pub_house }}</td>
<td>{{ abook.price }}</td>
<td>{{ abook.market_price }}</td>
{% if request.session.userinfo %}
<td><a href="/bookstore/mod/{{ abook.title }}">修改</a></td>
<td><a href="/bookstore/del/{{ abook.title }}">删除</a></td>
{% else %}
<td colspan="2">您无权更改</td>
{% endif %}
</tr>
{% endfor %}
</table>
</body>
</html>



第三步



图书管理系统使用演示

我们开启服务,并向首页发起请求(非登录状态):

Django(part39)--制作图书管理系统_python_04

点击​​查看全部图书​​,进入所有图书列表:

Django(part39)--制作图书管理系统_django_05



点击​​进入书库​​:

Django(part39)--制作图书管理系统_django_06

点击​​显示所有图书​​,返回所有图书列表。



在登录状态下,向首页发起请求:

Django(part39)--制作图书管理系统_django_07

点击​​添加新书​​,并按照字段类型添加书籍:

Django(part39)--制作图书管理系统_session_08

添加成功后,自动跳转到如下页面,我们点击这个超链接,进入书库:

Django(part39)--制作图书管理系统_django_09

点击​​显示所有图书​​:

Django(part39)--制作图书管理系统_session_10

我们又一次进入到了图书列表,但这次由于我们处于登录状态,所以可以对书籍进行修改和删除:

Django(part39)--制作图书管理系统_django_11

上一篇:Django(part37)--session
下一篇:没有了
网友评论