Django學習(四)表單,讓資料庫更強大

jclian91發表於2017-12-19

  表單,在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以及模板的查詢路徑:
設定settings.py
  在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中檢視,表格如下:
MySQL中books_mybook表格
這樣就插入了十條記錄。然後我們在剛才的網頁進行查詢,頁面如下:
查詢
點選查詢價格按鈕,顯示的頁面如下:
查詢結果
搜尋效果還是可以的嘛~~
  這樣我們就利用表單(form)完成了在網頁層面對資料庫的操作,所以說,表單,讓資料庫更強大~~
  當然,這只是一個簡單的利用表單的例子,還有很多未實現的功能,如表單驗證,查詢錯誤處理等,相信機智如你,在讀者這篇文章後,一定能夠自己實現的~~



參考文獻:
1. 自強學堂 Django 表單: https://code.ziqiangxuetang.com/django/django-forms.html
2. Django_中文教程.pdf:http://download.csdn.net/download/huangzhichang13/8177581


相關文章