Django用起来真的很方便
我用的是Pycharm 2019.3.4 专业版,直接新建一个Django项目
数据库我用的是mysql
增删查都有了
查:
首页查看图书列表
增:
删:
点击首页的图书名,可以跳转到详情页,然后可以删除图书
CREATE TABLE `book` (
`id` int(125) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`author` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
比较麻烦的地方就是删除,其他还好
连接数据库分为两步
import pymysql
pymysql.install_as_MySQLdb()
项目里面有一个名为front的app,代码都写在这里
全写在views.py文件中了,逻辑请看注释
from django.shortcuts import render,redirect,reverse
from django.db import connection
def get_cursor():
#获得数据库的cursor
return connection.cursor()
def index(request):
'''
首页 需要展示所有的书籍
首页模板为index.html,传递获取到的books给该网页处理
'''
cursor=get_cursor()
cursor.execute("select id,name,author from book")
books=cursor.fetchall() # [(1,'name','author'),(...),...]
return render(request,'index.html',context={"books":books})
def add_book(request):
'''
增加图书
如果是get请求,返回add_book.html
如果是post,则响应添加图书请求,使用get获取到post的参数,如书名,作者,然后执行SQL语句添加到数据库里面
添加完之后我们跳转回首页
'''
if request.method=='GET':
return render(request,'add_book.html')
else:
cursor=get_cursor()
name=request.POST.get("name")
author=request.POST.get("author")
cursor.execute("insert into book(id,name,author) values(null,'%s','%s')"% (name,author))
return redirect(reverse('index'))
def book_detail(request,book_id):
'''
书籍详情
我们先从DB获取该图书的信息,然后返回一个book_detail页面
'''
cursor=get_cursor()
cursor.execute("select id,name,author from book where id=%s"%book_id)
book=cursor.fetchone()
return render(request,'book_datail.html',context={'book':book})
def delete_book(request):
'''
实现删除功能
删除的话我们接受POST请求,然后从POST里面获取id,接着执行SQL语句删除该条图书
由于没有独立的delete_book.html,所以直接进入/delete_book/是错误的操作,这里我们让它默认跳转回首页
'''
if request.method=='POST':
book_id=request.POST.get('book_id')
cursor=get_cursor()
cursor.execute("delete from book where id=%s" % book_id)
return redirect(reverse('index'))
else:
# raise RuntimeError("删除图书失败")
return redirect(reverse('index'))
urls.py文件内容如下
from django.urls import path
from front import views
urlpatterns = [
path('',views.index,name='index'), #首页
path('add_book/',views.add_book,name='add_book'), #添加图书
path('book_detail/' ,views.book_detail,name='book_detail'), #书籍详情,以图书的id来作为区分
path('delete_book/',views.delete_book,name='delete_book') #删除图书
]
写得很简单
需要注意的是css存放在static文件中下面,所以要配置一下
添加上front
base.html模板
{% load static %}
<html lang="en">
<head>
<meta charset="UTF-8">
<title>图书管理系统title>
<link rel="stylesheet" href="{% static 'front/base.css' %}">
head>
<body>
<nav>
<ul class="nav">
<li><a href="/">首页a>li>
<li><a href="{% url 'add_book' %}">发布图书a>li>
ul>
nav>
{% block content %}
{% endblock %}
body>
html>
首页只需要展示DB里面的数据就行了
index.html
{% extends 'base.html' %}
{% block content %}
<div style="margin: 20px">
<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 'book_detail' book_id=book.0 %}">{{ book.1 }} a>td>
<td>{{ book.2 }}td>
tr>
{% endfor %}
tbody>
table>
div>
{% endblock %}
add_book里面需要提交一个form表单,我们直接提交到当前页面就好,让它跳转回首页
add_book.html
{% extends 'base.html' %}
{% block content %}
<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" name="submit">td>
tr>
table>
form>
{% endblock %}
书籍详情,这里有删除图书的功能
也是提交一个form表单,交给delete_book处理
book_detail.html
{% extends 'base.html' %}
{% block content %}
<p>书名:{{book.1 }}p>
<p>作者:{{ book.2 }}p>
<form action="{% url 'delete_book' %}" method="post">
<input type="hidden" name="book_id" value="{{ book.0 }}">
<input type="submit" value="删除图书">
form>
{% endblock %}
css文件
*{
margin: 0;
padding: 0;
}
.nav {
background: #3a3a3a;
height: 65px;
overflow: hidden;
}
.nav li {
float: left;
list-style: none;
margin: 0 20px;
line-height: 65px;
}
.nav li a {
color: #fff;
text-decoration: none;
}
.nav li a:hover{
color: lightblue;
}