データを取得する
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つのメソッドは、入力または出力に介入するために、さまざまな段階で自動的に実行されます。
- 初期化方法:
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')
実行順序
ビュー機能が処理される前に、ミドルウェアは上から下に順番に実行されます
ビュー機能が処理された後、ミドルウェアは下から上に順番に実行されます