我已經爲一個功能創建了一個單獨的應用程序,我打算使用這個第三方應用程序進行擴展,我不打算觸摸它的代碼。Django:如何使用DRY原則覆蓋第三方視圖?
該視圖我想擴展,張貼問題或獲取用戶提出問題的形式。 我想使用此視圖發佈文章。它使用的形式是不同的。
的僞代碼如下:
post_question_view(request)
If user is authenticated and read only, redirect somewhere else.
form = form.Askquestionform(request.REQUEST) (I would like to do form = form.AskArticleform())
If the request is post and form is valid, get clean data. (The article will include additional data)
If user is authenticated, draft a question and write the question to the database. Generate a new-question-posted signal and redirect. (I don't have to make any changes here I guess)
If user is not authenticated, create anonymous question, write it to the database and redirect to the login page.
If the request is get fill in the form intial and render to ask_question.html (I would like to render to ask_article.html)
大部分的代碼是有與需要做輕微的爭吵。我需要填寫幾個空白,並添加一些新的空白到現有的代碼。 我如何使用幹princliple做到這一點?
- 我應該爲2個函數創建一個包裝並根據請求調用合適的包裝嗎?
- 可以使用裝飾器嗎?表單將包含新字段,因此不修改當前視圖,我不認爲它是可能的。
- 或者除了將這個視圖複製到我的應用程序並進行修改之外,沒有別的辦法嗎?
你應該真的發佈一些真實的代碼示例,因爲選項可能會有所不同,這取決於第三方視圖的實現。 –
您試圖在此描述的視圖是由您還是第三方應用程序編寫的?由於這種模糊的代碼很難,你能更接近真實的情況嗎? – Arpit
源函數(你想要擴展的)是否有必要的形式參數來傳遞你想要的東西(例如不同的形式)? – sergzach