102デコレータ規制要求方法:require_http_methods、require_GET、require_POST、require_safe

クライアントとサーバの間に2つの最も一般的な方法を要求します。

1. GET要求は、一般的にサーバーにデータを取得するために使用されますが、サーバーにデータを送信しません、サーバーのステータスが変更されません。
2.POST要求は通常、サーバにデータを送信するために使用され、サーバーのステータスが変更されます。

規制要求デコレータ:

Djangoはビルトインビューデコレータを視野だけのようなGETメソッドやアクセスなど正面図などいくつかの制限を、提供することができます。一般的に組み込みビューデコレータを使用しました。

1. django.http.decorators.http.require_http_methods:合格するこのデコレータ必要メソッドのリストにアクセスすることができます。
クライアントは、GETリクエストを送信した場合、(1)例えば、それは、物品を追加するためにユーザインタフェースに戻り、POST要求が送信される場合、データベースに送信するデータが格納されます。views.pyファイル、次のサンプルコード:
from django.views.decorators.http import require_http_methods
from django.http import HttpResponse
from django.shortcuts import render
from .models import Article


@require_http_methods(['GET', 'POST'])
def index2(request):
    <!--首先判断客户端发送的是哪种请求GET OR POST-->
    <!--注意这里一定要是“==” 只有“==”才会返回True or False-->
    if request.method == 'GET':
        return render(request,'static/add.html')
    else:
        title = request.POST.get('title')
        content = request.POST.get('content')
        price = request.POST.get('price')
        Article.objects.create(title=title, content=content, price=price)
        articles = Article.objects.all()
        return render(request, 'static/index.html', context={'articles': articles}
次のように(2)のindex.htmlサンプルコードです。
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<table>
    <thead>
    <tr style="width: 20px">标题</tr>
    <tr style="width: 20px">内容</tr>
    <tr style="width: 20px">价格</tr>
    <tr style="width: 20px">创建时间</tr>
    </thead>
    <tbody>
    {% for article in articles %}
        <tr>
            <td><a href="#">{{ article.title }}</a></td>
            <td><a href="">{{ article.content }}</a></td>
            <td><a href="">{{ article.price }}</a></td>
            <td>{{ article.create_time }}</td>
        </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>
(3)urls.pyファイル、次のサンプルコード:
from django.urls import path
from article import views

urlpatterns = [
    path('', views.index, name='index'),
    path('add/', views.add, name='add'),
    path('add2/', views.index2, name='add2'),
]
127.0.0.1:ポストマンソフトウェアでは、POSTリクエストの入力されたURLを使用して3000 / ADD2 /(ここで私は、ポート番号は3000です修正デフォルト8000​​)のパラメータのタイトル、およびボディを必要としている以下のURLで渡さ。、内容、価格はこの結果を返します。

ここに画像を挿入説明

ポストマンソフトウェアGETリクエストのアクセスURLを使用して:127.0.0.1:3000 / ADD2 /、このページの記事に戻りますが、ポストマン、入力されたデータでも、フォーム上の送信ボタンをクリックした後、任意の反応を持っていない、それがすることができますブラウザは、GETリクエストへのアクセスを使用しています。送信ボタンをクリックして、データベース内の新しく追加された記事情報を見ることができます。

ここに画像を挿入説明

2. django.views.decorators.http.require_GET:デコレータ等価require_http_methods([「GET」]は)のみビューへのアクセスを許可速記方法GETです。
(1)例えば、私たちは次のようにGETリクエストがサンプルコードでホーム・ページ、views.pyファイルを訪問することができます:
from django.views.decorators.http import require_GET


@require_GET
def index(request):
    articles = Article.objects.all()
    return render(request, 'static/index.html', context={'articles':articles})
(2)サンプルコードは、index.htmlを次の
    <ul>
    {% for article in articles %}
        <li>{{% article.title %}}</li>
        <li>{{% article.content %}}</li>
        <li>{{% article.price %}}</li>
    {% endfor %}
    </ul>
3. django.views.decorators.http.require_POST:デコレータ等価require_http_methods([「POSTは」])速記方法POST要求が専用ビュー、次のサンプルコードにアクセスすることを許可されています。
from django.views.decorators.http import require_POST


@require_POST
def add(request):
    title = request.POST.get('title')
    content = request.POST.get('content')
    Article.objects.create(title=title, content=content)
    return HttpResponse('success')
4. django.views.decorators.http.require_safe:短い形式でデコレータ等価require_http_methods([「GET」、「HEAD」])、ビューにアクセスするための比較的安全な方法の使用のみ、なぜならGETとHEADありませんそれはリクエストの比較的安全な方法であるように、サーバーは、CRUDの動作を生成します。
公開された131元の記事 ウォン称賛30 ビュー8385

おすすめ

転載: blog.csdn.net/zjy123078_zjy/article/details/104237221