我们知道:
一、前端库requests,可以向服务端发请求。也有带参数或不带参数的。
import requests
payload = {'key1': 'value1', 'key2': ['value2', 'value3']}
r1 = requests.get('http://httpbin.org/get', params=payload)
payload = {'key1': 'value1', 'key2': 'value2'}
r2 = requests.post("http://httpbin.org/post", data=payload)
二、对于服务端:接收到客户端发起的r1和r2请求,如何处理其中的参数?
# 后端服务端
def get_price(request):
#需要解析request
request.META 获取请求头信息
request.body
#请求的主体,返回的是一个字符串
request.data
#请求的数据部分,返回的是一个字典对象(除此之外,与request.body是很类似的)
request.POST
#获取post方式表单中提交的数据
request.POST["username"]
request.POST.get("username")
request.GET
获取get方式表单中或url提交的数据
json_data = request.body
# 获取文件
file_obj = request.FILES.get('image')
三、关于request.GET、request.POST主要含义
1、GET属性
QueryDict类型的对象 和包含get请求方式的所有参数
(1) 前端request:
params = {'security':code,'startdate':start_date,'enddate':close_date,'method':'get_price','unit':freq}
payload = json.dumps(params)
req = requests.get(url_data,params =payload,headers =headers) # get=>params; post=>data
后端获取request.GET信息如下:
request.GET
GET: <QueryDict: {'{"security": "000001.XSHE", "startdate": "2018-01-01", "endda
te": "2019-02-01", "method": "get_price", "unit": "1m"}': ['']}>
request.GET.keys()
=> dict_keys(['{"security": "000001.XSHE", "startdate": "2018-01-01", "endda
te": "2019-02-01", "method": "get_price", "unit": "1m"}'])
2、POST属性
QueryDict类型的对象和包含post请求方式的所有参数
和GET应类同。
3、session和cookies
# request中:
request.session["name"] = "root"
name = request.sessin["name"] #
response.set_cookie('name','root')
#response中:
response.set_cookie('passsword','*****',salt='*****') # 设置加密cookies
request.COOKIES.get("name")
request.get_signed_cookie("password",salt="****")
4、META
如果前端request中,带有下面头部信息:
headers= {"Content-Type": "application/json","Authorization": "JWT " + token}
如果你把JWT传到头文件中的话,那么,在META中可以获取JWT。如果没有传,HTTP不会自动生成的。
jwt = request.META['HTTP_AUTHORIZATION'] # 注意request前人工在token前加的“JWT ”四个字符
如下:
‘JWT eyJ0eXAiOiJKV1QiLCJhbGci9.eyJ1c2VybmFtZSI6ImhvbmdzbCIsInBh***iMTIzNHF3ZXIsIiwiZXhwIjoxNTY5MjIzNzM4LCJpYXQiOjE1NjkxODA1Mzh9.G-X85VbxEiVaivy5LLMBEWSNg_UGTaN0atDlV5h4v5Y’,
META 全文:
说明一下,request.environ 和request.META信息基本相同。
META: {
'ALLUSERSPROFILE': 'C:\\ProgramData',
'APPDATA': 'C:\\Users\\Administrator\\AppData\\Roaming',
'CLIENTNAME': 'DESKTOP-P*****J',
'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files',
'COMMONPROGRAMFILES(X86)': 'C:\\Program Files(x86)\\Common Files',
'COMMONPROGRAMW6432': 'C:\\Program Files\\Common Files',
'COMPUTERNAME': 'iZkcdy1c********',
'COMSPEC': 'C:\\Windows\\system32\\cmd.exe', '
CONDA_DEFAULT_ENV': 'base',
'CONDA_EXE': 'C:\\Users\\Administrator\\Anaconda3\\Scripts\\conda.exe',
'CONDA_PREFIX': 'C:\\Users\\Administrator\\Anaconda3',
'CONDA_PROMPT_MODIFIER': '(base) ',
'CONDA_PYTHON_EXE': 'C:\\Users\\Administrator\\Anaconda3\\python.exe',
'CONDA_SHLVL': '1',
'FP_NO_HOST_CHECK': 'NO',
'HOMEDRIVE': 'C:',
'HOMEPATH': '\\Users\\Administrator',
'JQ_ID': '137**********',
'JQ_PWD': '*********',
'LOCALAPPDATA': 'C:\\Users\\Administrator\\AppData\\Local',
'LOGONSERVER': '\\\\iZkcdy1ci******',
'MY_WEBAPI_PASSWORD': '********,',
'MY_WEBAPI_USERNAME': '*******',
'NUMBER_OF_PROCESSORS': '8',
'OS': 'Windows_NT',
'PATH': 'C:\\Users\\Administrator\\Anaconda3;C:\\Users\\Administrator\\Anaconda3\\Library\\mingw-w64\\bin;
C:\\Users\\Administrator\\Anaconda3\\Library\\usr\\bin;C:\\Users\\Administrator\\Anaconda3\\Library\\bin;
C:\\Users\\Administrator\\Anaconda3\\Scripts;
C:\\Users\\Administrator\\Anaconda3\\bin;
C:\\Users\\Administrator\\Anaconda3\\condabin;
C:\\Program Files (x86)\\Python36-32\\Scripts;
C:\\Program Files (x86)\\Python36-32;
C:\\app\\Administrator\\product\\11.2.0\\dbhome_1\\bin;
C:\\Windows\\system32;
C:\\Windows;
C:\\Windows\\System32\\Wbem;
C:\\Windows\\System32\\WindowsPowerShell\\v1.0;
C:\\Program Files (x86)\\Windows Kits\\8.1\\Windows Performance Toolkit;
C:\\Users\\Administrator\\.cargo\\bin;
C:\\Users\\Administrator\\AppData\\Local\\atom\\bin',
'PATHEXT': '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW',
'PROCESSOR_ARCHITECTURE': 'AMD64',
'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 79 Stepping 1, GenuineIntel',
'PROCESSOR_LEVEL': '6',
'PROCESSOR_REVISION': '4f01',
'PROGRAMDATA': 'C:\\ProgramData',
'PROGRAMFILES': 'C:\\Program Files',
'PROGRAMFILES(X86)': 'C:\\Program Files (x86)',
'PROGRAMW6432': 'C:\\Program Files',
'PROMPT': '(base) $P$G',
'PSMODULEPATH': 'C:\\Program Files\\WindowsPowerShell\\Modules;C:\\Windows\\system32\\WindowsPowerShell\\v1.0\\Modules',
'PUBLIC': 'C:\\Users\\Public',
'SESSIONNAME': 'RDP-Tcp#137',
'SYSTEMDRIVE': 'C:',
'SYSTEMROOT': 'C:\\Windows',
'TEMP': 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\2',
'TMP': 'C:\\Users\\ADMINI~1\\AppData\\Local\\Temp\\2',
'USERDOMAIN': 'iZkcdy1*******',
'USERDOMAIN_ROAMINGPROFILE': 'iZkcdy1*******',
'USERNAME': 'Administrator',
'USERPROFILE': 'C:\\Users\\Administrator',
'VS140COMNTOOLS': 'C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\Tools\\',
'WINDIR': 'C:\\Windows',
'DJANGO_SETTINGS_MODULE': 'web_api.settings',
'RUN_MAIN': 'true',
'SERVER_NAME': 'iZkcd********',
'GATEWAY_INTERFACE': 'CGI/1.1',
'SERVER_PORT': '*******',
'REMOTE_HOST': '',
'CONTENT_LENGTH': '',
'SCRIPT_NAME': '',
'SERVER_PROTOCOL': 'HTTP/1.1',
'SERVER_SOFTWARE': 'WSGIServer/0.2',
'REQUEST_METHOD': 'GET',
'PATH_INFO': '/data/',
'QUERY_STRING': '%7B%22security%22:%20%22000001.XSHE%22,%20%22startdate%22:%20%222018-01-01%22,%20%22enddate%22:%20%222019-02-01%22,%20%22method%22:%20%22get_price%22,%20%22unit%22:%20%221m%22%7D',
'REMOTE_ADDR':'101.88.1******',
'CONTENT_TYPE': 'text/plain',
'HTTP_HOST': '103.10.*******',
'HTTP_USER_AGENT': 'python-requests/2.21.0',
'HTTP_ACCEPT_ENCODING': 'gzip, deflate',
'HTTP_ACCEPT': '*/*',
'HTTP_CONNECTION': 'keep-alive',
'HTTP_AUTHORIZATION': 'JWTeyJ0eXAiOiJKV1QiLCJhbGci*****9.eyJ1c2VybmFtZSI6ImhvbmdzbCIsInBh********iMTIzNHF3ZXIsIiwiZXhwIjoxNTY5MjIzNzM4LCJpYXQiOjE1NjkxODA1Mzh9.G-X85VbxEiVaivy5LLMBEWSNg_UGTaN0atDlV5h4v5Y',
'wsgi.input': <django.core.handlers.wsgi.LimitedStream object at 0x000000CD037264E0>,
'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'>}
四、常用的django的一些操作
request.POST.keys() # dict_keys 类型
request.GET.keys()
五、对于Flask库
获得GET请求:
request.args.get('out')
关键词:args
只能获得GET请求参数:
完整语句:
request.args.get(key)
获得POST参数:
request.form.get(‘username’)
同样只能获得POST,得不到GET