簡體   English   中英

在Django 1.7中使用多個通用視圖和一個基於類的視圖中的表單的最佳實踐

[英]Best practices for using multiple generic views and a form within one class based view in Django 1.7

我試圖弄清楚如何在Django 1.7中將多個基於類的通用視圖與表單一起使用。 我熟悉基於函數的視圖,但直到最近才嘗試基於類的視圖。

我了解基於類的視圖的方式是,它是一個python類,其中包含方法,其中包括post,get,delete和其他HTTP請求方法。 收到請求方法之一時,將調用這些方法。 例如,如果接收到HTTP GET,則將執行基於類的視圖內的get()方法。

現在,在此處的Django 文檔上,他們給出此代碼塊作為其views.py文件的示例

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = ['name']

class AuthorUpdate(UpdateView):
    model = Author
    fields = ['name']

class AuthorDelete(DeleteView):
    model = Author
    success_url = reverse_lazy('author-list')

我對此有些困惑,因為我認為最好做這樣的事情:

from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.core.urlresolvers import reverse_lazy
from myapp.models import Author

class Author(CreateView, DeleteView):
    model = Author
    fields = ['name']
    success_url = reverse_lazy('author-list')
#I assume this would have to be separate because they both implement a post method
class AuthorUpdate(UpdateView):
        model = Author
        fields = ['name']

因為它減少了代碼行,並且您將具有一個基於類的視圖來執行所有這三個操作。 我在網上可以找到的所有內容似乎都模仿了文檔並創建了多個基於類的視圖,而不是在一個基於類的視圖中使用多個泛型。

我的問題是,以這種方式編寫代碼是否有原因? 在基於單個類的視圖中使用多個泛型的最佳實踐到底是什么? 還是我甚至可以這種方式使用多個? 從本質上講,我可以像上面一樣寫這三個視圖嗎?

你的問題讓我有些困惑。 這些是三個單獨的視圖,可以在不同的URL上訪問,並且大概使用不同的模板。 將它們放在一個單獨的類中沒有任何收獲。 相反,這會使事情變得更加復雜:如何確定POST是更新還是刪除?

您最后提到了REST。 如果您要尋找的是某種REST API,那么您確實需要Django REST Framework ,它提供了基於REST的通用視圖。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM