Python Django 前后端数据交互 之 HttpRequest、HttpResponse、render、redirect
一、HttpRequest捕获请求
1、属性
HttpRequest.body #一个字节字符串,表示原始HTTP请求的正文
HttpRequest.path #一个字符串,表示请求的页面的完整路径,不包含域名
HttpRequest.methed #一个字符串,表示请求使用的HTTP方法,必须使用大写
HttpRequest.GET #一个类似于字典的对象,包含HTTP GET的所有参数
HttpRequest.POST #一个包含所有给定的HTTP POST参数的类字典对象,提供了包含表单数据的请求
HttpRequest.COOKIES #一个标准的python字典,包含所有cookie,键和值都为字符串
HttpRequest.FILES #一个类似于字典的对象,包含所有的上传文件
HttpRequest.META #一个标准的python字典,包含所有的HTTP头部123456789
2、方法
HttpRequest.get_full_path()#返回path,如果可以将加上查询字符串
HttpRequest.read(size=None)
HttpRequest.readline()
HttpRequest.readlines()
HttpRequest.xreadlines()
HttpRequest.__iter__()
#这几个方法实现类文件的接口用于读取HttpRequest.示例。这使得可以用流的方式读#取进来的请求,一个常见的用例是使用迭代解析器处理大型XML有效载荷,
3、详解
其中的xxx为网址映射,在urlsl路由映射部分再做详解。
def index(request):
if request.method == "POST":
username = request.POST.get("username", None) # 读取post数据,None为默认值
password = request.POST.get("password", None) # 读取post数据,None为默认值
if request.method == "GET":
username = request.GET.get("username", None) # 读取get数据
password = request.GET.get("password", None) # 读取get数据
...123456789
字符串类型,表示请求的协议种类,’http’或’https’。
bytes类型,表示原始HTTP请求的正文。它对于处理非HTML形式的数据非常有用:二进制图像、XML等。如果要处理常规的表单数据,应该使用HttpRequest.POST。还可以使用类似读写文件的方式从HttpRequest中读取数据,参见HttpRequest.read()。
字符串类型,表示当前请求页面的完整路径,但是不包括协议名和域名。例如:”/music/bands/the_beatles/”。这个属性,常被用于我们进行某项操作时,如果不通过,返回用户先前浏览的页面。非常有用!
在某些Web服务器配置下,主机名后的URL部分被分成脚本前缀部分和路径信息部分。path_info 属性将始终包含路径信息部分,不论使用的Web服务器是什么。使用它代替path可以让代码在测试和开发环境中更容易地切换。
例如,如果应用的WSGIScriptAlias设置为/minfo,那么HttpRequest.path等于/music/bands/the_beatles/ ,而HttpRequest.path_info为/minfo/music/bands/the_beatles/。
字符串类型,表示请求使用的HTTP方法。默认为大写。 像这样:
do_something()
elif request.method == 'POST':
do_something_else()1234
字符串类型,表示提交的数据的编码方式(如果为None 则表示使用DEFAULT_CHARSET设置)。 这个属性是可写的,可以通过修改它来改变表单数据的编码。任何随后的属性访问(例如GET或POST)将使用新的编码方式。
Django1.10中新增。表示从CONTENT_TYPE头解析的请求的MIME类型。
Django 1.10中新增。包含在CONTENT_TYPE标题中的键/值参数字典。
一个类似于字典的对象,包含GET请求中的所有参数。 详情参考QueryDict文档。
一个包含所有POST请求的参数,以及包含表单数据的字典。 详情请参考QueryDict文档。 如果需要访问请求中的原始或非表单数据,可以使用HttpRequest.body属性。
包含所有Cookie信息的字典。 键和值都为字符串。可以类似字典类型的方式,在cookie中读写数据,但是注意cookie是不安全的,因此,不要写敏感重要的信息。
一个类似于字典的对象,包含所有上传的文件数据。 FILES中的每个键为<input type="file" name="" />中的name属性值。 FILES中的每个值是一个UploadedFile。
from django.shortcuts import render
from .forms import ModelFormWithFileField
if request.method == 'POST':
form = ModelFormWithFileField(request.POST, request.FILES)
if form.is_valid():
# 这么做就可以了,文件会被保存到Model中upload_to参数指定的位置
form.save()
return HttpResponseRedirect('/success/url/')
else:
form = ModelFormWithFileField()
return render(request, 'upload.html', {'form': form})1234567891011121314
包含所有HTTP头部信息的字典。 可用的头部信息取决于客户端和服务器,下面是一些示例:
CONTENT_LENGTH —— 请求正文的长度(以字符串计)。
CONTENT_TYPE —— 请求正文的MIME类型。
HTTP_ACCEPT —— 可接收的响应Content-Type。
HTTP_ACCEPT_ENCODING —— 可接收的响应编码类型。
HTTP_ACCEPT_LANGUAGE —— 可接收的响应语言种类。
HTTP_HOST —— 客服端发送的Host头部。
HTTP_REFERER —— Referring页面。
HTTP_USER_AGENT —— 客户端的user-agent字符串。
QUERY_STRING —— 查询字符串。
REMOTE_ADDR —— 客户端的IP地址。想要获取客户端的ip信息,就在这里!
REMOTE_HOST —— 客户端的主机名。
REMOTE_USER —— 服务器认证后的用户,如果可用。
REQUEST_METHOD —— 表示请求方法的字符串,例如”GET” 或”POST”。
SERVER_NAME —— 服务器的主机名。
SERVER_PORT —— 服务器的端口(字符串)。
2)HttpRequest方法
使用META中HTTP_X_FORWARDED_PORT和SERVER_PORT的信息返回请求的始发端口。
返回包含完整参数列表的path。例如:/music/bands/the_beatles/?print=true
如果使用的是Https,则返回True,表示连接是安全的。
如果请求是通过XMLHttpRequest生成的,则返回True。
(9)、HttpRequest.readline()[source]
(10)、HttpRequest.readlines()[source]
(11)、 HttpRequest.xreadlines()[source]
(12)、 HttpRequest.iter()
上面的几个方法都是从HttpRequest实例读取文件数据的方法。
不同之处在于下面:
返回:QueryDict: {'a': ['1', '2'], 'c': ['3']}>12
返回:QueryDict: {'a': ['val', 'val'], 'b': ['val']}>12
>>> q.update({'a': '2'})
>>> q.getlist('a')
['1', '2']
>>> q['a'] # returns the last
'2'123456
>>> q.items()
[('a', '3')]123
类似dict.values(),但是只返回最近的值。 像这样:
>>> q.values()
['3']123
使用copy.deepcopy()返回QueryDict对象的副本。 此副本是可变的!
返回键对应的值列表。 如果该键不存在并且未提供默认值,则返回一个空列表。
为list_设置给定的键。
将键追加到内部与键相关联的列表中。
类似dict.setdefault(),为某个键设置默认值。
类似setdefault(),除了它需要的是一个值的列表而不是单个值。
类似items(),只是它将其中的每个键的值作为列表放在一起。 像这样:
>>> q.lists()
[('a', ['1', '2', '3'])]123
返回给定键的值的列表,并从QueryDict中移除该键。 如果键不存在,将引发KeyError。 像这样:
>>> q.pop('a')
['1', '2', '3']123
删除QueryDict任意一个键,并返回二值元组,包含键和键的所有值的列表。在一个空的字典上调用时将引发KeyError。 像这样:
>>> q.popitem()
('a', ['1', '2', '3'])123
将QueryDict转换为Python的字典数据类型,并返回该字典。
>>> q.dict()
{'a': '5'}123
已url的编码格式返回数据字符串。 像这样:
>>> q.urlencode()
'a=2&b=3&b=5'123
>>> q['next'] = '/a&b/'
>>> q.urlencode(safe='/')
'next=/a%26b/'
二、HttpResponseWeb响应
Web响应——HttpResponse
HttpResponse.content
响应的内容。bytes类型。
HttpResponse.charset
编码的字符集。 如果没指定,将会从content_type中解析出来。
HttpResponse.status_code
响应的状态码,比如200。
HttpResponse.reason_phrase
响应的HTTP原因短语。 使用标准原因短语。
除非明确设置,否则reason_phrase由status_code的值决定。
HttpResponse.streaming
这个属性的值总是False。由于这个属性的存在,使得中间件能够区别对待流式响应和常规响应。
HttpResponse.closed
如果响应已关闭,那么这个属性的值为True。
1、HttpResponse方法
响应的实例化方法。使用content参数和content-type实例化一个HttpResponse对象。
检查头部中是否有给定的名称(不区分大小写),返回True或 False。
设置一个头部,除非该头部已经设置过了。
设置一个Cookie。 参数与Python标准库中的Morsel.Cookie对象相同。
与set_cookie()类似,但是在设置之前将对cookie进行加密签名。通常与HttpRequest.get_signed_cookie()一起使用。
删除Cookie中指定的key。
将HttpResponse实例看作类似文件的对象,往里面添加内容。
清空HttpResponse实例的内容。
将HttpResponse实例看作类似文件的对象,移动位置指针。
返回HttpResponse.content的值。 此方法将HttpResponse实例看作是一个类似流的对象。
Django1.10中的新功能,值始终为False。
Django1.10中的新功能,值始终为False。
Django1.10中的新功能,值始终为True。
将一个包含行的列表写入响应对象中。 不添加分行符。
2.1 返回前台字符串
...
return HttpResponse("接收数据成功") # 直接返回响应字符串123
return HttpResponse(jsonstr1 )1234
return HttpResponse(html)12
2.2 返回前端字典
from .models import User,Diary
from django.forms.models import model_to_dict
def finduser(request):
userid = request.POST.get("userid", None) # 读取数据
users = User.objects.filter(id=userid) # 获取一个用户,返回QuerySet
user = users[0] # 获取第一个user对象
user_dict1 = model_to_dict(user) # 将对象转化为字典
return JsonResponse(user_dict1) # 返回前端字典1234567891011
2.3 返回数据流
2.4 返回文件
response = FileResponse(open('myfile.png', 'rb'))12
2.3 返回静态html页面
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户登录</title>
</head>
<body>
<form action="/app1/insert/" method="post">
<input type="text" name="username"/>
<input type="password" name="password"/>
<input type="submit" value="提交">
</form>
</body>
</html>1234567891011121314
from .models import User,Diary
import time
def insertuser(request):
return render_to_response('insert.html') # 返回文件响应1234567
其实,python只是加载html文件,读取内容后,将内容返回给前台。所以是不是html格式并不重要。我们完全可以使用txt格式存储。在views.py文件的函数中加载txt文件。
2.4 动态生成html页面
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>信息展示</h1>
<table>
<tr>
<th>用户名</th>
<th>密码</th>
</tr>
{% for line in people_list %}
<tr>
<td>{{line.username}}</td>
<td>{{line.password}}</td>
</tr>
{% endfor %}
</table>
</body>
</html>12345678910111213141516171819202122
from .models import User,Diary
def findalluser(request):
allpeople = User.objects.all() # 查询所有用户
dict={
'people_list':allpeople
}
return render_to_response("showuser.html",dict) # 返回文件响应,第二个参数必须为字典12345678910
渲染的模板视图生成的是html页面,只能在浏览器中打开。移动互联网下的移动设备端是无法处理的。所以传输字典对象的形式更为流行。
三、render
上面学习了很多返回数据类型。在实际运用中,加载模板、传递参数,返回HttpResponse对象是一整套再常用不过的操作了,为了节省力气,Django提供了一个快捷方式:render函数,一步到位!
request:视图函数处理的当前请求,封装了请求头的所有数据,其实就是视图参数request。
template_name:要使用的模板的完整名称或者模板名称的列表。如果是一个列表,将使用其中能够查找到的第一个模板。
可选参数:
context:添加到模板上下文的一个数据字典。默认是一个空字典。可以将认可需要提供给模板的数据以字典的格式添加进去。这里有个小技巧,使用Python内置的locals()方法,可以方便的将函数作用于内的所有变量一次性添加。
content_type:用于生成的文档的MIME类型。 默认为DEFAULT_CONTENT_TYPE设置的值。
status:响应的状态代码。 默认为200。
using:用于加载模板使用的模板引擎的NAME。
使用render可以同时处理请求对象request、html模板、数据库数据。在Django中可以调用render函数,也可以在模板对象上调用render函数。
from .models import User,Diary
def findalluser(request):
allpeople = User.objects.all() # 查询所有用户
dict={
'people_list':allpeople
}
return render(request,'showuser.html',dict)12345678910
allpeople = models.User.objects.all() # 查询所有用户
dict={
'people_list':allpeople
}
template = loader.get_template('showuser.html') # 加载模板对象
return HttpResponse(template.render(dict1, request)) # 渲染视图
四、redirect重定向
转载于:https://www.cnblogs.com/xibuhaohao/p/10192351.html
Python Django 前后端数据交互 之 HttpRequest、HttpResponse、render、redirect相关推荐
- python后端数据发送到前端_Python Django 前后端数据交互 之 后端向前端发送数据...
Django 从后台往前台传递数据时有多种方法可以实现. 最简单的后台是这样的: from django.shortcuts import render defmain_page(request): ...
- django前后端数据交互
1. 用getJSON动态加载数据: $getJSON("{%url '{watch_information}'%}",{'data':data,},function(ret){ ...
- 详解 AJAX-SpringBoot 前后端数据交互
详解 AJAX-SpringBoot 前后端数据交互 1. Ajax 概述 Ajax 的英文全称是 "Asynchronous JavaScript and XML",即 &quo ...
- 前后端数据交互方法 汇总
这篇文章给大家介绍几种常用的前后端数据交互方法,并给出使用建议.以提高前后端协同开发的效率.非常的详细,推荐给小伙伴们,有需要的小伙伴可以参考下. 1.HTML赋值 输出到 Element 的 val ...
- 干货 | 万字长文全面解析GraphQL,携程微服务背景下的前后端数据交互方案
作者简介 古映杰,携程研发高级经理,负责前端框架和基础设施的设计.研发与维护.开源项目react-lite和react-imvc作者. 前言 随着多终端.多平台.多业务形态.多技术选型等各方面的发展, ...
- ajax连接前后端原理,前后端数据交互方法和原理
前后端数据交互方法和原理 发布时间:2018-10-28 11:25, 浏览次数:742 对于想要搞web的新手而言,会用html+css+javascript实现一个页面没什么太大的困难,但是想要前 ...
- 前后端数据交互——ajax技术
在实际开发过程中,前端页面通常需要根据后台数据实现动态生成和实时更新,因此如何实现前后端数据交互成了开发过程中的难题. 现将使用ajax技术解决前后端数据的交互: (1)ajax技术介绍: ajax一 ...
- 前后端数据交互|分页查询|表格-双向绑定|get和post的区别
目录 1 前后端数据交互 1.1 前端代码 部署在 前端服务器 1.2 前端代码 在 浏览器展示(只展示页面,没有数据)----自给自足 1.3 前端/浏览器 请求 后端数据 (后端死数据)----给 ...
- 软件测试的交互,软件测试--前后端数据交互
作为一个合格的软件测试人员, 能够熟练定位bug的位置是属于前端还是后端,是必备技能之一.所以就需要明白前后端数据是怎么进行交互的. 一.网站数据处理主要分为三层 第一层,表示层,这部分可以用HTML ...
最新文章
- R语言可视化绘图基础知识详解
- JavaScript获取样式值的几种方法学习总结
- Android移动开发之【Android实战项目】记一次app开发过程!
- python安装教程win8-python 2.7在win8.1上安装的方法
- 剖析Linux系统启动过程
- CSS--选择符大全(常用css选择符)
- 83998 连接服务器出错_来申请一个阿里云服务器玩玩?
- 使用CNN实现图像分类——理解卷积神经网络(卷积、池化、全连接)
- GitHub开源项目之“线程池”
- 力扣 有多少小于当前数字的数字
- [转] PHP之soap: soap使用例子
- Java中的指针---Unsafe应用解析
- Python numpy中矩阵的用法总结
- 数据分析:RFM模型
- ct扫描方式有哪些_日联科技x-ray:工业CT是怎么进行X射线的断层扫描的
- Multisim14仿真基本模拟电路之 10.5电压比较器及其应用电路的仿真实验与分析
- html表单鼠标悬停变色,当我将鼠标悬停在html表格中时,更改单元格中颜色的颜色...
- CentOS7将home目录下中文目录改为英文目录
- 北德克萨斯大学计算机系,美国北德克萨斯大学计算机科学与工程系主任Barrett Bryant访问昆明理工大学...
- 中国可调节麦克风支架行业销售状况与盈利前景预测报告(2022-2027)