Django_request
(1)請求方式

這里使用一個介面測驗軟體postman
可以看到里面有非常多的發起請求的方式,最常用的就是GET和POST請求,但是這些方法無法在網頁的url里顯示

在學習request引數之前,django框架中首先接到瀏覽器發來的請求第一站是經過框架自帶的wsgi.py檔案
"""
WSGI config for djangoRegina project.
It exposes the WSGI callable as a module-level variable named ``application``.
For more information on this file, see
https://docs.djangoproject.com/en/3.2/howto/deployment/wsgi/
"""
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoRegina.settings')
application = get_wsgi_application()
這個檔案的作用就是接收瀏覽器資料,進行資料決議,并按照http協議的請求格式進行封裝傳遞給路由分發部分
(2)請求內容
def ZJR_request(request):
#請求格式
print(request.method)
#請求體
print(request.body)

因為在get請求當中并沒有引數設定,所以得到的請求體為空,如果需要加入請求體的內容,那么需要改為post請求
錯誤修正
-
url錯誤

如果發生這種錯誤,是因為沒有在url末尾寫全,必須以
/結尾
-
csrf

CSRF # 表示django全域發送post請求均需要字串驗證
功能:防止跨站請求偽造的功能
作業原理:客服端訪問服務器,在服務端正常回傳給客戶端資料的時候,而外回傳給客戶端一段字串,等到客戶端下次訪問服務器時,服務器會到客戶端查找先前回傳的字串,如果找到則繼續,找不到就拒絕,
訪問流程:客戶端 —> URL路由系統—> CSRF—> 視圖函式
需要在客戶端頁面的post表單中添:{% csrf_token%}
將setting.py里的'django.middleware.csrf.CsrfViewMiddleware'注釋掉就可以了

此時得到了剛剛提交的以urlencoded方式的資料,這種格式就是將普通的鍵值對變為用&符號連接的字串
常用的還有通過json格式傳輸的鍵值對,選擇raw選項,并在下來選單中選擇json

這里面的字符必須使用雙引號

request.post
這個方法也是輸出請求體的一種,但是需要注意的是它并不適用每一種傳參格式

這是通過urlencoded格式

這是json格式
獲取值
name = request.POST.get("name")
age = request.POST.get("age")
print(name,age)
這個是必須通過urlencoded格式傳參,然后通過POST方法得到具體的值

獲取值串列
如果在傳參的時候一個關鍵字包含了多個內容,就需要getlist方法
name = request.POST.getlist("name")

如果只用get方法,按照django自己的邏輯,只能選去這個關鍵字的最后一個選項

get請求
在postman里,get請求的引數要在param里面添加


獲取路徑
print(request.path)
print(request.get_full_path())

如果get請求中添加了引數,那么get_full_path方法則會取到所有引數,但path方法則不會
但如果get請求里沒有添加引數,兩者的輸出結果是一樣的

獲取請求頭
request.META
通過這種方法揮獲得一大堆的鍵值對,通過決議可以獲取到格式化后的內容
{
'PATH': '/Users/ivanlee/opt/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/2.7/bin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/local/sbin:/Library/Frameworks/Python.framework/Versions/3.10/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:/usr/local/mysql/bin:/usr/local/mysql/bin:/Users/ivanlee/.dotnet/tools:/usr/local/mysql/bin',
'MANPATH': '/usr/local/share/man::',
'CONDA_EXE': '/Users/ivanlee/opt/anaconda3/bin/conda',
'CONDA_PYTHON_EXE': '/Users/ivanlee/opt/anaconda3/bin/python',
'HOMEBREW_PREFIX': '/usr/local',
'COMMAND_MODE': 'unix2003',
'_CE_M': '',
'LOGNAME': 'ivanlee',
'HOMEBREW_REPOSITORY': '/usr/local/Homebrew',
'XPC_SERVICE_NAME': 'application.com.jetbrains.pycharm.ce.24716539.38684274',
'PWD': '/Users/ivanlee/Desktop/djangoRegina',
'PYCHARM_HOSTED': '1',
'INFOPATH': '/usr/local/share/info:',
'CONDA_SHLVL': '0',
'__CFBundleIdentifier': 'com.jetbrains.pycharm.ce',
'PYTHONPATH': '/Users/ivanlee/Desktop/djangoRegina',
'SHELL': '/bin/zsh',
'PYTHONIOENCODING': 'UTF-8',
'HOMEBREW_BOTTLE_DOMAIN': 'https://mirrors.ustc.edu.cn/homebrew-bottles',
'OLDPWD': '/',
'HOMEBREW_CELLAR': '/usr/local/Cellar',
'USER': 'ivanlee',
'TMPDIR': '/var/folders/48/byh7qq5528sfmw6vgsxnd9g80000gn/T/',
'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.qyJ40GUnAv/Listeners',
'_CE_CONDA': '',
'XPC_FLAGS': '0x0',
'PYTHONUNBUFFERED': '1',
'__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x0',
'LC_CTYPE': 'en_US.UTF-8',
'HOME': '/Users/ivanlee',
'DJANGO_SETTINGS_MODULE': 'djangoRegina.settings',
'TZ': 'UTC',
'RUN_MAIN': 'true',
'SERVER_NAME': '1.0.0.127.in-addr.arpa',
'GATEWAY_INTERFACE': 'CGI/1.1',
'SERVER_PORT': '8090',
'REMOTE_HOST': '',
'CONTENT_LENGTH': '24',
'SCRIPT_NAME': '',
'SERVER_PROTOCOL': 'HTTP/1.1',
'SERVER_SOFTWARE': 'WSGIServer/0.2',
'REQUEST_METHOD': 'POST',
'PATH_INFO': '/JRrequest/jr/',
'QUERY_STRING': 'name=regina',
'REMOTE_ADDR': '127.0.0.1',
'CONTENT_TYPE': 'application/x-www-form-urlencoded',
'HTTP_USER_AGENT': 'PostmanRuntime/7.29.2',
'HTTP_ACCEPT': '*/*',
'HTTP_POSTMAN_TOKEN': 'e474691f-e449-4c99-b8ff-d6c625b6c5b6',
'HTTP_HOST': '127.0.0.1:8090',
'HTTP_ACCEPT_ENCODING': 'gzip, deflate, br',
'HTTP_CONNECTION': 'keep-alive',
'wsgi.input': < django.core.handlers.wsgi.LimitedStream object at 0x7feafca4d160 > ,
'wsgi.errors': < _io.TextIOWrapper name = '<stderr>'
mode = 'w'
encoding = 'utf-8' > ,
'wsgi.version': (1, 0),
'wsgi.run_once': False,
'wsgi.url_scheme': 'http',
'wsgi.multithread': True,
'wsgi.multiprocess': False,
'wsgi.file_wrapper': < class 'wsgiref.util.FileWrapper' >
}
還可以從這里進行獲取
print(request.META.get("HTTP_HOST"))

自定義請求頭

這里在最后一行添加了自定義的一對鍵值對,提交以后我們可以看到META內容里的經過格式化的資訊

同樣也可以通過get方式獲得,格式寫成HTTP開頭
本文來自博客園,作者:ivanlee717,轉載請注明原文鏈接:https://www.cnblogs.com/ivanlee717/p/16634423.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/502987.html
標籤:其他
上一篇:OpenGL 亮度調節
下一篇:作業系統啟動流程和BIOS介紹
