Django學習(四)表單,讓資料庫更強大
表單,在HTML中的標籤為<form></form>
,在網頁中主要負責資料採集功能。我們在瀏覽網站時,常常會碰到註冊賬號、賬號登入等,這就是表單的典型應用。
在Django學習(2)資料寶庫中,我們學習了Django與MySQL資料庫的連線;在Django學習(3)模板定製中,我們學習了利用Django的模板將HTML設計與Python程式碼分離開來。這次,我們將要學習如何利用表單在網頁上直接操作MySQL資料庫。
我們延續Django學習(2)資料寶庫的Book專案,首先新建專案Book,並在Book專案中新建應用books:
cd /home/vagrant/django_project/
django-admin.py startproject Book
cd ./Book
django-admin.py startapp books
在settings.py中新增app,並設定資料庫連線為MySQL以及模板的查詢路徑:
在books的models.py中定義模型,程式碼如下:
from django.db import models
class MYBOOK(models.Model):
name = models.CharField(max_length=200)
price = models.FloatField()
def __str__(self):
return self.name+`:`+str(self.price)
並在MySQL中新建資料庫Book,然後將Django中的模型與MySQL中的Book資料庫連線:
python3 manage.py makemigrations
python3 manage.py migrate
這時會在MySQL中生成books_mybook表格。為了在網頁中利用表單操作books_mybook表格,我們寫了兩個HTML模板,一個是資料插入和查詢模板:index.html,一個是查詢結果模板:search_res.html。其中index.html模板如下:
<!DOCTYPE html>
<html>
<body>
<p>**********************************************</p>
<p>Input name and price of a book:</p>
<form action="/insert/" method="get">
name: <input type="text" name="name"> <br>
price: <input type="text" name="price"> <br>
<input type="submit" value="提交到MySQL">
</form>
<p>
{% if name and price%}
<script>alert("Insert into MySQL already!Please check MySQL")</script>
{% endif %}
</p>
<p>**********************************************</p>
<p>Query the price of a book:</p>
<form action="/query/" method="get">
Book name: <input type="text" name="book"> <br>
<input type="submit" value="查詢價格">
</form>
<p>**********************************************</p>
</body>
</html>
search_res.html模板如下:
<p>You searched for: <strong>{{ query }}</strong></p>
{% if books %}
<p>Found {{ books|length }} book{{ books|pluralize }}.</p>
<ul>
{% for book in books %}
<li>Book: <strong>{{ book.name }}</strong>, Price: <strong>{{book.price}}</strong></li>
<br>
{% endfor %}
</ul>
{% else %}
<p>No books matched your search criteria.</p>
{% endif %}
有了以上兩個模板,我們就有了網頁展示的模板。接下來,我們需要建立檢視,views.py程式碼如下:
from django.http import HttpResponse
from django.shortcuts import render_to_response
from books.models import MYBOOK
def index(request):
return render_to_response(`index.html`)
def insert(request):
NAME = request.GET[`name`]
PRICE = float(request.GET[`price`])
MYBOOK.objects.create(name=NAME, price=PRICE)
return render_to_response(`index.html`, {`name`:NAME, `price`: PRICE})
def query(request):
query = request.GET[`book`]
books = MYBOOK.objects.filter(name__icontains = query)
return render_to_response(`search_res.html`, {`query`:query, `books`: books}
在上述檢視中,index()載入原始的index.html網頁,insert()則插入書籍的名稱和價格資訊,提交後會彈出對話方塊,顯示“Insert into MySQL already!Please check MySQL”,query()則顯示查詢結果,該查詢為正則查詢,返回所有包含‘book’引數的書籍的名稱和價格,暫時不考慮書籍名稱不存在的情形。
最後,我們只需要設定好url.py檔案,並啟動server伺服器即可。其中urls.py程式碼如下:
from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
url(r`^admin/`, include(admin.site.urls)),
url(r`^form`, `books.views.index`),
url(r`^insert`, `books.views.insert`),
url(r`^query`, `books.views.query`),
]
啟動伺服器python3 manage.py runserver 8000,在瀏覽器中輸入localhost:8000/form,網頁顯示如下:
首先,我們先插入第一本書的資訊,如下網頁:
彈出的訊息框如下:
這樣我們就完成了第一本書的插入。按照此步驟,我們再插入9本書,它們分別為:[(‘Learning Pyspark’,35), (‘Dive into Scala’, 36), (‘Think in Java’, 46), (‘An introduction to Python’,35),(‘Learning Pandas’,24), (‘Learn Python in 7 Days’,28),(‘Python GUI Programming Cookbook’,38),(‘Python Data Structures and Algorithms’,45),(‘Python Machine Learning By Example’,50)].在MySQL中檢視,表格如下:
這樣就插入了十條記錄。然後我們在剛才的網頁進行查詢,頁面如下:
點選查詢價格按鈕,顯示的頁面如下:
搜尋效果還是可以的嘛~~
這樣我們就利用表單(form)完成了在網頁層面對資料庫的操作,所以說,表單,讓資料庫更強大~~
當然,這只是一個簡單的利用表單的例子,還有很多未實現的功能,如表單驗證,查詢錯誤處理等,相信機智如你,在讀者這篇文章後,一定能夠自己實現的~~
參考文獻:
1. 自強學堂 Django 表單: https://code.ziqiangxuetang.com/django/django-forms.html
2. Django_中文教程.pdf:http://download.csdn.net/download/huangzhichang13/8177581
相關文章
- django(django學習) 兩張表建立 插入資料Django
- Flyway讓資料庫版本管理更簡單資料庫
- react學習(四)- 表單React
- 大資料學習筆記(四)大資料筆記
- 讓Django支援多種資料庫Django資料庫
- 讓 Birt 報表指令碼資料來源變得既簡單又強大指令碼
- django book2 表單學習筆記Django筆記
- Django 使用心得 (四)多資料庫Django資料庫
- 大資料學習路線圖 讓你精準掌握大資料技術學習大資料
- 資料庫學習(四)連線查詢資料庫
- 讓AI簡單且強大:深度學習引擎OneFlow技術實踐AI深度學習
- ODC 3.4.0 現已上線,讓資料庫開發更簡單資料庫
- Ruby和Python哪個更強大?學習分析Python
- 創新讓大資料時代更輝煌大資料
- Django 1.11.7學習,配置MySQL資料庫(python3.5)DjangoMySql資料庫Python
- mysql,sqlserver資料庫單表資料過大的處理方式MySqlServer資料庫
- 大資料學習四:網路相關知識大資料
- 一個比 Redis 效能更強的資料庫Redis資料庫
- 資料庫學習筆記(四)2017.9.19資料庫筆記
- 大資料學習資料大資料
- 資料庫學習筆記之查詢表資料庫筆記
- Activiti學習筆記一:建立資料庫表筆記資料庫
- 大規模非同步新聞爬蟲: 讓MySQL 資料庫操作更方便非同步爬蟲MySql資料庫
- 大資料學習大資料
- Django——表單Django
- 風變程式設計,讓程式設計學習更簡單!程式設計
- Eudic歐路詞典讓您學習英語更簡單!
- Java學習十六—掌握註解:讓程式設計更簡單Java程式設計
- 四大類NOSQL資料庫SQL資料庫
- 資料庫ACDI四大特性資料庫
- 開源資料庫 LitePal 學習,強大好使的 CRUD資料庫
- 資料庫學習資料庫
- 資料庫 表單運用資料庫
- 讓資料更智慧的驅動業務——優炫自治資料庫資料庫
- 讓Docker功能更強大的10個開源工具Docker開源工具
- 雲端計算智慧化:讓資料庫更聰明資料庫
- 【強化學習】強化學習術語表(A-Z)強化學習
- 【從零開始學習 MySql 資料庫】(1) 建表與簡單查詢MySql資料庫