zoukankan      html  css  js  c++  java
  • 路飞学城Python-Day100

    Django项目之图书馆项目

    1.项目架构

    2.表结构设计

    from django.db import models
    
    # Create your models here.
    
    
    #作者详情表
    class AuthorDeatil(models.Model):
        nid = models.AutoField(primary_key=True)
        birthday = models.DateField()
        telephone = models.BigIntegerField()
        addr = models.CharField(max_length=64)
    
    
    # 出版社表
    class Publish(models.Model):
        nid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        city = models.CharField(max_length=32)
        email = models.EmailField()
    
    
    # 书籍表
    class Book(models.Model):
        nid = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        publishDate = models.DateField()
        price = models.DecimalField(max_digits=5, decimal_places=2)
        publish = models.ForeignKey(to="Publish", to_field="nid", on_delete=models.CASCADE)
        # 多对多关系表
        authors = models.ManyToManyField(to='Author')
    
        def __str__(self):
            return self.title
    
    
    # 作者表
    class Author(models.Model):
        nid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        authordetail = models.OneToOneField(to="AuthorDeatil", to_field="nid", on_delete=models.CASCADE)
    
        def __str__(self):
            return self.name
    models.py

    3.Settings设计

    """
    Django settings for book_sys2 project.
    
    Generated by 'django-admin startproject' using Django 2.1.2.
    
    For more information on this file, see
    https://docs.djangoproject.com/en/2.1/topics/settings/
    
    For the full list of settings and their values, see
    https://docs.djangoproject.com/en/2.1/ref/settings/
    """
    
    import os
    
    # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    
    # Quick-start development settings - unsuitable for production
    # See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/
    
    # SECURITY WARNING: keep the secret key used in production secret!
    SECRET_KEY = '39as(vby5vue!jq@tvs+xuaksiv7+r(964)c-xv8ysh05a9rww'
    
    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = True
    
    ALLOWED_HOSTS = []
    
    
    # Application definition
    
    INSTALLED_APPS = [
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'app01.apps.App01Config',
    ]
    
    MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
    ]
    
    ROOT_URLCONF = 'book_sys2.urls'
    
    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [os.path.join(BASE_DIR, 'templates')]
            ,
            'APP_DIRS': True,
            'OPTIONS': {
                'context_processors': [
                    'django.template.context_processors.debug',
                    'django.template.context_processors.request',
                    'django.contrib.auth.context_processors.auth',
                    'django.contrib.messages.context_processors.messages',
                ],
            },
        },
    ]
    
    WSGI_APPLICATION = 'book_sys2.wsgi.application'
    
    
    # Database
    # https://docs.djangoproject.com/en/2.1/ref/settings/#databases
    
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        }
    }
    
    
    # Password validation
    # https://docs.djangoproject.com/en/2.1/ref/settings/#auth-password-validators
    
    AUTH_PASSWORD_VALIDATORS = [
        {
            'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
        },
        {
            'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
        },
    ]
    
    
    # Internationalization
    # https://docs.djangoproject.com/en/2.1/topics/i18n/
    
    LANGUAGE_CODE = 'en-us'
    
    TIME_ZONE = 'UTC'
    
    USE_I18N = True
    
    USE_L10N = True
    
    USE_TZ = True
    
    
    # Static files (CSS, JavaScript, Images)
    # https://docs.djangoproject.com/en/2.1/howto/static-files/
    
    STATIC_URL = '/static/'
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'static'),
    )
    settings.py

    4.路由设计

    """book_sys2 URL Configuration
    
    The `urlpatterns` list routes URLs to views. For more information please see:
        https://docs.djangoproject.com/en/2.1/topics/http/urls/
    Examples:
    Function views
        1. Add an import:  from my_app import views
        2. Add a URL to urlpatterns:  path('', views.home, name='home')
    Class-based views
        1. Add an import:  from other_app.views import Home
        2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home')
    Including another URLconf
        1. Import the include() function: from django.urls import include, path
        2. Add a URL to urlpatterns:  path('blog/', include('blog.urls'))
    """
    from django.contrib import admin
    from django.urls import path, re_path
    from app01 import views
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        re_path('index/$', views.index),
        re_path('index/add/$', views.add_book),
        re_path('books/(d+)/change/$', views.change_book),
        re_path('books/(d+)/delete/$', views.delete_book),
    ]
    urls.py

    5.视图设计

    from django.shortcuts import render, HttpResponse, redirect
    from .models import Publish, Author, Book, AuthorDeatil
    # Create your views here.
    
    
    def add_book(request):
        if request.method == "POST":
            title = request.POST.get("title")
            price = request.POST.get("price")
            pub_date = request.POST.get("pub_date")
            publish_id = request.POST.get("publish_id")
            authors_id_list = request.POST.getlist("authors_id_list")
            book_obj = Book.objects.create(title=title, price=price, publishDate=pub_date, publish_id=publish_id)
            book_obj.authors.add(*authors_id_list)
            return redirect("/index/")
        publish_list = Publish.objects.all()
        author_list = Author.objects.all()
        return render(request, "addbook.html", locals())
    
    
    def index(request):
        book_list = Book.objects.all()
        pub_list = Publish.objects.all()
        au_list = Author.objects.all()
        au_name = []
        pu_name = []
        for n in au_list:
            au_name.append(n.name)
        for n in pub_list:
            pu_name.append(n.name)
        if request.method == "POST":
            name = request.POST.get('name')
            # print(name)
            # 根据作者拿到所有的书本
            if name in au_name:
                author_obj = Author.objects.get(name=name)
                book_list_1 = author_obj.book_set.all()
            # 根据出版社拿到所有的书本
            elif name in pu_name:
                pub_obj = Publish.objects.get(name=name)
                book_list_1 = pub_obj.book_set.all()
        return render(request, "index.html", locals())
        # return HttpResponse("OK")
    
    
    def change_book(request, edit_id):
        edit_book_obj = Book.objects.filter(pk=edit_id).first()
        publish_list = Publish.objects.all()
        author_list = Author.objects.all()
        if request.method == "POST":
            title = request.POST.get("title")
            price = request.POST.get("price")
            pub_date = request.POST.get("pub_date")
            publish_id = request.POST.get("publish_id")
            authors_id_list = request.POST.getlist("authors_id_list")
            Book.objects.filter(pk=edit_id).update(title=title, price=price, publishDate=pub_date,
                                                        publish_id=publish_id)
            edit_book_obj.authors.set(authors_id_list)
            return redirect("/index/")
        return render(request, "changebook.html", locals())
    
    
    def delete_book(request, del_id):
        Book.objects.filter(pk=del_id).delete()
        return redirect("/index/")
    views.py

    6.模板设计

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>添加书籍</title>
        <link rel="stylesheet" href="/static/bootstrap/dist/css/bootstrap.min.css">
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .navbar-header {
                display: inline-block;
                width: 800px;
            }
            .ul_list {
                padding-top: 8px;
                padding-left: 15px;
                display: inline-block;
                color: #fff;
            }
    
            #con_btn {
                padding: 0;
            }
    
            .row {
                float: right;
                display: inline-block;
                width: 600px;
                padding-top: 15px;
                padding-left: 200px;
            }
    
            .input-group {
                width: 300px;
            }
    
            .container1 {
                width: 60%;
                margin: auto;
            }
    
            #sub-btn {
                width: 20%;
                margin: auto;
            }
    
            #cancel {
    
                display: inline-block;
                float: right;
                margin-top: -36px;
            }
        </style>
    </head>
    <body>
    <div class="lead_head">
        {#导航条#}
        <nav class="navbar navbar-inverse">
            <div class="container-fluid">
                <div class="navbar-header">
                    <div class="logo">
                        <div class="container">
                            <div class="ul_list">
                                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
                                    <ul class="nav navbar-nav">
                                        <li><a href="#" id="con_btn">
                                            <button type="button" class="btn btn-default navbar-btn">Welcome to the Book
                                                Store
                                            </button>
                                        </a></li>
                                        <li>
                                            <a href="#">Index</a></li>
    
                                        <li>
                                            <a href="#">Books</a>
                                        </li>
                                        <li>
                                            <a href="#">Issuers</a></li>
                                        <li>
                                            <a href="#">Authors</a></li>
    
                                    </ul>
                                    </li>
                                    </ul>
                                </div>
    
                            </div>
                        </div>
    
                    </div>
                </div>
                <div class="row">
                    <div class="col-lg-6">
                        <div class="input-group">
                            <input type="text" class="form-control" placeholder="Anything U Want">
                            <span class="input-group-btn">
                                <button class="btn btn-default" type="button">Search</button>
                            </span>
                        </div>
                    </div>
                </div>
            </div>
        </nav>
    </div>
    
    <div class="container1">
        <div class="row1">
    
            <form action="" method="post">
                {% csrf_token %}
                <div class="form-group">
                    <label for="">名称</label>
                    <input type="text" name="title" class="form-control" value="">
                </div>
    
                <div class="form-group">
                    <label for="">价格</label>
                    <input type="text" name="price" class="form-control">
                </div>
    
                <div class="form-group">
                    <label for="">出版日期</label>
                    <input type="date" name="pub_date" class="form-control">
                </div>
    
                <div class="form-group">
                    <label for="">出版社</label>
                    <select name="publish_id" id="" class="form-control">
                        {% for publish in publish_list %}
                            <option value="{{ publish.pk }}">{{ publish.name }}</option>
                        {% endfor %}
                    </select>
                </div>
    
                <div class="form-group">
                    <label for="">作者</label>
                    <select type="text" name="authors_id_list" multiple class="form-control">
                        {% for author in author_list %}
                            <option value="{{ author.pk }}">{{ author.name }}</option>
                        {% endfor %}
    
                    </select>
                </div>
                <input type="submit" class="btn btn-default" id="sub-btn">
            </form>
            <a id="cancel" href="/index/"><input type="submit" class="btn btn-default" value="Cancel"></a>
        </div>
    </div>
    </body>
    </html>
    addbook.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>ChangeBook</title>
         <link rel="stylesheet" href="/static/bootstrap/dist/css/bootstrap.min.css">
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .navbar-header {
                display: inline-block;
                width: 800px;
            }
            .ul_list {
                padding-top: 8px;
                padding-left: 15px;
                display: inline-block;
                color: #fff;
            }
    
            #con_btn {
                padding: 0;
            }
    
            .row {
                float: right;
                display: inline-block;
                width: 600px;
                padding-top: 15px;
                padding-left: 200px;
            }
    
            .input-group {
                width: 300px;
            }
    
            .container1 {
                width: 60%;
                margin: auto;
            }
    </style>
    </head>
    <body>
    <div class="lead_head">
        {#导航条#}
        <nav class="navbar navbar-inverse">
            <div class="container-fluid">
                <div class="navbar-header">
                    <div class="logo">
                        <div class="container">
                            <div class="ul_list">
                                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
                                    <ul class="nav navbar-nav">
                                        <li><a href="#" id="con_btn">
                                            <button type="button" class="btn btn-default navbar-btn">Welcome to the Book
                                                Store
                                            </button>
                                        </a></li>
                                        <li>
                                            <a href="#">Index</a></li>
    
                                        <li>
                                            <a href="#">Books</a>
                                        </li>
                                        <li>
                                            <a href="#">Issuers</a></li>
                                        <li>
                                            <a href="#">Authors</a></li>
    
                                    </ul>
                                    </li>
                                    </ul>
                                </div>
    
                            </div>
                        </div>
    
                    </div>
                </div>
                <div class="row">
                    <div class="col-lg-6">
                        <div class="input-group">
                            <input type="text" class="form-control" placeholder="Anything U Want">
                            <span class="input-group-btn">
                                <button class="btn btn-default" type="button">Search</button>
                            </span>
                        </div>
                    </div>
                </div>
            </div>
        </nav>
    </div>
    <div class="container1">
        <div class="row1">
            <div class="col-md-6 col-md-offset-3">
                <form action="" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="">名称</label>
                        <input type="text" name="title" class="form-control" value="{{ edit_book_obj.title }}">
                    </div>
    
                    <div class="form-group">
                        <label for="">价格</label>
                        <input type="text" name="price" class="form-control" value="{{ edit_book_obj.price }}">
                    </div>
    
                    <div class="form-group">
                        <label for="">出版日期</label>
                        <input type="date" name="pub_date" class="form-control"
                               value="{{ edit_book_obj.publishDate|date:'Y-m-d' }}">
                    </div>
                    <div class="form-group">
                        <label for="">出版社</label>
                        <select name="publish_id" id="" class="form-control">
                            {% for publish in publish_list %}
                                {% if edit_book_obj.publish == publish %}
                                    <option selected value="{{ publish.pk }}">{{ publish.name }}</option>
                                {% else %}
                                    <option value="{{ publish.pk }}">{{ publish.name }}</option>
                                {% endif %}
                            {% endfor %}
                        </select>
                    </div>
                    <div class="form-group">
                        <label for="">作者</label>
                        <select type="text" name="authors_id_list" multiple class="form-control">
                            {% for author in author_list %}
                            {% if author in edit_book_obj.authors.all %}
                                <option selected value="{{ author.pk }}">{{ author.name }}</option>
                            {% else %}
                                 <option value="{{ author.pk }}">{{ author.name }}</option>
                            {% endif %}
    
                            {% endfor %}
                        </select>
                    </div>
                    <input type="submit" class="btn btn-default">
                </form>
            </div>
        </div>
    </div>
    </body>
    </html>
    changebook.html
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>图书管理系统V1.0</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            .navbar-header{
                display: inline-block;
                width: 800px;
            }
            .ul_list{
                padding-top: 8px;
                padding-left: 15px;
                display: inline-block;
                color: #fff;
            }
            #con_btn{
                padding: 0;
            }
            .row{
                float: right;
                display: inline-block;
                width: 600px;
                padding-top: 15px;
                padding-left: 200px;
            }
            .input-group{
                width: 300px;
            }
            .lead_body{
                width: 100%;
                height: 80%;
                text-align: center;
                background-color: #e5e5e5;
                margin: auto;
            }
            .inner_body{
                width: 80%;
                height: 80%;
                {#background-color: #1b6d85;#}
                margin: auto;
                {#border: 1px solid gray;#}
            }
            .td{
                text-align: center;
            }
            .ul_left{
                float: left;
                padding-left: 60px;
                list-style-type:none;
                font-size: 25px;
            }
            .ul_left .blank{
                {#height: 100px;#}
                {#width: 10px;#}
                padding-bottom: 100px;
            }
            .ul_left .click1:hover{
                cursor: pointer;
                color: orange;
            }
            .ul_left .click2:hover{
                cursor: pointer;
                color: orange;
            }
            .ul_left .click3:hover{
                cursor: pointer;
                color: orange;
            }
            .left_body{
                height: 333px;
                float: left;
                background-color: white;
                margin-left: -685px;
                display: inline-block;
                position: fixed;
                z-index: 999;
            }
            #show-books, #show-issuers, #show-authors{
                border: none;
            }
            #close{
                float: right;
                margin-right: 10px;
                cursor: pointer;
                margin-top: 10px;
                position: relative;
                z-index: 999;
                font-size: 25px;
            }
    
    
        </style>
        <link rel="stylesheet" href="/static/bootstrap/dist/css/bootstrap.min.css">
    </head>
    <body>
    <div class="lead_head">
        {#导航条#}
        <nav class="navbar navbar-inverse">
            <div class="container-fluid">
                <div class="navbar-header">
                    <div class="logo">
                        <div class="container">
                            <div class="ul_list">
                                <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-9">
                                    <ul class="nav navbar-nav">
                                        <li><a href="#" id="con_btn">
                                            <button type="button" class="btn btn-default navbar-btn">Welcome to the Book
                                                Store
                                            </button>
                                        </a></li>
                                        <li>
                                            <a href="#">Index</a></li>
    
                                        <li>
                                            <a href="#">Books</a>
                                        </li>
                                        <li>
                                            <a href="#">Issuers</a></li>
                                        <li>
                                            <a href="#">Authors</a></li>
    
                                    </ul>
                                    </li>
                                    </ul>
                                </div>
    
                            </div>
                        </div>
    
                    </div>
                </div>
                <div class="row">
                    <div class="col-lg-6">
                        <div class="input-group">
                            <input type="text" class="form-control" placeholder="Anything U Want">
                            <span class="input-group-btn">
                                <button class="btn btn-default" type="button">Search</button>
                            </span>
                        </div>
                    </div>
                </div>
            </div>
        </nav>
    </div>
        <ul class="ul_left">
            <li class="click1">Authors</li>
            <li class="blank"></li>
            <li class="click2">Issuers</li>
            <li class="blank"></li>
            <li class="click3">Books</li>
        </ul>
    <div class="lead_body">
        <div class="left_body">
            <div class="author" style="display: none">
                <form action="" method="post">
                     {% csrf_token %}
                    <h3>Authors</h3>
                {% for authors in au_list %}
                    <button id="show-authors" type="submit"  value="{{ authors }}" name="name" class="btn btn-default btn-lg btn-block">{{ authors }}</button>
                    {% endfor %}
                    <button id="back1" type="button" class="btn btn-default btn-lg btn-block">Hide<<</button>
                </form>
            </div>
            <div class="issuers" style="display: none">
             <h3>Issuers</h3>
                <form action="" method="post">
                 {% for issuers in pub_list %}
                     {% csrf_token %}
                      <button id="show-issuers" type="submit" value="{{ issuers.name }}" name="name" class="btn btn-default btn-lg btn-block">{{ issuers.name }}</button>
                    {% endfor %}
                    <button id="back2" type="button" class="btn btn-default btn-lg btn-block">Hide<<</button>
            </form>
            </div>
        <div class="books" style="display: none">
        <h3>Books</h3>
             {% for books in book_list %}
                      <button id="show-books" type="button" class="btn btn-default btn-lg btn-block">《{{ books }}》</button>
                    {% endfor %}
                <button id="back3" type="button" class="btn btn-default btn-lg btn-block">Hide<<</button>
        </div>
        </div>
        <div class="inner_body">
    
    
            {#巨幕内容,其他母版引用的时候要删除#}
            <div class="jumbotron">
                <div id="first" >
                <h1>Welcome!</h1>
                <p>Here is something U want to know before U begin !</p>
                <p><a id="show" class="btn btn-primary btn-lg" href="#" role="button">Show Me</a></p>
                <p><a id="hide" class="btn btn-default btn-lg" href="#" role="button" style="display: none">Hide</a>
                    <a id="add" class="btn btn-info btn-lg" href="/index/add/" role="button" style="display: none">Add Book</a>
                </p>
                </div>
                <div id="second" >
                <span id="close" >X</span>
                    <h1>{{ name }}</h1>
                    {% for n in book_list_1 %}
                        <p>《{{ n }}》</p>
                    {% endfor %}
    
    
                </div>
                </div>
        <table id="show-hide" class="table table-bordered table-hover table-striped" style="display: none">
                 <thead>
                        <tr>
                             <th class="td" >Number</th>
                             <th class="td">Title</th>
                             <th class="td">Price</th>
                             <th class="td">Release Date</th>
                             <th class="td">Publishing House</th>
                             <th class="td">Authors</th>
                             <th class="td">Action</th>
                        </tr>
                     </thead>
               <tbody>
               {% for book in book_list %}
                    <tr>
                             <td>{{ forloop.counter }}</td>
                             <td >{{ book.title }}</td>
                             <td >{{ book.price }}元</td>
                                <td >{{ book.publishDate|date:"Y-m-d" }}</td>
                             <td >{{ book.publish.name }}</td>
                             <td >{% for author in book.authors.all %}
                                      {% if forloop.last %}
                                       <span>{{ author.name }}</span>
                                      {% else %}
                                       <span>{{ author.name }}</span>,
                                      {% endif %}
                                   {% endfor %}</td>
                             <td > <a href="/books/{{ book.pk }}/change/" class="btn btn-warning">Edit</a>
                                   <a id="del" href="/books/{{ book.pk }}/delete/" class="btn btn-danger">Delete</a></td>
                        </tr>
               {% endfor %}
               </tbody>
    
            </table>
            </div>
    
            </div>
        </div>
    </div>
    </body>
    <script type="text/javascript" src ="../static/JS/jQuery_File/jquery-3.3.1.min.js"></script>
    <script type="text/javascript">
        $("#show").click(function () {
            $("#show, #every_list").hide();
            $("#hide, #add").show();
           $('#show-hide').fadeIn();
        });
        $("#hide").click(function () {
             $('#show-hide').fadeOut();
             $("#show, #every_list").show();
            $("#add, #hide").hide();
        });
        $('.click1').mouseover(function () {
           $('.author').show('10000');
    
        });
    
        $('.click2').mouseover(function () {
           $('.issuers').show('10000');
        });
    
        $('.click3').mouseover(function () {
           $('.books').show('10000');
        });
        $('#back1,#back2,#back3 ').click(function () {
           $('.books, .issuers, .author').hide('10000');
        });
        $('#close').click(function () {
           $('#close, #second').hide();
           {#$('#first').show();#}
        });
        $('#del').click(function () {
           confirm('you will delete a book!');
        });
    </script>
    
    </html>
    index.html

     

    Win a contest, win a challenge
  • 相关阅读:
    python地图投影转换
    python 矢量数据转栅格数据
    读CSV文件并写arcgis shp文件
    python 读取矢量文件
    python 读hdf4文件,再转写成一个tif文件
    python gdal 写GeoTiff文件
    python gdal 读取栅格数据
    linux下在用python向文件写入数据时' '不起作用
    【FFT&NTT 总结】
    -【网络流总结】
  • 原文地址:https://www.cnblogs.com/pandaboy1123/p/9760541.html
Copyright © 2011-2022 走看看