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). 不是新的编程语言, 而是一 ...
随机推荐
- Watir: 在使用test/unit的时候要注意,不需要require的时候别require
假设我书写了很多测试用例,测试用例中都有:require 'test/unit' 后来我想把很多这样的测试用例组织在一起运行,我使用了两个require: require 'test/unit' re ...
- Bootstrap-CSS:按钮
ylbtech-Bootstrap-CSS:按钮 1.返回顶部 1. Bootstrap 按钮 本章将通过实例讲解如何使用 Bootstrap 按钮.任何带有 class .btn 的元素都会继承圆角 ...
- uploadify提示修改为中文
使用uploadify时报错时是英文提示,并且上传文件进度条显示的是英文,如何修改为中文呢,直接打开jquery.uploadify.min.js(如果你使用的是jquery.uploadify.js ...
- 6-12 SVM小结
介绍了SVM的概念以及如何利用SVM进行一个身高体重的训练和预测.如果类别比较简单的话,那么在二维空间上它有可能就是一条直线.如果类别比较复杂,那么投影到高维空间上它就是一个超平面.所以SVM的本质它 ...
- python 之 配置环境变量、通过pip 安装第三方库
配置环境变量 右击桌面上的“此电脑”—>“属性”—>“高级系统设置”—>右下角“环境变量”—>双击“系统变量”里的“Path”—>点击“新建”—>输入python的 ...
- IT兄弟连 JavaWeb教程 Servlet表单乱码问题
在使用原生的Servlet进行Web应用开发时经常会遇到一些中文乱码问题,造成乱码问题的原因只有一个:即客户端与服务端的字符编码不一致所导致的. 请求参数乱码问题 服务器端获取客户端传递过来的数据出现 ...
- 重装 Cloudera CDH 5,启动oozie 出错处理
参考文章:http://community.cloudera.com/t5/Cloudera-Manager-Installation/Error-CDH5-oozie/td-p/8686 按照文章说 ...
- 鸟哥私房菜基础篇:学习 Shell Scripts习题
猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0340bashshell-scripts.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-请 ...
- 鸟哥私房菜基础篇:vim 程序编辑器习题
猫宁!!! 参考链接:http://cn.linux.vbird.org/linux_basic/0310vi.php 鸟哥是为中国信息技术发展做出巨大贡献的人. 1-我用 vi 开启某个档案后,要在 ...
- 黑客攻防技术宝典web实战篇:核心防御机制习题
猫宁!!! 参考链接:http://www.ituring.com.cn/book/885 黑客攻防技术宝典web实战篇是一本非常不错的书,它的著作人之一是burpsuite的作者,课后的习题值得关注 ...