1 我們在用Django編程時(shí),會(huì)發(fā)現(xiàn),經(jīng)常需要用到列表、詳情、修改這些操作。這些操作幾乎可以滿足數(shù)據(jù)編輯的大部分要求。那能不能像YII2腳手架功能一樣直接提供一個(gè)通用的模板類,只需指定幾個(gè)必要的參數(shù),所有的功能自己去實(shí)現(xiàn)呢。
2 Python/ target=_blank class=infotextkey>Python 語言Django 框架,剛好提供這樣的功能,它有很多叫法,如 類視圖、通用視圖、簡化視圖,都指的是它。我們可以把它看成Django 框架的腳手架。
3 Django簡化視圖底層的本質(zhì)是通過從URL傳遞過來的參數(shù)去數(shù)據(jù)庫查詢數(shù)據(jù),加載一個(gè)模板,利用得到的數(shù)據(jù)渲染模板(按照路由、視圖、模板、模型的路線圖)。
4 以下是Django 框架提供的簡化視圖,可以直接拿來使用。
View ------------------- 所有類視圖的基類
TemplateView --------------渲染一個(gè)template
RedirectView ----------------重定向類視圖
? 通用顯示視圖Display view:
? DetailView ---------------展示單個(gè)object
? ListView ------------------展示多個(gè)object
? 通用編輯視圖Edit view:
? FormView -------------- 顯示一個(gè)form表單
? CreateView ------------ 創(chuàng)建一個(gè)對象
? UpdateView ------------更新對象
? DeleteView --------------刪除對象
5 例,路由代碼
path('', views.IndexView.as_view(), name='index'),
視圖代碼
class IndexView(generic.ListView):
template_name = 'polls/index.html'
context_object_name = 'latest_question_list'
def get_queryset(self):
return Question.objects.order_by('-pub_date')[:5]
6 小貼士 6-1通用視圖實(shí)際上是類視圖的一種,Django類視圖的完整架構(gòu)還是很龐大的。筆者只是提綱挈領(lǐng),有興趣可以試著搜索“使用Django通用視圖的get_queryset, get_context_data和get_object等方法”深入學(xué)習(xí)。
6-2 筆者在看一些程序員在做php后臺(tái)維護(hù)時(shí),數(shù)據(jù)庫經(jīng)常被SQL注入,其實(shí)簡單點(diǎn)使用addslashes()函數(shù)就能解決大部分問題。