python基础知识(十一)web框架:Django---(二)

本文深入探讨Django框架中的HttpRequest和HttpResponse对象,详细讲解了请求和响应的属性与方法,包括HttpRequest的scheme、body、method等属性,HttpResponse的content、charset、status_code等属性,以及render和redirect响应形式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

11.3视图函数

官方文档:请求和响应对象

a.HttpRequest对象

1.request属性

HttpRequest.scheme
表示请求方案(http或https 通常)的字符串。

HttpRequest.body
原始HTTP请求主体作为字节串。这对于以不同于传统HTML表单的方式处理数据非常有用:二进制映像,XML有效负载等。对于处理传统表单数据,请使用 HttpRequest.POST。

您还可以HttpRequest使用类似文件的界面进行读取。见 HttpRequest.read()。

HttpRequest.path
表示所请求页面的完整路径的字符串,不包括方案或域。

例: "/music/bands/the_beatles/"

HttpRequest.path_info
在某些Web服务器配置下,主机名后面的URL部分被分成脚本前缀部分和路径信息部分。path_info无论使用何种Web服务器,该属性始终包含路径的路径信息部分。使用它代替path可以使您的代码更容易在测试和部署服务器之间移动。

例如,如果WSGIScriptAlias你的应用程序设置为 "/minfo",则path可能是"/minfo/music/bands/the_beatles/" 和path_info会"/music/bands/the_beatles/"。

HttpRequest.method
表示请求中使用的HTTP方法的字符串。这保证是大写的。例如:
if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()
    
HttpRequest.encoding
表示用于解码表单提交数据的当前编码的字符串(或者None,表示使用该DEFAULT_CHARSET设置)。您可以写入此属性以更改访问表单数据时使用的编码。任何后续属性访问(例如从GET或读取POST)都将使用新encoding值。如果您知道表单数据不在DEFAULT_CHARSET 编码中,则非常有用。

HttpRequest.content_type
表示请求的MIME类型的字符串,从CONTENT_TYPE标头解析 。

HttpRequest.content_params
CONTENT_TYPE 标题中包含的键/值参数字典。

HttpRequest.GET
类似字典的对象,包含所有给定的HTTP GET参数。请参阅以下 QueryDict文档。

HttpRequest.POST
类似字典的对象,包含所有给定的HTTP POST参数,前提是请求包含表单数据。请参阅以下 QueryDict文档。如果您需要访问请求中发布的原始或非表单数据,请通过该HttpRequest.body属性访问该数据 。

请求可以通过POST使用空POST 字典进入- 例如,如果通过POST HTTP方法请求表单但不包含表单数据。因此,您不应该使用 检查POST方法的使用; 相反,使用(见)。if request.POSTif request.method == "POST"HttpRequest.method

POST它不包含文件上传信息。见FILES。

HttpRequest.COOKIES
包含所有cookie的字典。键和值是字符串。

HttpRequest.FILES
包含所有上传文件的类字典对象。每个键 FILES都name来自。每个值都是。<input type="file" name="">FILESUploadedFile

FILES如果请求方法是POST并且<form>发布到请求的方法有,则只包含数据 enctype="multipart/form-data"。否则,FILES将是一个空白的字典对象。

HttpRequest.META
包含所有可用HTTP标头的字典。可用的头文件取决于客户端和服务器,但以下是一些示例:
CONTENT_LENGTH - 请求正文的长度(作为字符串)。
CONTENT_TYPE - 请求正文的MIME类型。
HTTP_ACCEPT - 响应的可接受内容类型。
HTTP_ACCEPT_ENCODING - 可接受的响应编码。
HTTP_ACCEPT_LANGUAGE - 响应的可接受语言。
HTTP_HOST - 客户端发送的HTTP主机头。
HTTP_REFERER - 引用页面,如果有的话。
HTTP_USER_AGENT - 客户端的用户代理字符串。
QUERY_STRING - 查询字符串,作为单个(未解析的)字符串。
REMOTE_ADDR - 客户端的IP地址。
REMOTE_HOST - 客户端的主机名。
REMOTE_USER - Web服务器验证的用户(如果有)。
REQUEST_METHOD- 一个字符串,如"GET""POST"。
SERVER_NAME - 服务器的主机名。
SERVER_PORT - 服务器的端口(作为字符串)。
除了CONTENT_LENGTH和之外CONTENT_TYPE,如上所述,请求中的任何HTTP头都将转换为META键,方法是将所有字符转换为大写,用下划线替换任何连字符并HTTP_在名称中添加前缀。因此,例如,调用的标头X-Bender将映射到META密钥 HTTP_X_BENDER。

