jjzjj

Django_request学习

WELCOME TO ivanlee717!!!! 2023-04-16 原文

Django_request

(1)请求方式

这里使用一个接口测试软件postman

可以看到里面有非常多的发起请求的方式,最常用的就是GETPOST请求,但是这些方法无法在网页的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请求

错误修正

  1. url错误

    如果发生这种错误,是因为没有在url末尾写全,必须以/结尾

  2. 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开头

有关Django_request学习的更多相关文章

  1. Get https://registry-1.docker.io/v2/: net/http: request canceled while waiting - 2

    1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里

  2. LC滤波器设计学习笔记(一)滤波电路入门 - 2

    目录前言滤波电路科普主要分类实际情况单位的概念常用评价参数函数型滤波器简单分析滤波电路构成低通滤波器RC低通滤波器RL低通滤波器高通滤波器RC高通滤波器RL高通滤波器部分摘自《LC滤波器设计与制作》,侵权删。前言最近需要学习放大电路和滤波电路,但是由于只在之前做音乐频谱分析仪的时候简单了解过一点点运放,所以也是相当从零开始学习了。滤波电路科普主要分类滤波器:主要是从不同频率的成分中提取出特定频率的信号。有源滤波器:由RC元件与运算放大器组成的滤波器。可滤除某一次或多次谐波,最普通易于采用的无源滤波器结构是将电感与电容串联,可对主要次谐波(3、5、7)构成低阻抗旁路。无源滤波器:无源滤波器,又称

  3. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  4. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  5. ruby - 我正在学习编程并选择了 Ruby。我应该升级到 Ruby 1.9 吗? - 2

    我完全不是程序员,正在学习使用Ruby和Rails框架进行编程。我目前正在使用Ruby1.8.7和Rails3.0.3,但我想知道我是否应该升级到Ruby1.9,因为我真的没有任何升级的“遗留”成本。缺点是什么?我是否会遇到与普通gem的兼容性问题,或者甚至其他我不太了解甚至无法预料的问题? 最佳答案 你应该升级。不要坚持从1.8.7开始。如果您发现不支持1.9.2的gem,请避免使用它们(因为它们很可能不被维护)。如果您对gem是否兼容1.9.2有任何疑问,您可以在以下位置查看:http://www.railsplugins.or

  6. ruby - Controller 中的 request.cookies 和 cookies 有什么区别? - 2

    request.cookies和RubyonRails中的cookies对象有区别吗?我目前正在尝试将带有cookie的请求从我的node.js服务器发送到我的ROR4应用程序。似乎在ROR应用程序中,request.cookies包含我发送的cookie,但是cookies对象(现有逻辑所基于的对象)没有它。我已经搜索了文档,但找不到任何相关内容。我错过了什么吗?感谢您的帮助。 最佳答案 理想情况下,request.cookies和cookies应该相同。但是,在POST(创建操作)请求中,rails会验证XSRFtoken。如果

  7. ruby - 我如何学习 ruby​​ 的正则表达式? - 2

    如何学习ruby​​的正则表达式?(对于假人) 最佳答案 http://www.rubular.com/在Ruby中使用正则表达式时是一个很棒的工具,因为它可以立即将结果可视化。 关于ruby-我如何学习ruby​​的正则表达式?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1881231/

  8. ruby-on-rails - "undefined method ` stub_request '"访问 RSpec 支持文件中的方法时 - 2

    我的Ruby-on-Rails项目中有以下文件结构,用于规范:/spec/msd/serviceservice_spec.rb/support/my_modulerequests_stubs.rb我的request_stubs.rb有:moduleMyModule::RequestsStubsmodule_functiondeflist_clientsurl="dummysite.com/clients"stub_request(:get,url).to_return(status:200,body:"clientsbody")endend在我的service_spec.rb我有:re

  9. ruby-on-rails - 在条件路由期间未在 Rails 3 中设置 request.subdomain - 2

    我正在尝试根据RyanBatesscreencastonsubdomains在Rails3中设置子域.但是它对我不起作用。我有以下设置:#routes.rbconstraints(Subdomain)doget'devices'=>'devices#all'end#lib/subdomain.rbclassSubdomaindefself.matches?(request)#binding.pryrequest.subdomain.present?&&request.subdomain=="admin"endend加载urladmin.localhost:3000/devices应该将

  10. 深度学习12. CNN经典网络 VGG16 - 2

    深度学习12.CNN经典网络VGG16一、简介1.VGG来源2.VGG分类3.不同模型的参数数量4.3x3卷积核的好处5.关于学习率调度6.批归一化二、VGG16层分析1.层划分2.参数展开过程图解3.参数传递示例4.VGG16各层参数数量三、代码分析1.VGG16模型定义2.训练3.测试一、简介1.VGG来源VGG(VisualGeometryGroup)是一个视觉几何组在2014年提出的深度卷积神经网络架构。VGG在2014年ImageNet图像分类竞赛亚军,定位竞赛冠军;VGG网络采用连续的小卷积核(3x3)和池化层构建深度神经网络,网络深度可以达到16层或19层,其中VGG16和VGG

随机推荐