翻到一半發現有簡體版可以看,不過我想我還是就看英文版翻吧!
如果覺得我翻的摸不著頭緒可以去看看簡體版
承上篇 來源
框架提供 layer 讀取、寫入、查詢、刪除 db 裡的資料 ,
而 layer 有 Object-Relational Mapper ( ORM )
的特性。
(這裡的 layer 有階段性或階層的意思 ; 相關資料可以看
【筆記】Architectural pattern (架構模式) - 橘子亂說話 , 這篇文章也有帶到其他前面提過的主題)
ORM
有兩個好處:
pattern
幹些勾當,像是刪除 db 記錄 )以 Django 為例 , 他具有 ORM , 參考用來定義記錄結構 object 稱作 model
,
model 規範檔案儲存的型態 , 同時處理基本的驗證 ( 例如我們填信箱欄位時的驗證 ) , 如字串長度、預設值、選項 ... 。
關於 model
& ORM
的資訊請參照下列我的參考資料 , 阮一峰大師的教學裡面有 JS 的 code 範例 。
這邊有些句子實在是頗難翻譯請容我略過翻譯,而且我好像庫存快沒了 :
下面這段 code , 有規範文字長度 、 預設值 ... 等等。
team_level 是一個 field ( 在上面參考文章中翻為字段 )
#best/models.py
from django.db import models
class Team(models.Model):
team_name = models.CharField(max_length=40)
TEAM_LEVELS = (
('U09', 'Under 09s'),
('U10', 'Under 10s'),
('U11', 'Under 11s'),
... #list our other teams
)
team_level = models.CharField(max_length=3,choices=TEAM_LEVELS,default='U11')
Django model 有提供簡易的 db 查詢 API , 可以同時設定許多不同的查詢條件。
例如: 結果要完全符合 、 大小寫是否需要完全符合 、 字數大於多少 ...
而這段 code 是 view function (resource handler) 呈現 U09
隊伍資料。
可以注意倒數第三行的 filter()
還有裡面參數的命名方式
#best/views.py
from django.shortcuts import render
from .models import Team
def youngest(request):
list_teams = Team.objects.filter(team_level__exact="U09")
context = {'youngest_teams': list_teams}
return render(request, 'best/index.html', context)
框架的 templating 系統 , 讓資料輸出 、 產出 HTML , 也可以產出其他類型的文件檔案
框加從儲存的資料產出的形式包含 JSON, XML
Django 允許變數使用 雙花括弧(大括號) 來區別變數 , 甚至可以用 {% expression %}
寫入 expressions ( 如 loop
, if
... )
Note: 很多 templating system 的語法都很相似: Python 的 Jinja2 , JS 的 handlebars, moustache 等等
例如:
#best/templates/best/index.html
<!DOCTYPE html>
<html lang="en">
<body>
{% if youngest_teams %}
<ul>
{% for team in youngest_teams %}
<li>{{ team.team_name }}</li>
{% endfor %}
</ul>
{% else %}
<p>No teams are available.</p>
{% endif %}
</body>
</html>