Django-08データ処理(取得、返却)

データを取得する

URLスプライシングパラメータ

request.GET.get('键') # 获取单个值,get('键',默认值)
request.GET.getlist('键') # 获取多个值,getlist('键',默认值)

request.POST.getlist('键')

非フォームデータ

json.loads(request.body) # 直接获取请求体,再转化为字典

リクエストヘッダー

request.META['CONTENT_TYPE']

一般的なリクエストヘッダー:

CONTENT_LENGTH –リクエスト本文の長さ(文字列として)。

CONTENT_TYPE-リクエスト本文のMIMEタイプ。

HTTP_ACCEPT-応答に受け入れられるコンテンツタイプ。

HTTP_ACCEPT_ENCODING-応答の許容可能なエンコーディング。

HTTP_ACCEPT_LANGUAGE-応答に使用できる言語。

HTTP_HOST-クライアントによって送信されるHTTPホストヘッダー。

HTTP_REFERER-参照ページ(ある場合)。

HTTP_USER_AGENT-クライアントのユーザーエージェント文字列。

QUERY_STRING –単一の(解析されていない)文字列としてのクエリ文字列。

REMOTE_ADDR-クライアントのIPアドレス。

REMOTE_HOST-クライアントのホスト名。

REMOTE_USER-Webサーバーによって認証されたユーザー(存在する場合)。

REQUEST_METHOD–「GET」や「POST」などの文字列。

SERVER_NAME-サーバーのホスト名。

SERVER_PORT-サーバーのポート(文字列として)。

その他の一般的なHttpRequestオブジェクト属性

method:リクエストに使用されるHTTPメソッドを示す文字列。一般的な値には「GET」、「POST」が含まれます。

user:要求されたユーザーオブジェクト。

path:ドメイン名とパラメータ部分を除く、要求されたページの完全なパスを表す文字列。

エンコーディング:送信されたデータのエンコーディング方法を表す文字列。

	如果为None则表示使用浏览器的默认设置,一般为utf-8。

	这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任						何访问将使用新的encoding值。

ファイル:アップロードされたすべてのファイルを含む辞書のようなオブジェクト。

データを返す

HttpResponse

HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)

Djangoは、ステータスコードをすばやく設定できる一連のHttpResponseサブクラスを提供します

  • HttpResponseRedirect 301
  • HttpResponsePermanentRedirect 302
  • HttpResponseNotModified 304
  • HttpResponseBadRequest 400
  • HttpResponseNotFound 404
  • HttpResponseForbidden 403
  • HttpResponseNotAllowed 405
  • HttpResponseGone 410
  • HttpResponseServerError 500

JsonResponse

jsonデータを返し、辞書をjson文字列に自動的に変換します

from django.http import JsonResponse

def response(request):
    return JsonResponse({'city': 'beijing', 'subject': 'python'})

リダイレクト

from django.shortcuts import redirect

def response(request):
    return redirect('/get_header')

逆分析

ページが頻繁にジャンプする場合、アドレスを動的に取得できます。

トータルルーティング

名前空間を使用してサブアプリケーションのエイリアスを作成する

# path('',include(('子应用.urls','子应用名'),namespace='别名'))
path('',include(('request_response.urls','request_response'),namespace='request_response'))

サブアプリケーション

サブアプリケーションのサブルートをエイリアスします

path('indexhaha/',views.IndexView.as_view(),name='index')

見る

ルートのエイリアスを使用して、ルートの実際のアドレスを動的に解決します

# ret_url = reverse('子应用名:子路由名')
ret_url = reverse('request_response:index')
return redirect(ret_url)

ミドルウェアの定義と使用

Djangoはミドルウェアに6つのメソッドをプリセットします。これらの6つのメソッドは、入力または出力に介入するために、さまざまな段階で自動的に実行されます。

  1. 初期化方法:

Djangoプログラムを起動し、ミドルウェアの初期化時に1回自動的に呼び出して、現在のミドルウェアを有効にするかどうかを決定します

def __init__(self, get_response=None):
  pass

2.リクエストを処理する前のメソッド:(重要)

各リクエストを処理する前に、自動的に呼び出され、NoneまたはHttpResponseオブジェクトを返します。

def process_request(self, request):
  pass

3.ビューを処理する前の方法:(重要)

各ビューを処理する前に、自動的に呼び出され、NoneまたはHttpResponseオブジェクトを返します。

def process_view(self, request, view_func, view_args, view_kwargs):
  pass

4.テンプレート応答を処理する前のメソッド:

各テンプレート応答を処理する前に、自動的に呼び出され、renderメソッドを実装する応答オブジェクトに返されます。

def process_template_response(self, request, response):
  pass

5.応答を処理した後の方法:(重要)

各応答がクライアントに返される前に、自動的に呼び出され、HttpResponseオブジェクトが返されます。

def process_response(self, request, response):
  pass

6例外処理:

ビューが例外をスローすると、ビューは自動的に呼び出され、HttpResponseオブジェクトを返します

def process_exception(self, request,exception):
  pass

ケーススタディ

ミドルウェアを定義する

mymiddlewareファイルはプロジェクトディレクトリに作成できます

# 导入中间件的父类
from django.utils.deprecation import MiddlewareMixin


class TestMiddleware1(MiddlewareMixin):
    """自定义中间件"""
    def process_request(self, request):
        """处理请求前自动调用"""
        print('process_request1 被调用')

    def process_view(self, request, view_func, view_args, view_kwargs):
        # 处理视图前自动调用
        print('process_view1 被调用')

    def process_response(self, request, response):
        """在每个响应返回给客户端之前自动调用"""
        print('process_response1 被调用')
        return response

ミドルウェアを登録する

MIDDLEWARE = [
    'book.middleware.TestMiddleware1',  # 添加中间件
]

ビューを定義する

def middleware(request):
    print('view 视图被调用')
    return HttpResponse('OK')

実行順序

ビュー機能が処理される前に、ミドルウェアは上から下に順番に実行されます

ビュー機能が処理された後、ミドルウェアは下から上に順番に実行されます

おすすめ

転載: blog.csdn.net/weixin_47761086/article/details/115378175