中興大學 Python Django網頁App開發基礎班第01期 IV
2023/08/09-2023/08/30
08/09物件整合與導向
這次將前幾次內容整合insert/ update/ delete
後簡化流程,陸續使用物件導向方式,規劃流程如下:
util - defaultModule
- 流程控制 :
launch(request,templateName)->HttpResponse
- 抓資料 :
get_select_data(act,request)->None
- 畫面處理 :
render_view(act,request)->HttpResponse
- 資料檢查 :
check_data(act,request)->bool
- 資料入檔I/O :
apply_data(act,request)->None
- 額外處理 :
extra_action(arc,request)->HttpResponse
views
建構1個定義 studAll
、一個 class 處理類別StudAll
來繼承 util.py
的類別,接續所有處理動作都會在這裡建立。
def studAll
class StudAll
接下來是處理資料的重點:
- 流程控制 :
- 抓資料 :
- 畫面處理 :
- 資料檢查 :
- 資料入檔 : 也就是新增/修改/刪除對最終對資料處理。
- 額外處理 : 此次課程先不建立
urls
定義一個 "stud/"
路由並取消原本 stud/ins/
、stud/del/
、stud/upd/
、stud/lst/
的路由。
template
建立 studAll.html
(可從原本studList
直接複製),然後陸續將之前建立的表單<table>
都掛在 <% if %> <% endif %>
內。
08/11重鋪暫存資料畫面
在輸入錯誤資料時,會導出彈跳視窗後重整資料,此時剛剛操作指所輸入的暫存欄位全部會被刷新,變成空白。為解決此問題,須將輸入的資料進行重鋪畫面,減少操作者重新輸入的窘境。
- HTML的重鋪項目:
Insert
<input type="text">
文字輸入標籤,基本上只要加入vaule
屬性,使用Jinja
的if
判斷。
html
<div>
<label></label>
<input type="text"
value="{% if request.method == 'POST' %}
{{request.POST.studid}}
{% endif %}">
</div>
<input type="checkbox">
查核標籤,這裡就比較複雜點,因為多個查核標籤整合為一個div時,在html判斷只會出現其中1筆查核內容,其他幾筆就消失了,所以必須要從後端處理後再丟出來。 一般寫法:
py
postSet=None
if request.method == 'POST':
postSet = request.POST.copy()
for item in request.POST.keys():
if item not in ['langchi','langeng','langjpn']:
postSet[item]=request.POST[item]
else:
postSet[item]="".join(request.POST.getlist(item))
# print(postSet)
簡式的寫法:
py
postSet = None /
if request.method == "GET" /
else dict(zip(request.POST.keys(),[request.POST[item] /
if item not in ["langchi", "langeng", "langjpn"] /
else "".join(request.POST.getlist(item)) /
for item in request.POST.keys() ]))
<select> <option> </select>
下拉選單標籤,一樣使用判斷方式來顯示。
Update
- 這是一個Django Template的標籤語法,進行參數篩選的動作,指定如果接收值為none,則回傳指定數值,參考w3s_default_if_none。
template這樣寫:
<input type="date">
日期標籤,此標籤有卡住顯示的問題。
在views.py中引入django.utils import timezone
模組,然後運用timezone.datetime.strftime()
操作。
bootstrap彈跳視窗代替js的alart
因為Js的alart容易被瀏覽器阻擋,所以可以使用bootstrap的彈跳視窗功能。
Django靜態模組
靜態模組資料夾一律命名 static
,放置的位置預設為app
本身的資料夾內,如果位置不同需要到settting.py
設定。 其次重點在
- 在
template
的html最上方放置{% load static %}
。 <img/>標籤
的src
內也需要放置{% static 'xxx.png' %}
。
TIP
這裡有個開源的 iconfinder 網站,可以尋找Icon。