Django请求,响应,ajax以及CSRF问题
二、request对象常用属性:
| Attribute | Description |
|---|---|
| path | 请求页面的全路径,不包括域名端口参数。例如: /users/index |
| method | 一个全大写的字符串,表示请求中使用的HTTP方法,常用值:GET, POST,DELETE,PUT等。以下三种为 GET 请求:
|
| user |
|
| GET | 类似字典的 QueryDict 对象,包含 GET 请求的所有参数 |
| POST | 类似字典的 QueryDict 对象,包含 POST 请求的所有键值对参数(表单post提交的参数) |
| body | 获取原始的请求体数据,获取到的数据为bytes类型 |
| META | python 字典类型,封装了请求头headers中的数据- REMOTE_ADDR – 客户端的IP地址 - REQUEST_METHOD — 一个字符串,例如"GET" 或"POST- CONTENT_TYPE – 请求的正文的MIME 类型
注意:对于用户添加到请求头中的键值,Django会给键加上前缀 |
| COOKIES | 一个标准的 python 字典,包含所有的 cookies, 键和值都是字符串 |
| session | 可读可写的类似字典的对象: django.contrib.sessions.backends.db.SessionStore。Django 提供了 session 模块,默认就会开启用来保存 session 数据
|
HttpResponse对象
响应对象主要有三种形式: HttpResponse()
render()
redirect()
HttpResponse()括号内直接跟一个具体的字符串作为响应体,比较直接很简单,所以这里主要介绍后面两种形式。 render(request, template_name, [context])
def index(request):
timmer = datetime.datetime.now()
li = [1, 2, 3, 4, 5, 6]
context = {"ls": {"age": [1, 2, 3, 4, 5], 'like': 'woman'}, 'ss': {"age": 15, 'like': 'woman'}}
#把所有局部变量全都传过去
return render(request, 'index.html', locals())
结合一个给定的模板和一个给定的上下文字典,并返回一个渲染后的 HttpResponse 对象。
参数:
request: 用于生成响应的请求对象。 template_name:要使用的模板的完整名称,可选的参数 context:添加到模板上下文的一个字典。默认是一个空字典。如果字典中的某个值是可调用的,视图将在渲染模板之前调用它。 render方法就是将一个模板页面中的模板语法进行渲染,最终渲染成一个html页面作为响应体。
redirect()
传递要重定向的一个硬编码的URL def my_view(request):
return redirect('/some/url/')
也可以是一个完整的URL:
def my_view(request):
return redirect('http://example.com/')
JsonResponse对象
- 帮助我们将数据转换为json字符串,再返回给客户端
会设置响应头
Content-Type为application/jsonfrom django.http import JsonResponse def resp(request):
return JsonResponse({'city': 'beijing', 'subject': 'python'})
当包含的内容中包含中文时,会返回该中文对应的编码,例如:
def resp(request): # 最终看到的效果是: {"name": "\u5f20\u4e09"}
response = JsonResponse({"name":"张三"})
return response
解决:
JsonResponse(data, json_dumps_params={'ensure_ascii':False})JsonResponse可以接收非字典数据,需要指定
safe=False
当发送ajax请求时候,发送的内容为json类型,原生Django不能自动解析json数据手动解析
$("#demo").click(function () {
$.ajax(
{
url: '/ajax/',
contentType: 'application/json',
method: 'post',
data: JSON.stringify({
"name": "ls", "age": 12
}),
success: function (response) {
alert(response['name'])
$('.show').html(response['name'])
}
}
)
})
python代码
def ajax(request):
if request.method == "GET":
return render(request, 'ajax.html')
else:
json_dict = json.loads(request.body.decode('utf8'))
print(json_dict)
return JsonResponse({'name': 'l1111'})
接受文件的时候
file = request.FILES.get('files')
with open(file.name, 'wb') as a:
for i in file:
a.write(i)
return HttpResponse('ok')
scrf,跨域请求伪造问题
1.表单中添加
{% csrf_token %} 为input 标签 type = hidden
<form action="/demo">
用户名:<input type="text">
{% csrf_token %}
</form>
2.ajax添加
在ajax中带着这个值,csrfmiddlewaretoken:'{{ csrf_token }}
function myajax(){
var temp = $('#ajax_id').val();
$.ajax({
url:'/ajax_app/test',
type:'POST',
data:{data1:temp,csrfmiddlewaretoken:'{{ csrf_token }}'},
success:function (arg) {
var obj = jQuery.parseJSON(arg);
$('#ajax_id').val(obj.msg);
},
error:function () {
alert("failed");
}
});
}
第三种csrf解决方案
<script src="{% static 'js/jquery.cookie.js' %}"></script>
$.ajax({
headers:{"X-CSRFToken":$.cookie('csrftoken')},
})
Django请求,响应,ajax以及CSRF问题的更多相关文章
- Django请求响应对象
请求与响应对象 HttpRequest HttpRequest存储了客户请求的相关参数和一些查询方法. path 请求页面的全路径,不包括域名-例如, "/hello/". met ...
- DRF对Django请求响应做了技术升级
Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优 ...
- Django框架 之 基于Ajax中csrf跨站请求伪造
Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({ data: {csrfmiddlewaretoken: ...
- [Django高级之中间件、csrf跨站请求伪造]
[Django高级之中间件.csrf跨站请求伪造] Django中间件 什么是中间件? Middleware is a framework of hooks into Django's request ...
- Django 如何让ajax的POST方法带上CSRF令牌
问题 大家知道,在大前端领域,有一种叫做ajax的东东,即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),它被用来在不刷新页面的情况下,提 ...
- Django(十一)请求生命周期之响应内容(请求/响应 头/体)
https://www.cnblogs.com/renpingsheng/p/7534897.html Django请求生命周期之响应内容 http提交数据的方式有"post",& ...
- Ajax的基本请求/响应模型
一.Ajax工作核心 Ajax的核心是JavaScript对象XMLHttpRequest(简称XHR).它是一种支持异步请求的技术.可以通过使用XHR对象向服务器提出请求并处理响应,而不阻塞用户. ...
- Django请求生命周期之响应内容
Django请求生命周期: 1.发送http请求2.服务器接受,根据请求头中的url在路由关系表中进行匹配(从上到下)3.匹配成功后,执行指定的views函数 URL -> 函数 ==>F ...
- AJAX 创建对象 请求 响应 readyState
AJAX 创建对象 请求 响应 readyState AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML). 不是新的编程语言, 而是一 ...
随机推荐
- Objective-C Runtime(二)消息传递机制
在对象上调用方法是包括Objective-C的众多语言都具备的功能.但在Objective-C中,这个术语叫『传递消息』(pass a message).『消息』有「名称」(name)或「选择子」(s ...
- [SDOI2016] 模式字符串 (BZOJ4598 & VIJOS1995)
首先直接点分+hash就可以做,每个点用hash判断是否为S重复若干次后的前缀或后缀,每个子树与之前的结果O(m)暴力合并.在子树大小<m时停止分治,则总复杂度为O(nlog(n/m)). 问题 ...
- .NETFramework:HttpContext
ylbtech-.NETFramework:HttpContext 1.返回顶部 1. #region 程序集 System.Web, Version=4.0.0.0, Culture=neutral ...
- C - Soldier and Cards
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Two bo ...
- Ubuntu16.04 : 用友善提供的4.5.1解压后,运行/opt/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc -v出错
通过查阅百度和谷歌,以下解决方法: The problem has been solved, because I installed the amd64.iso linux system,so fir ...
- 【废弃】JavaScript 控制类语法
创建: 2017/10/07 完成: 2017/10/07 结束: 2019/02/19 把所有内容迁出到[JavaScript 基础]并将本博文归档到[废弃] return前加一个空格, 使所有单元 ...
- 洛谷 - P2045 - 方格取数加强版 - 费用流
原来这种题的解法是费用流. 从一个方格的左上走到右下,最多走k次,每个数最多拿走一次. 每次走动的流量设为1,起始点拆点成限制流量k. 每个点拆成两条路,一条路限制流量1,费用为价值相反数.另一条路无 ...
- CodeForces 615C
题意: 给定两个字符串s1,s2利用s1去构造s2,s1有无限个,可以翻转,你最少要用几个s1才能构造s2.输出每一次使用的s1的有效区间. 伪思路: 据说是暴力就能过的题目.然而自己就是暴力差,模拟 ...
- magento性能分析插件
两个好用的插件: http://connect20.magentocommerce.com/community/MagnetoDebughttp://connect20.magentocommerce ...
- Apache Kylin的核心概念
不多说,直接上干货! 1.表(table):This is definition of hive tables as source of cubes,在build cube 之前,必须同步在 kyli ...