CVBすなわち伝送GETとPOSTリクエスト目的球ビュークラスビューと2つの方法で
言葉遣いは、ビュー内のHTML(form.html)、書き込みロジック(CVB&FVB)を定義し、前端と後端が分離されていません
注:問題CSRFノート、提出されたデータが繰り返し報告される場合は、複数回403、ソリューションの2種類
コメント-settings.py MIDDLEWARE- CSRF(4行目)において
2.書き込み{%csrf_token%} form.htmlで
form.htmlコード
<!DOCTYPE HTML > < HTML LANG = "EN" > < 頭> < メタ文字コード= "UTF-8" > < タイトル>タイトル</ タイトル> </ ヘッド> < 身体> < フォームアクション= "/ add_article /" 方法= "POST" >
{%csrf_token%}
タイトル:< 入力タイプ=「テキスト」名前=「タイトル」> DESC:< 入力タイプ=「テキスト」名前=「DESC」> 内容:< 入力タイプ=「テキスト」名前=「コンテンツ」> カテゴリ:< 選択名= "カテゴリ" > {%Cについてcategorysにおける%} < オプション値= "{{c.id}}" > {{c.name}} </ オプション> {%ENDFOR%} </ 選択> < 入力タイプ= "提出" 値= "提交" > </ 構成> </ ボディ> </ HTML >
views.pyコード
#機能FVB方式 デフadd_article(リクエスト): もし request.method == ' GET ' : categorys = Category.objects.all() の戻りレンダリング(リクエスト、' form.html ' 、地元の人々 ()) 他: タイトル =要求。 POST.get(' タイトル' ) DESC = request.POST.get(' DESC ' ) コンテンツ = request.POST.get(' コンテンツ' ) カテゴリ= request.POST.get(' カテゴリ' ) の記事 =条(タイトル=タイトル、DESC = DESC、CATEGORY_ID =カテゴリ、コンテンツ= コンテンツ) article.save() の戻り HttpResponseRedirect(' /ブログ')#重定向 #のクラスCVB方式 クラスArticleView(ビュー): デフ(自己、リクエスト)を取得: categorys = Category.objects.all() の戻りが(リクエスト、レンダリング' form.html ' 、地元の人々は()) デフ(自己、リクエストを)投稿: タイトル= request.POST.get(' タイトル' ) DESC = request.POST.get(' DESC ' ) コンテンツ = request.POST.get(' コンテンツ' ) カテゴリ = request.POST.get(' カテゴリ' ) の記事 =条(タイトル=タイトル、DESC = DESC、CATEGORY_ID =カテゴリ、コンテンツ= コンテンツ) article.save() の戻り HttpResponseRedirect(' /ブログ') #重定向
urls.py
django.contrib インポートADMIN から django.urls インポート経路 から user.views インポートインデックス、テスト、ブログ、詳細、add_article、ArticleView urlpatterns = [ パス(' ADMIN / ' 、admin.site.urls)、 パス(' インデックス/ 'インデックス)、 #の追加アクセスURL、インデックス/カスタマイズすることができ、views.pyインデックスメソッド パス(' テスト/ ' テスト)、 パス(' ブログ/ ' ブログ)、 #のパス('カテゴリー/ <INT:ID>」、カテゴリ)、 経路(' ディテール/ ' 、ディテール)、 #1 パス( 'add_article /'、add_article)、#FVB方式 パス(' add_article / '、ArticleView.as_view())、 #CVB方式 ]