Django 图书管理项目2

创建书籍表以及增删改查

一 、创建一个SQL中的book表单

  1.在momodels.py中创建类book

class Book(models.Model):
    id = models.AutoField(primary_key=True)   #主键
    book_name = models.CharField(max_length=32)   #书名
    press = models.ForeignKey(to='Press', on_delete=models.CASCADE)  # 外键to = Press

  2.执行变更和创建两个命令

#   1. python manage.py makemigrations   --> 找个小本本把models.py的变更记录一下
#   2. python manage.py migrate          --> 把上面的变更记录翻译成SQL语句,去数据库执行

二、添加路由

在urls.py中添加  增删改查4个路径

  

    url(r'^book_list/', views.book_list),
    url(r'^add_book/', views.add_book),
    url(r'^del_book/', views.del_book),
    url(r'^edit_book/', views.edit_book),

三 、 在views中添加对应的4个函数

def book_list(request):
    # 读数据库内容
    book_data = Book.objects.all()
    # 传数据给html
    # html展示出来
    return render(request, 'book_list.html', {'book_date': book_data})


def add_book(request):
    # 读书籍库把 所有的出版社展示出来
    press_data = Press.objects.all()
    if request.method == 'POST':
        book_name = request.POST.get('book_name')
        press_id = request.POST.get('press_id')
        print(press_id)
        # 填写书籍 和选择出版社
        Book.objects.create(book_name=book_name, press_id=press_id)
        return redirect('/book_list/')
    # 写进book表单曲
    return render(request, 'add_book.html', {'press_data': press_data})



def del_book(request):
    #获取删除书的ID
    del_book_id = request.GET.get('id')
    print(del_book_id)
    #匹配数据库找到内容后删除
    Book.objects.filter(id=del_book_id).delete()
    #跳转书籍展示列表
    return redirect('/book_list/')

#
def edit_book(request):
    #从URL中获取要编辑的id
    edit_id = request.GET.get('id')
    #找到展示和修改的 ORM书的对象
    edit_book_obj = Book.objects.get(id=edit_id)

    if request.method == "POST":
        new_press_id = request.POST.get('press_id')  #获得前端出版社信息
        new_book_name = request.POST.get('book_name')  #获取前端的修改后的书的名字

        # new_press_id , new_book_name = request.POST.get('press_id'), request.POST.get('book_name')


        edit_book_obj.book_name = new_book_name    #修改数据库中书的名字
        edit_book_obj.press_id = new_press_id         #修改对应出版社对象   (外键就详单与对象中的组合)

        edit_book_obj.save()
        return redirect('/book_list/')

    press_data = Press.objects.all()
    return render(request,'edit_book.html',{'book_obj':edit_book_obj,'press_list':press_data})

四 、 在templates文件夹中添加对应的HTML文件

  1. book_list.html

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>书籍展示</title>
</head>
<link rel="stylesheet" href="/static/bootstrap.css">



<body>

<div class="container-fluid">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
             <h1>书籍列表</h1>
        </div>
    </div>
    <div>
        <div class="progress col-md-8 col-md-offset-2">
                <div class="progress-bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 100%;">
                    <span class="sr-only"></span>
                </div>
        </div>
    </div>
</div>

<div class="container-fluid">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <table class="table table-bordered  table-hover .active">
                <thead>
                <tr class="modal-content">
                    <th class="text-center">序号</th>
                    <th class="text-center">书id</th>
                    <th class="text-center">书名称</th>
                    <th class="text-center">出版社</th>
                    <th class="text-center">删除操作</th>
                    <th class="text-center">编辑操作</th>
                </tr>
                </thead>
                <tbody>
                {% for book in book_date %}                              {# ret 代表所有ORM对象,遍历生成下边样式的表格 #}
                    <tr class="modal-content text-center">
                        <td>{{ forloop.counter }}</td>
                        <td>{{ book.id }}</td>
                        <td>{{ book.book_name }}</td>
                        <td>{{ book.press.name }}</td>
                        <td>
                            <button type="button" class="btn btn-danger"><a href="/del_book/?id={{ book.id }}">删除</a></button>
                        </td>
                        <td>
                            <button type="button" class="btn btn-danger"><a href="/edit_book/?id={{ book.id }}">编辑</a></button>
                        </td>
                    </tr>
                {% endfor %}
                </tbody>
            </table>
        <button type="button" class="btn btn-info"> <a href="/add_book/">点击添加书籍</a></button>

        </div>
    </div>
</div>


</body>
</html>

  2.add_book.html

  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>添加书籍</title>
    <link rel="stylesheet" href="/static/bootstrap.css">
</head>
<body>
<form action="/add_book/" method="post">
    <input type="text" name="book_name">
    <select name="press_id" >
        {% for press in press_data %}
            <option value="{{ press.id }}">{{ press.name }}</option>
        {% endfor %}
    </select>
    <input type="submit">

</form>

</body>
</html>

  3.edit-book.html

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

<h5>编辑</h5>

<form action="/edit_book/?id={{ book_obj.id }}" method="post">
    <input type="text" name="book_name" value="{{ book_obj.book_name }}">
    <select name="press_id">
        {% for press in press_list %}
            {% if book_obj.press == press %}
                <option selected value="{{ press.id }}">{{ press.name }}</option>
                {% else %}
                <option value="{{ press.id }}">{{ press.name }}</option>
            {% endif %}
        {% endfor %}
    </select>
    <input type="submit">
</form>

</body>
</html>

 五 、 运行Django服务,打开网站进行验证

猜你喜欢

转载自www.cnblogs.com/clbao/p/9721257.html