Django_request学习

Django_request

(1)请求方式

image-20220812115203856

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

可以看到里面有非常多的发起请求的方式,最常用的就是GETPOST请求,但是这些方法无法在网页的url里显示

image-20220828134900227

在学习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)

image-20220828141700116

因为在get请求当中并没有参数设置,所以得到的请求体为空。如果需要加入请求体的内容,那么需要改为post请求

错误修正

  1. url错误

    image-20220828143958216

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

    image-20220828144237585

  2. csrf

    image-20220828144313540

    CSRF # 表示django全局发送post请求均需要字符串验证
    功能:防止跨站请求伪造的功能
    工作原理:客服端访问服务器,在服务端正常返回给客户端数据的时候,而外返回给客户端一段字符串,等到客户端下次访问服务器时,服务器会到客户端查找先前返回的字符串,如果找到则继续,找不到就拒绝。
    访问流程:客户端 —> URL路由系统—> CSRF—> 视图函数
    需要在客户端页面的post表单中添:{% csrf_token%}
    setting.py里的'django.middleware.csrf.CsrfViewMiddleware'注释掉就可以了

    image-20220828144658919

image-20220828144711470

此时得到了刚刚提交的以urlencoded方式的数据,这种格式就是将普通的键值对变为用&符号连接的字符串

常用的还有通过json格式传输的键值对,选择raw选项,并在下来菜单中选择json

image-20220828145413980

这里面的字符必须使用双引号

image-20220828145557116

request.post

这个方法也是输出请求体的一种,但是需要注意的是它并不适用每一种传参格式

image-20220828154009322

这是通过urlencoded格式

image-20220828154056662

这是json格式

获取值

 name = request.POST.get("name")
 age = request.POST.get("age")
 print(name,age)

这个是必须通过urlencoded格式传参,然后通过POST方法得到具体的值

image-20220828154723900

获取值列表

image-20220828155331131如果在传参的时候一个关键字包含了多个内容,就需要getlist方法

name = request.POST.getlist("name")

image-20220828155316860

如果只用get方法,按照django自己的逻辑,只能选去这个关键字的最后一个选项

image-20220828155449219

get请求

在postman里,get请求的参数要在param里面添加

image-20220828155815454

image-20220828155854620

获取路径

print(request.path)
    print(request.get_full_path())

image-20220828160415942

如果get请求中添加了参数,那么get_full_path方法则会取到所有参数,但path方法则不会

但如果get请求里没有添加参数,两者的输出结果是一样的

image-20220828160530877

获取请求头

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"))

image-20220828230733365

自定义请求头

image-20220828230937495

这里在最后一行添加了自定义的一对键值对,提交以后我们可以看到META内容里的经过格式化的信息

image-20220828231125486

同样也可以通过get方式获得,格式写成HTTP开头

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django_request学习 - Python技术站

(0)
上一篇 2023年4月2日 下午5:06
下一篇 2023年4月2日

相关文章

  • Django_模型详解

    Django_模型ORM Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作。 O是object,也就类对象的意思。 R是relation,翻译成中文是关系,也就是关系数据库中数据表的意思。 M是mapping,是映射的意思。 映射: 类:sql语句table表 类成…

    2023年4月2日
    00
  • django学习__1

    Django python网络编程回顾 之前我们介绍过web应用程序和http协议,简单了解过web开发的概念。Web应用程序的本质 接收并解析HTTP请求,获取具体的请求信息 处理本次HTTP请求,即完成本次请求的业务逻辑处理 构造并返回处理结果——HTTP响应 import socket server = socket.socket() server.b…

    Python开发 2023年4月2日
    00
  • django_响应对象

    Django_响应对象 响应对象 响应对象有三种形式: HttpResponse() render() Redirect() (1) HttpResponse() django服务器接收到客户端发来的请求之后,会将提交上来的数据封装成一个HttpResponse对象传给视图函数。视图函数在处理完相关逻辑之后,也需要一个返回响应给浏览器。而这个响应方式,我们必…

    2023年4月2日
    00
  • linux文件权限解读

    Linux 文件权限 文件权限和文件类型共有10个字符组成,这10个字符可以分成三部分 \[d+rwx+rwx+rw-\\d:表示文件类型\\2-4位(第一组rwx):表示文件所有者的对文件的权限\\5-7位(第二组rwx):表示文件所有者所在组的用户对文件的权限\\8-10位(rw-):表示其他用户对文件的权限 \] 其中 r 表示可读,w 表示可写,x …

    Linux 2023年4月18日
    00
  • 数据分析之pandas的使用

    pandas 为什么学习pandas numpy已经可以帮助我们进行数据的处理了,那么学习pandas的目的是什么呢? numpy能够帮助我们处理的是数值型的数据,当然在数据分析中除了数值型的数据还有好多其他类型的数据(字符串,时间序列),那么pandas就可以帮我们很好的处理除了数值型的其他数据! 什么是pandas? 首先先来认识pandas中的两个常用…

    2023年4月2日
    00
  • pandas数据清洗

    数据清洗 数据清洗是对一些没有用的数据进行处理的过程。 很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要对使数据分析更加准确,就需要对这些没有用的数据进行处理。 在这个教程中,我们将利用 Pandas包来进行数据清洗。 处理丢失数据 有两种丢失数据: None np.nan(NaN) 两种丢失数据的区别 为什么在数据分析中需要用到的是浮…

    2023年4月2日
    00
  • Django_渲染详解

    Django_render 模板语法 模板引擎是一种可以让开发者把服务端数据填充到html网页中完成渲染效果的技术。它实现了把前端代码和服务端代码分离的作用,让项目中的业务逻辑代码和数据表现代码分离,让前端开发者和服务端开发者可以更好的完成协同开发。 静态网页:页面上的数据都是写死的,万年不变 动态网页:页面上的数据是从后端动态获取的(比如后端获取当前时间;…

    2023年4月2日
    00
  • linux下c语言的crypt函数怎么用?

    linux的crypt 最近学校布置了一个网安的小作业,要用到linux里面的这个crypt函数,写一篇总结一下。首先我们要了解这个函数是用来做什么的。 密码影子文件中存储了每一个用户的用户明文和其单向哈希过的秘文 cipher = “$1$C68vnJ27$1ttFZ1/Rylq/xi350A0NI0”; 密码字段用\(id\)salt$hashed的格式…

    Linux 2023年4月17日
    00
合作推广
合作推广
分享本页
返回顶部