Django运维后台的搭建之二:建立template和对应的ModelForm
在前一篇我們已經建立了一套數據庫用來存儲我們的云資源資料以及有了一個簡單的admin后臺,但是這個后臺畢竟太難看了,我們可以自己搭建一個更漂亮的界面來滿足領導的需求,那么這個時候就需要template。在template中,我們存放HTML頁面,并通過Django的API能夠調用這些界面,同時能夠把一些數據傳遞到這些頁面上。
1.我們在之前已經建立好的Online文件夾里建立一個templates文件夾。
2.url.py里制定訪問的網頁路徑,在這里我們先制定兩個,一個是線上服務器的界面,另一個是數據庫:
from?django.conf.urls?import?url from?django.contrib?import?admin import?Online.views urlpatterns?=?[url(r'^admin/',?admin.site.urls),url(r'^alionlineecs/',?Online.views.alionlineecs),url(r'^rds/',?Online.views.rds), ]3.在views.py里寫上對應的函數:
#?-*-?coding:?UTF-8?-*- from?django.shortcuts?import?render from?.models?import?alionlineECS,RDS????#這里的import是來自model.py里的 def?alionlineecs(request):data?=?alionlineECS.objects.all()????#這里也是要跟model.py一樣context?=?{'data':?data,}#跳轉到相應頁面,并將值傳遞過去return?render(request,'alionlineecs.html',context)????#規定alionlineecs.html作為展示頁def?rds(request):data?=?RDS.objects.all()context?=?{'data':data,}return?render(request,'rds.html',context)這個代碼里面我寫了 data=alionlineECS.objects.all(),這是通過DJANGO的ORM來進行SQL操作,建立context這個字典,將data值傳遞到相應頁面。
4.在template文件夾里面建立alionlineecs.html和rds.html 這兩個文件,alionlineecs.html如下:
<!DOCTYPE?html> <html> <head?lang="en">??<meta?charset="UTF-8">??<title></title>?? </head> <body><table><tr><th>云服務器名稱</th><th>云服務器類型</th><th>云服務器內網地址</th><th>云服務器外網地址</th><th>云服務器外網帶寬</th><th>云服務器配置</th><th>備注</th></tr>{%?for?item?in?data?%}<tr><td>{{?item.ecs_name?}}</td><td>{{?item.ecs_type?}}</td><td>{{?item.ecs_inip?}}</td><td>{{?item.ecs_outip?}}</td><td>{{?item.ecs_ipwidth?}}</td><td>{{?item.ecs_spec?}}</td><td>{{?item.ecs_remarks?}}</td></tr>{%?endfor?%}</table> </body> </html>而rds.html的內容如下:
<!DOCTYPE?html> <html> <head?lang="en">??<meta?charset="UTF-8">??<title></title>?? </head> <body><table><tr><th>數據庫名稱</th><th>數據庫類型</th><th>mysql版本</th><th>數據庫規格</th><th>數據庫地址</th><th>備注</th><th>存儲空間</th></tr>{%?for?item?in?data?%}<tr><td>{{?item.rds_name?}}</td><td>{{?item.rds_type?}}</td><td>{{?item.rds_mysql?}}</td><td>{{?item.rds_spec?}}</td><td>{{?item.rds_ip?}}</td><td>{{?item.rds_remark?}}</td><td>{{?item.rds_status?}}</td></tr>{%?endfor?%}</table> </body> </html>可以看出item里面的各個項就是model.py里面的項,這樣就會一一對應。其中用{% %}括起的就是django的模板語言,在django的模板語言中,包含了類似于for循環,if等條件判斷語句,可以非常靈活地滿足用戶的各種需求。其中,` data `用來在頁面上顯示data的值。此后,我們還將提到的include和block功能,將會非常方便地繼承網頁。
5.現在去啟動django,然后在瀏覽器進入admin后臺,添加兩個rds實例,比如:
然后在瀏覽器嘗試url中定義的rds的路徑,就可以訪問相應頁面了:
但是我們還是不希望進入admin去改,畢竟 admin是后臺,我們還是更希望在頁面里進行增刪改查的工作,那么要通過頁面往數據庫里傳遞數據是要通過表單的,而django的表單就叫做forms。這里我們使用ModelForm,因為我們之前已經寫了一個model.py,而要添加的內容肯定都是model.py里的項,所以就采用ModelForm,改動很小,甚至可以用ModelForm來改model.py。
首先現在Online這個文件夾里面建立一個叫form.py,內容如下:
?2.由于要建立url與頁面的關系, 我們要在url.py里追加這樣的話:
url(r'^addalionlineecs/',?Online.views.addalionlineecs), url(r'^addslb/',?Online.views.addslb), url(r'^addrds/',?Online.views.addrds),?3.然后還要在view.py里添加對應的函數關系:
from?forms?import?alionlineForm,SLBForm,RDSForm def?addalionlineecs(request):#獲取來自alionlineForm的表單數據??form?=?alionlineForm(request.POST?or?None)#判斷form是否有效if?form.is_valid():#創建實例,需要做些數據處理,暫不做保存instance?=?form.save(commit=False)#將登錄用戶作為登記人instance.node_signer?=?request.user#保存該實例instance.save()#跳轉至列表頁面??return?redirect('/alionlineecs/')#創建context來集中處理需要傳遞到頁面的數據??context?=?{'form':?form,}#如果沒有有效提交,則仍留在原來頁面??return?render(request,?'addalionlineecs.html',?context)?4.來到template里新寫一個addalionlineecs.html,內容如下:
<!DOCTYPE?html> <html> <head?lang="en">??<meta?charset="UTF-8">??<title></title>?? </head> <body><form?method='POST'?action=''>{%?csrf_token?%}{{?form?}}<input?type='submit'?value='提交'?/></form> </body> </html>?5.來到瀏覽器里,打開對應的addonlineecs.html就會看到添加的界面了,就不用在admin里添加了:
點擊旁邊的“提交”之后,看到地址欄機會跳到alionlineecs這個界面:
這樣一個基于頁面的增刪改查的環境就搭建完畢了。
轉載于:https://blog.51cto.com/chenx1242/1946950
總結
以上是生活随笔為你收集整理的Django运维后台的搭建之二:建立template和对应的ModelForm的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ci框架的session类,怎么使用ci
- 下一篇: 【HRS项目】Axure兴许问题解决--