django_cvbとFVB

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方式


]

おすすめ

転載: www.cnblogs.com/mhmh007/p/12153980.html