请注意,runserver在名称中删除带有下划线的所有标题,因此您将看不到它们META。这可以防止基于下划线和短划线之间的歧义的标头欺骗都在WSGI环境变量中对下划线进行规范化。它匹配Nginx和Apache 2.4+等Web服务器的行为。

HttpRequest.headers是一种更简单的方法来访问所有HTTP加前缀的标题,加号CONTENT_LENGTH和CONTENT_TYPE。

HttpRequest.headers
Django 2.2中的新功能:
一个不区分大小写的类似dict的对象,它提供对请求中所有HTTP加前缀的标题(加号Content-Length和Content-Type)的访问。

每个标题的名称在User-Agent显示时用标题 - 外壳(例如)进行样式化。您可以不区分大小写地访问标头:

>>> request.headers
{'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6', ...}

>>> 'User-Agent' in request.headers
True
>>> 'user-agent' in request.headers
True

>>> request.headers['User-Agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers['user-agent']
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)

>>> request.headers.get('User-Agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
>>> request.headers.get('user-agent')
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6)
HttpRequest.resolver_match¶
ResolverMatch表示已解析URL 的实例。此属性仅在URL解析发生后设置,这意味着它在所有视图中都可用,但在URL解析发生之前执行的中间件中不可用(process_view()尽管可以使用它 )。

2.request方法


1.HttpRequest.get_full_path()

  返回 path,如果可以将加上查询字符串。
  例如:"/music/bands/the_beatles/?print=true" (带参数)

2.HttpRequest.is_ajax()

  如果请求是通过XMLHttpRequest 发起的,则返回True,方法是检查 HTTP_X_REQUESTED_WITH 相应的首部是否是字符串'XMLHttpRequest'。

  大部分现代的 JavaScript 库都会发送这个头部。如果你编写自己的 XMLHttpRequest 调用(在浏览器端),你必须手工设置这个值来让 is_ajax() 可以工作。

  如果一个响应需要根据请求是否是通过AJAX 发起的,并且你正在使用某种形式的缓存例如Django 的 cache middleware,
   你应该使用 vary_on_headers('HTTP_X_REQUESTED_WITH') 装饰你的视图以让响应能够正确地缓存。

b.HttpResponse对象

1.response属性

HttpResponse.content
表示内容的字节字符串,如果需要,从字符串编码。

HttpResponse.charset
一个字符串,表示将在其中编码响应的字符集。如果未在HttpResponse实例化时间给出,则将从中提取 content_type,如果不成功,DEFAULT_CHARSET则将使用该 设置。

HttpResponse.status_code
该响应的 HTTP状态代码。

除非reason_phrase明确设置,否则修改 status_code构造函数外部的值也会修改值 reason_phrase。

HttpResponse.reason_phrase
响应的HTTP原因短语。它使用了HTTP标准的默认原因短语。

除非明确设置,否则reason_phrase由值确定 status_code。

HttpResponse.streaming
这总是如此False。

此属性存在,因此中间件可以不同于常规响应处理流式响应。

HttpResponse.closed
True 如果回复已经结束。

2.响应对象的主要形式

响应对象主要有三种形式:
HttpResponse()
render()    //页面
  --读取页面
  --嵌入数据
redirect()  //重定向

#HttpResponse()
HttpResponse()括号内直接跟一个具体的字符串作为响应体

#render()
render(request, template_name[, context])
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
参数:
     request: 用于生成响应的请求对象。
     template_name:要使用的模板的完整名称,可选的参数
     context:添加到模板上下文的一个字典。默认是一个空字典。key是html用的名字,values是传入的变量名字,如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。
render方法就是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体。
示例:
views:
a = 111
return render(request, 'template_name',{'name':a}) 

template_name.html:
<p>{{name}}</p>

#redirect()
传递要重定向的一个硬编码的URL路径
def my_view(request):
    ...
    return redirect('/index/') 
也可以是一个完整的URL:
def my_view(request):
    ...
    return redirect('http://example.com/') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值