zoukankan      html  css  js  c++  java
  • 08- 图书管理系统

    1

    model

    from django.db import models
    
    # Create your models here.
    
    
    class Book(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        pub_date = models.DateField()
        price = models.DecimalField(max_digits=8, decimal_places=2)
        publish = models.CharField(max_length=32)

    数据迁移

    python manage.py makemigrations
    
    python manage.py migrate

     

    建立static文件夹,导入bootstrap

    关键的文件是dist文件夹

     

    静态文件配置

    STATIC_URL = '/static/'
    
    # 把静态目录static,添加到BASE_DIR
    STATICFILES_DIRS = [
        os.path.join(BASE_DIR, 'static')
    ]

    2、添加书籍

    主url

    from django.contrib import admin
    from django.urls import path, re_path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path(r'^app01/', include(('app01.urls', 'app01')))
    ]

    app01 url

    from django.urls import path, re_path, include
    from app01 import views
    
    urlpatterns = [
        re_path(r'^addbook', views.addbook, name='addbook')
    ]

    view

    from django.shortcuts import render, HttpResponse
    
    # Create your views here.
    from app01.models import Book
    
    
    def addbook(request):
        # 1. post方式提交form表单
        if request.method == 'POST':
            # 1.1 得到form表单的数据 k:V
            title = request.POST.get('title')
            price = request.POST.get('price')
            pub_date = request.POST.get('pub_date')
            publish = request.POST.get('publish')
    
            # 1.2 Book中添加数据
            Book.objects.create(
                title=title,
                price=price,
                pub_date=pub_date,
                publish=publish,
            )
    
            return HttpResponse('添加成功')
    
        # 2. get方式得到html网页
        return render(request, 'app01/addbook.html')

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>添加书籍</title>
        <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
        <style type="text/css">
            .container{
                margin-top: 100px;
            }
            .btn{
                margin-top: 10px;
            }
    
        </style>
    </head>
    <body>
    <h1>添加书籍</h1>
    <div class="container">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <form action="" method="post">
                    {% csrf_token %}
                    <div>
                        <label for="">书籍名称</label>
                        <input type="text" class="form-control" name="title"/>
                    </div>
                    <div>
                        <label for="">价格</label>
                        <input type="text" class="form-control" name="price"/>
                    </div>
                    <div>
                        <label for="">出版日期</label>
                        <input type="date" class="form-control" name="pub_date"/>
                    </div>
                    <div>
                        <label for="">出版社</label>
                        <input type="text" class="form-control" name="publish"/>
                    </div>
                    <input type="submit" class="btn btn-success pull-right">
                </form>
            </div>
        </div>
    </div>
    
    </body>
    </html>

    input的  k:v  key要对应modles中Book的字段

    form-control 类 标签更加格式化

    col-md-offset-3 类  标签向右移动3格

     pull-right 类  标签靠右

     btn-success 绿色

    <input type="submit" class="btn btn-success ">
    <input type="submit" class="btn btn-success pull-right">

     

     

    添加书籍时,data为空的话,会报错

    3、查看书籍

    url

    from django.urls import path, re_path, include
    from app01 import views
    
    urlpatterns = [
        re_path(r'^addbook', views.addbook, name='addbook'),
        re_path(r'^book', views.book, name='book')
    ]

    view

    from app01.models import Book
    def book(request):
    
        # 获取所有的书籍对象
        book_list = Book.objects.all()  # [obj1,obj2,...]
    
        return render(request, './app01/book.html', {'book_list': book_list})

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>添加书籍</title>
        <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
        <style type="text/css">
            .container {
                margin-top: 100px;
            }
    
            .btn {
                margin-top: 10px;
            }
    
        </style>
    </head>
    <body>
    <h1>查看书籍</h1>
    <div class="container">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <table class="table table-bordered table-striped">
                    <thead>
                        <tr>
                            <th>书籍名称</th>
                            <th>价格</th>
                            <th>出版日期</th>
                            <th>出版社</th>
                        </tr>
                    </thead>
                    <tbody>
                        {% for book in book_list %}
                            <tr>
                                <td>{{ book.title }}</td>
                                <td>{{ book.price }}</td>
    {#                            <td>{{ book.pub_date }}</td>  July 1, 2018 #}
                                <td>{{ book.pub_date|date:'Y-m-d' }}</td>
                                <td>{{ book.publish }}</td>
                            </tr>
                        {% endfor %}
                    </tbody>
                </table>
    
            </div>
        </div>
    </div>
    
    </body>
    </html>
    <table class="table">

    <table class="table table-bordered">  边框

    <table class="table table-bordered table-striped">  斑马线

    4、删除书籍

    删除

    url

    from django.urls import path, re_path, include
    from app01 import views
    
    urlpatterns = [
        re_path(r'^addbook/$', views.addbook, name='addbook'),
        re_path(r'^book/$', views.book, name='book'),
        re_path(r'^book/(d+)/delete/$', views.delete, name='delete'),   # views.delete(request, 2)
    ]

    views

    def delete(request, id):
        Book.objects.filter(id=id).delete()
        return redirect('/app01/book/')    # 重定向到/app01/book/的url

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>查看书籍</title>
        <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
        <style type="text/css">
            .container {
                margin-top: 100px;
            }
    
            .btn {
                margin: 10px auto;
            }
    
        </style>
    </head>
    <body>
    <h1>查看书籍</h1>
    <div class="container">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
                <a href="/app01/addbook/" class="btn btn-primary">添加书籍</a>
                <table class="table table-bordered table-striped">
                    <thead>
                    <tr>
                        <th>书籍名称</th>
                        <th>价格</th>
                        <th>出版日期</th>
                        <th>出版社</th>
                        <th>编辑操作</th>
                        <th>删除操作</th>
                    </tr>
                    </thead>
                    <tbody>
                    {% for book in book_list %}
                        <tr>
                            <td>{{ book.title }}</td>
                            <td>{{ book.price }}</td>
                            {#                            <td>{{ book.pub_date }}</td>  July 1, 2018 #}
                            <td>{{ book.pub_date|date:'Y-m-d' }}</td>
                            <td>{{ book.publish }}</td>
                            <td><a href="" class="btn btn-info">编辑</a></td>
    {#                        <td><a href="/app01/book/{{ book.id }}/delete/" class="btn btn-danger">删除</a></td>#}
                            <td><a href="/app01/book/{{ book.pk }}/delete/" class="btn btn-danger">删除</a></td>
                        </tr>
                    {% endfor %}
                    </tbody>
                </table>
    
            </div>
        </div>
    </div>
    
    </body>
    </html>
    {{ book.pk }} 比{{ book.id }}更加灵活

        

      <a href="/app01/addbook/" class="btn btn-primary">添加书籍</a>
    redirect重定向

     

     

     

     

     5、编辑书籍

    url

    from django.urls import path, re_path, include
    from app01 import views
    
    urlpatterns = [
        re_path(r'^addbook/$', views.addbook, name='addbook'),
        re_path(r'^book/$', views.book, name='book'),
        re_path(r'^book/(d+)/delete/$', views.delete, name='delete'),   # views.delete(request, 2)
        re_path(r'^book/(d+)/edit/$', views.edit, name='edit'),   # views.delete(request, 2)
    ]

    view

    def edit(request, id):
        if request.method == 'POST':
            title = request.POST.get('title')
            price = request.POST.get('price')
            pub_date = request.POST.get('pub_date')
            publish = request.POST.get('publish')
    
            Book.objects.filter(id=id).update(
                title=title,
                price=price,
                pub_date=pub_date,
                publish=publish,
            )
            return redirect('/app01/book/')
    
        # ret1 = Book.objects.filter(id=id)   # <QuerySet [<Book: Book object (4)>]>
        book_obj = Book.objects.filter(id=id).first()  # Book object (4)
    
        return render(request, './app01/editbook.html', {'book_obj': book_obj})

    html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>编辑书籍</title>
        <link rel="stylesheet" href="/static/bootstrap-3.3.7/css/bootstrap.css">
        <style type="text/css">
            .container{
                margin-top: 100px;
            }
            .btn{
                margin-top: 10px;
            }
    
        </style>
    </head>
    <body>
    <h1>编辑书籍</h1>
    <div class="container">
        <div class="row">
            <div class="col-md-6 col-md-offset-3">
    
                <form action="" method="post">
                    {% csrf_token %}
                    <div>
                        <label for="">书籍名称</label>
                        <input type="text" class="form-control" name="title" value={{ book_obj.title }}>
                    </div>
                    <div>
                        <label for="">价格</label>
                        <input type="text" class="form-control" name="price" value={{ book_obj.price }}>
                    </div>
                    <div>
                        <label for="">出版日期</label>
    {#                    <input type="date" class="form-control" name="pub_date" value={{ book_obj.pub_date }}/>#}
                        <input type="date" class="form-control" name="pub_date" value={{ book_obj.pub_date|date:'Y-m-d' }}>
                    </div>
                    <div>
                        <label for="">出版社</label>
                        <input type="text" class="form-control" name="publish" value={{ book_obj.publish }}>
                    </div>
                    <input type="submit" class="btn btn-success pull-right">
                </form>
            </div>
        </div>
    </div>
    
    </body>
    </html>

    日期需要格式化

     

    6、查询操作

    def query(request):
    
        # 1. 查询老男孩出版社出版过的价格大于200的书籍
        ret1 = Book.objects.filter(publish='老男孩出版社', price__gt=200)
        print(ret1)
    
        # 2. 查询2018年8月出版的所有以py开头的书籍名称
        # ret2 = Book.objects.filter(pub_date='2017-08', title__startswith='py')    错误用法
        # ret2 = Book.objects.filter(pub_date__year=2017, pub_date__month=08, title__startswith='py')   错误用法
        ret2 = Book.objects.filter(pub_date__year='2018', pub_date__month='07', title__startswith='py')
        ret2 = Book.objects.filter(pub_date__year=2018, pub_date__month=7, title__startswith='p').values('title')
        ret2 = Book.objects.filter(pub_date__year=2018, pub_date__month=7, title__startswith='p')
    
        print(ret2)
    
    
        # 3. 查询价格为50, 100或者150的所有书籍名称及其出版社名称
        ret1 = Book.objects.filter(price__in=[22,300,200])
        print(ret1)    # <QuerySet [<Book: 红楼梦>, <Book: python全栈之路>, <Book: php>]>
    
        ret2 = Book.objects.filter(price__in=[22,300,200]).values('title', 'publish')
        print(ret2)
        # <QuerySet [{'title': '红楼梦', 'publish': '人民出版社'},
                    # {'title': 'python全栈之路', 'publish': '老男孩出版社'},
                    # {'title': 'php', 'publish': '老男孩出版社'}]>
    
    
    
        # 4. 查询价格在100到200之间的所有书籍名称及其价格
        ret1 = Book.objects.filter(price__range=[100,200]).values('title', 'price')
        print(ret1)   # <QuerySet [{'title': 'php', 'price': Decimal('200.00')}]>
    
        # 5. 查询所有人民出版社出版的书籍的价格(从高到低排序,去重)
        ret1 = Book.objects.filter(publish='人民出版社').values('title','price').distinct().order_by('-price')
        print(ret1)   # <QuerySet [{'title': '水浒传222', 'price': Decimal('333.00')}, {'title': '红楼梦', 'price': Decimal('22.00')}]>
    
        return HttpResponse('查询成功')

     

     

     

    总结 :日期查询

    # 都可以  
      ret2 = Book.objects.filter(pub_date__year='2018', pub_date__month='07', title__startswith='py')
    
      ret2 = Book.objects.filter(pub_date__year=2018, pub_date__month=7, title__startswith='p')

    7、pycharm自带database配置

    5

  • 相关阅读:
    DropDownList控件的AutoPostBack属性的问题 选择后,值也跟着刷新 Kenny
    window showModalDialog 在IE6 IE7 高度(height) 问题 Kenny
    discuz初玩之一 未将对象引用设置到对象的实例(Discuz.Forum.HttpModule.ReUrl_BeginRequest) Kenny
    最长公共子串问题 LCS
    HDOJ 1024
    项目一周工作总结
    DartCloud技术难点、问题及经验教训
    中国云项目遇到的问题
    我的计算机书单
    翻转句子中单词的顺序 面试题
  • 原文地址:https://www.cnblogs.com/venicid/p/9256677.html
Copyright © 2011-2022 走看看