09 django模型層_單表練習

模型層(單表練習)

圖書管理系統:javascript

實現功能:book單表的增刪改查css

查詢操做練習:html

1 查詢人民出版社出版過的價格大於200的書籍vue

2 查詢20178月出版的全部以py開頭的書籍名稱java

3 查詢價格爲50,100或者150的全部書籍名稱及其出版社名python

4 查詢價格在100200之間的全部書籍名稱及其價格mysql

5 查詢全部人民出版社出版的書籍的價格(從高到低排序,去重)jquery

 

效果:

 

目錄結構:

 

06 django模型層\book\book\settings.pygit

 1 """
 2 Django settings for book project.  3 
 4 Generated by 'django-admin startproject' using Django 2.2.3.  5 
 6 For more information on this file, see  7 https://docs.djangoproject.com/en/2.2/topics/settings/  8 
 9 For the full list of settings and their values, see  10 https://docs.djangoproject.com/en/2.2/ref/settings/  11 """
 12 
 13 import os  14 
 15 # Build paths inside the project like this: os.path.join(BASE_DIR, ...)
 16 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  17 
 18 
 19 # Quick-start development settings - unsuitable for production
 20 # See https://docs.djangoproject.com/en/2.2/howto/deployment/checklist/
 21 
 22 # SECURITY WARNING: keep the secret key used in production secret!
 23 SECRET_KEY = 'cex-c#ja^@=p_dp#ak0-@=^ws!_-f6g#*52jb5!3%xhe4!dc^*'
 24 
 25 # SECURITY WARNING: don't run with debug turned on in production!
 26 DEBUG = True  27 
 28 ALLOWED_HOSTS = []  29 
 30 
 31 # Application definition
 32 
 33 INSTALLED_APPS = [  34     'django.contrib.admin',  35     'django.contrib.auth',  36     'django.contrib.contenttypes',  37     'django.contrib.sessions',  38     'django.contrib.messages',  39     'django.contrib.staticfiles',  40     # 'book_app01.apps.BookApp01Config',
 41     'book_app01',  42 ]  43 
 44 MIDDLEWARE = [  45     'django.middleware.security.SecurityMiddleware',  46     'django.contrib.sessions.middleware.SessionMiddleware',  47     'django.middleware.common.CommonMiddleware',  48     'django.middleware.csrf.CsrfViewMiddleware',  49     'django.contrib.auth.middleware.AuthenticationMiddleware',  50     'django.contrib.messages.middleware.MessageMiddleware',  51     'django.middleware.clickjacking.XFrameOptionsMiddleware',  52 ]  53 
 54 ROOT_URLCONF = 'book.urls'
 55 
 56 TEMPLATES = [  57  {  58         'BACKEND': 'django.template.backends.django.DjangoTemplates',  59         'DIRS': [os.path.join(BASE_DIR,  'templates')],  60         'APP_DIRS': True,  61         'OPTIONS': {  62             'context_processors': [  63                 'django.template.context_processors.debug',  64                 'django.template.context_processors.request',  65                 'django.contrib.auth.context_processors.auth',  66                 'django.contrib.messages.context_processors.messages',  67  ],  68  },  69  },  70 ]  71 
 72 WSGI_APPLICATION = 'book.wsgi.application'
 73 
 74 
 75 # Database
 76 # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
 77 
 78 # DATABASES = {
 79 # 'default': {
 80 # 'ENGINE': 'django.db.backends.sqlite3',
 81 # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 82 # }
 83 # }
 84 
 85 
 86 # Password validation
 87 # https://docs.djangoproject.com/en/2.2/ref/settings/#auth-password-validators
 88 
 89 AUTH_PASSWORD_VALIDATORS = [  90  {  91         'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',  92  },  93  {  94         'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',  95  },  96  {  97         'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',  98  },  99  { 100         'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 101  }, 102 ] 103 
104 
105 # Internationalization
106 # https://docs.djangoproject.com/en/2.2/topics/i18n/
107 
108 LANGUAGE_CODE = 'en-us'
109 
110 TIME_ZONE = 'UTC'
111 
112 USE_I18N = True 113 
114 USE_L10N = True 115 
116 USE_TZ = True 117 
118 
119 # Static files (CSS, JavaScript, Images)
120 # https://docs.djangoproject.com/en/2.2/howto/static-files/
121 
122 STATIC_URL = '/static/'
123 
124 STATICFILES_DIRS = [ 125     os.path.join(BASE_DIR, 'statics') 126 ] 127 DATABASES = { 128     'default': { 129         'ENGINE': 'django.db.backends.mysql', 130         'NAME':'orm',# 要鏈接的數據庫,鏈接前須要建立好
131         'USER':'root',# 鏈接數據庫的用戶名
132         'PASSWORD':'root',# 鏈接數據庫的密碼
133         'HOST':'127.0.0.1',# 鏈接主機,默認本級
134         'PORT':3306 # 端口 默認3306
135  } 136 } 137 
138 LOGGING = { 139     'version': 1, 140     'disable_existing_loggers': False, 141     'handlers': { 142         'console':{ 143             'level':'DEBUG', 144             'class':'logging.StreamHandler', 145  }, 146  }, 147     'loggers': { 148         'django.db.backends': { 149             'handlers': ['console'], 150             'propagate': True, 151             'level':'DEBUG', 152  }, 153  } 154 }
View Code

 

06 django模型層\book\book\__init__.pyweb

import pymysql pymysql.install_as_MySQLdb()

 

06 django模型層\book\book\urls.py

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

 

06 django模型層\book\book_app01\models.py

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,unique=True) state = models.BooleanField() pub_date = models.DateField() price=models.DecimalField(max_digits=8,decimal_places=2) publish=models.CharField(max_length=32) def __str__(self): return self.title

 

06 django模型層\book\book_app01\urls.py

from django.urls import path,re_path,include from book_app01 import views urlpatterns = [ path('book/', views.book), path('book/add', views.add_book), re_path(r'book/(\d+)/update', views.update_book), re_path(r'book/(\d+)/delete', views.delete_book), ]

 

06 django模型層\book\book_app01\views.py

 1 from django.shortcuts import render,redirect  2 from book_app01.models import Book  3 
 4 # Create your views here.
 5 
 6 
 7 def book(request):  8     method = request.method  9     req = request.POST if request.POST else request.GET 10     try: 11         title = req.get('title') if req.get('title') else ''
12     except: 13         title = ''
14     book_list = Book.objects.filter(title__contains=title) 15     '''
16  # 1 查詢人民出版社出版過的價格大於200的書籍 17  res = Book.objects.filter(publish="人民出版社",price__gt=200) 18  # 2 查詢2017年8月出版的全部以py開頭的書籍名稱 19  res = Book.objects.filter(pub_date__contains="2017-08",title__startswith='py').values('title') 20  # 3 查詢價格爲50,100或者150的全部書籍名稱及其出版社名 21  res = Book.objects.filter(price__in=[50,100,150]).values('title','publish') 22  # 4 查詢價格在100到200之間的全部書籍名稱及其價格 23  res = Book.objects.filter(price__range=[100,200]).values('title','price') 24  # 5 查詢全部人民出版社出版的書籍的價格(從高到低排序,去重) 25  res = Book.objects.filter(publish="人民出版社").values('price').distinct().order_by('-price') 26  print('res----------->',res) 27     '''
28     return  render(request, 'book.html',locals()) 29 
30 
31 def add_book(request): 32     method = request.method 33     if method == 'POST': 34         req = request.POST 35         title = req['title'].strip() 36         price = req['price'].strip() 37         date = req['date'].strip() 38         publish = req['publish'].strip() 39         if title and price and date and publish: 40             selct_res = Book.objects.filter(title=title) 41             if not selct_res: 42                 Book.objects.create(title=title,price=price,pub_date=date,publish=publish) 43                 return redirect('/app01/book') 44             opt_res = '書籍【%s】已存在,請修改後提交!'%title 45         else: 46             opt_res = '輸入不能爲空,請修改後提交!'
47     return render(request, 'addbook.html', locals()) 48 
49 
50 def update_book(request, num): 51     select_res = Book.objects.filter(id=num) 52     if select_res: 53         method = request.method 54         book_obj = select_res[0] 55         if method == 'POST': 56             req = request.POST 57             title = req['title'].strip() 58             price = req['price'].strip() 59             date = req['date'].strip() 60             publish = req['publish'].strip() 61             if title and price and date and publish: 62                 selct_res = Book.objects.exclude(id=num).filter(title=title) 63                 if not selct_res: 64                     Book.objects.filter(id=num).update(title=title, price=price, pub_date=date, publish=publish) 65                     return redirect('/app01/book') 66                 opt_res = '書籍【%s】已存在,請修改後提交!' % selct_res[0].title 67             else: 68                 opt_res = '輸入不能爲空,請修改後提交!'
69         return render(request, 'updatebook.html', locals()) 70     return redirect('/app01/book') 71 
72 def delete_book(request, num=None): 73     select_res = Book.objects.filter(id=num) 74     if select_res: 75         Book.objects.filter(id=num).delete() 76     return redirect('/app01/book')

 

 

06 django模型層\book\templates\advertise.html

 1 <div class="action">
 2     <div class="panel panel-danger">
 3         <div class="panel-heading">2019進擊的菜鳥</div>
 4         <div class="panel-body">
 5  web框架開發  6         </div>
 7         <div class="panel-body">
 8  crm&爬蟲  9         </div>
10         <div class="panel-body">
11  算法&設計模式&企業應用 12         </div>
13         <div class="panel-body">
14  vue項目 15         </div>
16         <div class="panel-body">
17  複習python&自動化&性能 18         </div>
19     </div>
20     <div class="panel panel-warning">
21         <div class="panel-heading">2020進擊的小鳥</div>
22         <div class="panel-body">
23  fighting! 24         </div>
25     </div>
26     <div class="panel panel-success">
27         <div class="panel-heading">2021進擊的大鳥</div>
28         <div class="panel-body">
29  go on ! 30         </div>
31     </div>
32 </div>
View Code

 

06 django模型層\book\templates\base.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5  {% block title %}  6         <title>base——title</title>
 7  {% endblock title %}  8     <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"
 9  integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
10  {% block style %} 11         <style type="text/css">
12  *{
13  padding: 0;
14  margin:0;
15         }
16  .header{
17  width:100%;
18  height: 50px;
19  background-color: #369;
20         }
21  body{
22  background:#FFF url('/static/base.jpg') repeat-x 0;
23  background-attachment: fixed;
24         }
25     </style>
26  {% endblock style %} 27 
28 </head>
29 <body>
30 
31 <div class="header"></div>
32 
33 <div class="container">
34     <div class="row">
35         <div class="col-md-3">
36  {% include 'advertise.html' %} 37         </div>
38         <div class="col-md-9">
39  {% block content%} 40             <h3>base_content</h3>
41  {% endblock %} 42         </div>
43     </div>
44 </div>
45 
46 </body>
47 {% block js %} 48 <script type="text/javascript" src="/static/jquery-3.3.1.js"></script>
49 {% endblock js %} 50 </html>
View Code

 

06 django模型層\book\templates\book.html

 1 {% extends 'base.html' %}  2 
 3 {% block style %}  4  {{ block.super }}  5     <style>
 6  .mybook {
 7  margin-top: 40px;
 8         }
 9 
10  .btn {
11  margin-top: 5px;
12         }
13  .other{
14  margin-top: 5px;
15         }
16  .filter{
17  margin-bottom: 30px;
18         }
19  .empty{
20  text-align: center;
21  color: #D0D0D0;
22         }
23     </style>
24 {% endblock style %} 25 
26 {% block title %} 27     <title>book</title>
28 {% endblock title %} 29 
30 {% block content %} 31     <h3>查看書籍</h3>
32 
33     <div class="container mybook">
34         <div class="row">
35             <div class="col-md-6">
36                 <form class="form-inline filter" action="">
37                     <div class="form-group">
38                         <div class="form-group other">
39                             <label for="">書籍名稱</label>
40                             <input type="text" class="form-control" placeholder="python" name="title">
41                         </div>
42                     </div>
43                     <button type="submit" class="btn btn-primary">查詢</button>
44                 </form>
45                 <a href="/app01/book/add" class="btn btn-primary other">添加書籍</a>
46                 <table class="table table-striped table-bordered">
47                     <thead>
48                     <tr>
49                         <th>書籍名稱</th>
50                         <th>價格</th>
51                         <th>出版日期</th>
52                         <th>出版社</th>
53                         <th>刪除操做</th>
54                         <th>編輯操做</th>
55                     </tr>
56                     </thead>
57                     <tbody>
58  {% for book in book_list %} 59                         <tr>
60                             <td>{{ book.title }}</td>
61                             <td>{{ book.price }}</td>
62                             <td>{{ book.pub_date|date:'Y-m-d' }}</td>
63                             <td>{{ book.publish }}</td>
64                             <td><a href="/app01/book/{{ book.pk }}/delete" class="btn btn-danger">刪除</a></td>
65                             <td><a href="/app01/book/{{ book.pk }}/update" class="btn btn-info">編輯</a></td>
66                         </tr>
67  {% empty %} 68                             <td class="empty" colspan="6">暫無數據!</td>
69  {% endfor %} 70 
71                     </tbody>
72 
73                 </table>
74 
75             </div>
76         </div>
77     </div>
78 {% endblock content %}
View Code

 

06 django模型層\book\templates\addbook.html

 1 {% extends 'base.html' %}  2 
 3 {% block style %}  4  {{ block.super }}  5     <style>
 6  .mybook{
 7  margin-top: 50px;
 8         }
 9  .btn{
10  margin-top: 10px;
11         }
12  .opt_res{
13  margin-top: 50px;
14  color: red;
15     }
16     </style>
17 {% endblock style %} 18 
19 {% block title %} 20     <title>book</title>
21 {% endblock title %} 22 
23 {% block content %} 24     <h3>新增書籍</h3>
25 
26 <div class="container mybook">
27      <div class="row">
28          <div class="col-md-6">
29              <form action="" method="post">
30  {% csrf_token %} 31                  <div>
32                      <label for="">書籍名稱</label>
33                      <input type="text" class="form-control" name="title" value={{ title }}>
34                  </div>
35                  <div>
36                      <label for="">價格</label>
37                      <input type="text" class="form-control" name="price" value={{ price }}>
38                  </div>
39                  <div>
40                      <label for="">出版日期</label>
41                      <input type="date" class="form-control" name="date" value={{ date }}>
42                  </div>
43                  <div>
44                      <label for="">出版社</label>
45                      <input type="text" class="form-control" name="publish" value={{ publish }}>
46                  </div>
47 
48                  <input type="submit" class="btn btn-success pull-right">
49 
50 
51              </form>
52              <p class="opt_res">{{ opt_res }}</p>
53          </div>
54      </div>
55 </div>
56 {% endblock content %}
View Code

 

06 django模型層\book\templates\updatebook.html

 1 {% extends 'base.html' %}  2 
 3 {% block style %}  4  {{ block.super }}  5     <style>
 6  .mybook{
 7  margin-top: 50px;
 8         }
 9  .btn{
10  margin-top: 10px;
11         }
12  .opt_res{
13  margin-top: 50px;
14  color: red;
15         }
16     </style>
17 {% endblock style %} 18 
19 {% block title %} 20     <title>book</title>
21 {% endblock title %} 22 
23 {% block content %} 24     <h3>修改書籍</h3>
25 
26 <div class="container mybook">
27      <div class="row">
28          <div class="col-md-6">
29              <form action="" method="post">
30  {% csrf_token %} 31                  <div>
32                      <label for="">書籍名稱</label>
33                      <input type="text" class="form-control" name="title" value="{{ book_obj.title }}">
34                  </div>
35                  <div>
36                      <label for="">價格</label>
37                      <input type="text" class="form-control" name="price" value="{{ book_obj.price }}">
38                  </div>
39                  <div>
40                      <label for="">出版日期</label>
41                      <input type="date" class="form-control" name="date" value="{{ book_obj.pub_date|date:'Y-m-d' }}">
42                  </div>
43                  <div>
44                      <label for="">出版社</label>
45                      <input type="text" class="form-control" name="publish" value="{{ book_obj.publish }}">
46                  </div>
47 
48                  <input type="submit" class="btn btn-success pull-right">
49 
50 
51              </form>
52              <p class="opt_res">{{ opt_res }}</p>
53          </div>
54      </div>
55 </div>
56 {% endblock content %}
View Code
相關文章
相關標籤/搜索