在setting裏進行基礎配置css
DATABASES={ 'default':{ 'ENGINE' : 'django.db.backends.mysql', #鏈接MYSQL數據庫 'NAME' : 'bookhomework', #設置鏈接的庫名 'HOST':'127.0.0.1', #設置本地鏈接方式 'POST':3306, #設置端口號 'USER':'root', #以root用戶權限登錄數據庫 'PASSWORD':'', #寫入sql數據庫登錄密碼,沒有設置不寫 'OPTIONS':{ #設置嚴格模式 'init_command':'set sql_mode="STRICT_TRANS_TABLES"', } } }
(嚴格模式的設置:當傳入一個字符串大於設置自己最大長度字符串時,就會報錯,這樣不會傳入一個截取不了所有的字符) STATIC_URL = '/static/' #別名設置 ,別名的設置讓html文件直接引入改路徑,即便別名名稱更改,也沒關係 STATICFILES_DIRS=[ os.path.join(BASE_DIR,'statics') ]
在與settings.py文件同級目錄下的__init__文件中設置html
import pymysql pymysql.install_as_MySQLdb()
在models.py文件中寫入數據,是給數據庫中的表格添加數據類型:python
from django.db import models #引入models模塊 # Create your models here. class Book(models.Model): name=models.CharField(max_length=32)#設置名字,類型爲字符串類型,最大長度爲32個字符 price=models.FloatField()#設置價格,類型爲浮點型 date=models.DateField() #設置時間 publisher=models.CharField(max_length=32)#設置出版社名稱,名字最大長度爲32個字節 運行manage.py,輸入命令,進行數據庫表格數據的同步: makemigrations migrate 以上兩行代碼執行成功後,在python中的databases中鏈接數據庫,便可看到鏈接的庫中建立的表格,再在數據庫中添加數據就行
在項目文件夾下建立一個statics文件夾,該文件負責存儲靜態文件,將下載好的bootstrap文件和jquery-3.4.1文件傳入其中,爲以後的html文件引用用mysql
在templates文件中建立一個show_books.html文件:jquery
{% load static %}#引入靜態文件 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href=" {% static 'bootstrap/css/bootstrap.min.css' %}"> </head> <body> <div class="container-fluid"></div> <h1>查看書籍</h1> <div class="row"> <div class="col-md-8 col-md-offset-2"> <div><a href="{% url 'add_book' %}" class="btn btn-primary">添加書籍</a></div> <table class=" table table-bordered table-hover table-striped"> <thead> <th>編號</th> <th>書籍名稱</th> <th>價格</th> <th>出版日期</th> <th>出版社</th> <th>操做</th> </thead> <tbody> {% for books_obj in all_books_objs %} #使用for循環來讓數據庫中的各行數據逐個調價到表格中 <tr> <td>{{ forloop.counter }}</td> <td>{{ books_obj.name }}</td> <td>{{ books_obj.price }}</td> <td>{{ books_obj.date|date:'Y-m-d' }}</td> #這個時間格式設置是將本來的date格式轉換爲普通用戶也能看懂的格式 <td>{{ books_obj.publisher }}</td> <td><a href="{% url 'edit_book' books_obj.pk %}" class="btn btn-warning">編輯</a> {# <a href="/del_book/{{books_obj.pk }}" class="btn btn-danger">刪除</a>#} <a href="{% url 'del_book' books_obj.pk %}" class="btn btn-danger">刪除</a> #(兩種方法實a標籤的跳轉,一個是固定格式路徑的,一個是引入靜態文件的) </td> </tr> {% endfor %} </tbody> </table> </div>
在urls和views裏的配置sql
urls: from app01 import views urlpatterns = [ url(r'^show_books/', views.show_books,name='show_books'), views: from django.shortcuts import render,HttpResponse,redirect from app01 import models def show_books(request): if request.method=='GET': all_book_objs=models.Book.objects.all() #引入數據庫中全部數據的對象 return render(request,'show_books.html', {'all_books_objs':all_book_objs}) #將對象寫入到html文件中去
效果圖:數據庫
此時咱們須要作的是點擊按鈕,作出相應的點擊事件,首先配置添加書籍按鈕django
點擊添加書籍按鈕的流程步驟:
1.點擊添加按鈕,跳轉到添加書籍信息的網址中
2.寫入相關的要添加的書籍的信息
3.點擊提交按鈕,將添加的信息寫入到數據庫中
4.再次跳轉到查看書籍的網頁當中去
5.此時查看書籍調取的是數據庫表格中的全部信息,就會將全部的信息展現出來,包括新建立的書籍信息
首先給查看書籍網頁中的添加按鈕添加一個a標籤,讓他點擊就自動跳轉到添加書籍的網頁中去bootstrap
<div><a href="{% url 'add_book' %}" class="btn btn-primary">添加書籍</a></div>#href裏的大括號裏的內容表明的是動態引入url網頁的意思,add_book網頁放的是同級目錄下,因此能夠直接寫文件名,若是想要動態引入的話,在urls.py配置裏面也必須添加上相關的
路徑名稱
跳轉到add_book網頁中,進行相關的網頁添加書籍信息配置:app
{% load static %}#別名的引入 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}"> #這個是引入bootstrap文件,利用別名的路徑設置 </head> <body> <div class="container-fluid"></div> <h1>添加書籍</h1> <div class="row"> <div class="col-md-8 col-md-offset-2"> #建立一個表單格式,提交的按鈕請求方式爲post方法,提交後路徑跳轉名稱仍是爲'add_book' <form action="{% url 'add_book' %}" method="post" > {% csrf_token %} <div class="form-group"> <label for="exampleInputEmail1">書籍名稱</label> <input type="text" class="form-control" id="exampleInputEmail1" placeholder='書籍名稱' name="name"> </div> <div class="form-group"> <label for="exampleInputEmail2">書籍價格</label> <input type="text" class="form-control" id="exampleInputEmail2" placeholder='書籍價格' name="price"> </div> <div class="form-group"> <label for="exampleInputEmail3">出版日期</label> <input type="date" class="form-control" id="exampleInputEmail3" name="date"> </div> <div class="form-group"> <label for="exampleInputEmail4">出版社</label> <input type="text" class="form-control" id="exampleInputEmail4" placeholder='出版社' name="publisher"> </div> <button type="submit" class="btn btn-success pull-right">Submit</button> #寫入一個button提交按鈕 </form> </div> </div> <script src="{% static 'jquery-3.4.1.js' %}"></script> <script src="{% static 'bootstrap/js/bootstrap.min.js'%}"> #一樣引入bootstrap的js文件 </script> </body> </html>
在urls和views裏的配置
urls: from app01 import views url(r'^add_book/', views.add_book,name='add_book'), views: def add_book(request): if request.method=='GET': return render(request,'add_book.html')
效果圖
設置add_book裏的點擊按鈕事件點擊以後就將寫入的信息保存到數據庫中,設置按鈕點擊的請求方式爲post請求方式,添加views函數的數據
from app01 import models def add_book(request): if request.method=='GET': return render(request,'add_book.html') else: #此時的不然就是當爲post請求提交時,作出如下操做 print(request.POST) #將html文件表單裏的內容逐個提取出來,並進行賦值 # name=request.POST.get('name') # price=request.POST.get('price') # date=request.POST.get('date') # publisher=request.POST.get('publisher') #第二種方法,得到html表單裏的內容,並將以字典的格式展示 book_info_dict=request.POST.dict() print(book_info_dict) #將字典中多餘的鍵值對刪除掉 del book_info_dict['csrfmiddlewaretoken'] #進行數據庫的數據建立,以字典的打散形式進行傳輸數據,一樣實現功能 models.Book.objects.create(**book_info_dict) #數據庫進行建立新的數據 # models.Book.objects.create( # name=name, # price=price, # date=date, # publisher=publisher # ) #進行頁面跳轉 return redirect('show_books')
(最後一步進行網頁跳轉到show_books網頁中,也可使用return render方式的方法進行,可是若是隻傳入一個網頁,那麼裏面的每行數據不會體現出來,只會出現一個標題欄,由於並無將數據庫中的所有數據所有提取出來,並進行寫入html網頁的這步操做,因此纔會這樣,因此還要加上這一步;
綜上所述,直接使用redirect跳轉方式能夠直接找到數據,建議使用redirect方法)
在show_books網頁中設置刪除按鈕和編輯按鈕點擊事件
給show_books裏的刪除按鈕增長a標籤的跳轉功能
<a href="{% url 'del_book' books_obj.pk %}" class="btn btn-danger">刪除</a>#跳轉的數據爲del_book/後面是點擊的刪除的按鈕的id號
urls和views裏的配置:urls:
url(r'^del_book/(\d+)', views.del_book,name='del_book'), #此時在這裏配置加上數字的正則匹配符,就是得到第幾行點擊的刪除按鈕,回來執行函數時,能夠直接找到該行數據並進行刪除 views: def del_book(request,n): #n參數表明的時傳入的是第幾行數據 models.Book.objects.filter(pk=n).delete() #數據庫找到關於第幾行的數據,並進行刪除
return redirect('show_books')
首先在show_books按鈕的編輯按鈕增長跳轉內容
<a href="{% url 'edit_book' books_obj.pk %}" class="btn btn-warning">編輯</a>
編寫一個edit_book.html文件
{% load static %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="{% static 'bootstrap/css/bootstrap.min.css' %}"> </head> <body> <div class="container-fluid"></div> <h1>修改書籍</h1> <div class="row"> <div class="col-md-8 col-md-offset-2"> <form action="" method="post" > {% csrf_token %} <div class="form-group"> <label for="exampleInputEmail1">書籍名稱</label> <input type="text" class="form-control" id="exampleInputEmail1" placeholder='書籍名稱' name="name" value="{{ res.name }}">#設置表格裏的內容生成爲本行的原來內容 </div> <div class="form-group"> <label for="exampleInputEmail2">書籍價格</label> <input type="text" class="form-control" id="exampleInputEmail2" placeholder='書籍價格' name="price" value="{{ res.price }}"> </div> <div class="form-group"> <label for="exampleInputEmail3">出版日期</label> <input type="date" class="form-control" id="exampleInputEmail3" name="date" value="{{ res.date }}"> </div> <div class="form-group"> <label for="exampleInputEmail4">出版社</label> <input type="text" class="form-control" id="exampleInputEmail4" placeholder='出版社' name="publisher" value="{{ res.publisher }}"> </div> <button type="submit" class="btn btn-success pull-right">Submit</button> </form> </div> </div> <script src="{% static 'jquery-3.4.1.js' %}"></script> <script src="{% static 'bootstrap/js/bootstrap.min.js'%}"></script> </body> </html>
在urls和views裏的配置:
urls: url(r'^edit_book/(\d+)', views.edit_book,name='edit_book'), views: def edit_book(request,n): if request.method=='GET': res=models.Book.objects.get(pk=n) return render(request,'edit_book.html' ,{'res':res}) else: book_info_dict=request.POST.dict() print(book_info_dict) del book_info_dict['csrfmiddlewaretoken'] models.Book.objects.filter(pk=n).update(**book_info_dict) return redirect('show_books') #若是爲get模式請求,則自動推送edit_book.html文件,若是爲post請求,則將表單裏的內容數據提取出來,找到數據庫對應的行數據進行替換,替換完成後進行跳轉到show_books網頁中去