django HttpRequest对象常用属性

由Django创建的HttpRequest
属性:
HttpRequest.scheme 请求的协议
HttpRequest.body 请求体
HttpRequest.path 请求路径
HttpRequest.method 请求方法
HttpRequest.encoding 请求的字符集
HttpRequest.GET 请求的GET数据
HttpRequest.POST 请求的POST数据
HttpRequest.META 请求的META属性

方法:
HttpRequest.get_host() 当前服务器的IP和端口
HttpRequest.get_port() 当前服务器的端口
HttpRequest.get_full_path() 完整的访问路径
HttpRequest.is_secure() 是否为安全的请求
HttpRequest.is_ajax() 是否为ajax请求

当一个客户端访问的请求传来时,request如何将访问数据传递给视图函数?
我们先看一个wsgi的例子, 这里我就不再抄一遍了,直接访问下廖雪峰老师的文章吧
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386832689740b04430a98f614b6da89da2157ea3efe2000

根据wsgi的例子,我们可以得知,用户访问的请求是需要被视图函数进行使用的,那么django中的这个request是怎么传递到视图函数中的呢?

没看源代码,大概猜的,应该是酱汁
在我们的主程序路径下有一个wsgi.py的文件,这个文件应该就是将标准的wsgi返回,封装成django内部使用的数据格式,然后再通过url匹配最终传递给视图函数,我们看下url传递的代码,和视图函数的代码

#主程序的url映射
url(r'^dashboard/', include("dashboard.urls")),

#dashboard程序的url映射
url(r'^hello/',index),

#视图函数
def index(request):
    return HttpResponse("hello world!!")

那我们从以上三点可以看到,当匹配到dashboard访问请求的时候,会调用include通过dashboard.urls再进行匹配,当url完全匹配时,会调用视图函数,那么视图函数中要求传入一个request,即当url完全匹配的时候,django程序调用视图函数的时候会将request完整的传给视图函数,当然request不一定会被视图函数所用到,但是django是支持这个传递的。

那么我们如何看这些值呢?
人狠话不多,看代码

def index(request):
    print('scheme',request.scheme)
    print('body',request.body)
    print('path',request.path)
    print('method',request.method)
    print('encoding',request.encoding)
    print('GET',request.GET)
    print('POST',request.POST)
    print('META',request.META)
    print('get_host',request.get_host())
    print('get_port',request.get_port())
    print('get_full_path',request.get_full_path())
    print('is_secure',request.is_secure())
    print('is_ajax',request.is_ajax())
    return HttpResponse("hello world!!")

访问一下之后,我们查看一下相关的返回值

scheme http
本次访问的协议是什么
body b''
本次访问客户端发送给服务端的内容是什么
path /dashboard/hello/
访问的完整路径是什么
method GET
本次的访问请求是什么
encoding None
字符类型默认为空
GET <QueryDict: {}>
本次客户端没有通过GET请求给服务器端传输数据
POST <QueryDict: {}>
本次客户端没有通过POST请求给服务器端传输数据
META {'XDG_SESSION_ID': '633194', 'HOSTNAME': 'mirror-test-ys01.ys', 'SHELL': '/bin/bash', 'TERM': 'xterm', 'HISTSIZE': '100000', 'PERL5LIB': '/root/perl5/lib/perl5:', 'QTDIR': '/usr/lib64/qt-3.3', 'OLDPWD': '/data', 'QTINC': '/usr/lib64/qt-3.3/include', 'PERL_MB_OPT': '--install_base /root/perl5', 'QT_GRAPHICSSYSTEM_CHECKED': '1', 'HISTFILESIZE': '100000', 'USER': 'root', 'LS_COLORS': 'rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:', 'COBBLER_SERVER': '192.168.122.2', 'VIRTUAL_ENV': '/data/python36env', 'MAIL': '/var/spool/mail/root', 'PATH': '/data/python36env/bin:/usr/share/svensudo/bin:/usr/share/svensudo/bin:/usr/lib64/qt-3.3/bin:/root/perl5/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin', 'PWD': '/data/ops', 'LANG': 'en_US.UTF-8', 'QT_GRAPHICSSYSTEM': 'native', 'KDEDIRS': '/usr', 'PS1': '(python36env) [\\u@\\h \\W]\\$ ', 'HISTCONTROL': 'ignoredups', 'SHLVL': '1', 'HOME': '/root', 'PERL_LOCAL_LIB_ROOT': ':/root/perl5', 'LOGNAME': 'root', 'QTLIB': '/usr/lib64/qt-3.3/lib', 'LESSOPEN': '||/usr/bin/lesspipe.sh %s', 'QT_PLUGIN_PATH': '/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins', 'HISTTIMEFORMAT': '%F %T ', 'PERL_MM_OPT': 'INSTALL_BASE=/root/perl5', '_': '/data/python36env/bin/python', 'DJANGO_SETTINGS_MODULE': 'ops.settings', 'TZ': 'UTC', 'RUN_MAIN': 'true', 'SERVER_NAME': 'mirror-test-ys01.ys.diditaxi.com', 'GATEWAY_INTERFACE': 'CGI/1.1', 'SERVER_PORT': '8000', 'REMOTE_HOST': '', 'CONTENT_LENGTH': '', 'SCRIPT_NAME': '', 'SERVER_PROTOCOL': 'HTTP/1.1', 'SERVER_SOFTWARE': 'WSGIServer/0.2', 'REQUEST_METHOD': 'GET', 'PATH_INFO': '/dashboard/hello/', 'QUERY_STRING': '', 'REMOTE_ADDR': '172.30.254.160', 'CONTENT_TYPE': 'text/plain', 'HTTP_HOST': '10.89.0.5:8000', 'HTTP_CONNECTION': 'keep-alive', 'HTTP_UPGRADE_INSECURE_REQUESTS': '1', 'HTTP_USER_AGENT': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36', 'HTTP_ACCEPT': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', 'HTTP_ACCEPT_ENCODING': 'gzip, deflate', 'HTTP_ACCEPT_LANGUAGE': 'zh-CN,zh;q=0.9', 'HTTP_COOKIE': 'sessionid=5qfoxcd4wfp4a471atpyhn5qbr64ow0x', 'wsgi.input': <_io.BufferedReader name=4>, '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'>}
get_host 10.89.0.5:8000
本服务器的IP和端口
get_port 8000
本服务的端口
get_full_path /dashboard/hello/
访问的完整路径是什么
is_secure False
这个访问看着不像是安全的
is_ajax False
这次请求不是ajax的请求

通过以上的展示,我们可以清楚的认证http协议中request请求中都包含了哪些数据信息

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342

推荐阅读更多精彩内容