二、request对象常用属性:

Attribute Description
path 请求页面的全路径,不包括域名端口参数。例如: /users/index
method 一个全大写的字符串,表示请求中使用的HTTP方法,常用值:GET, POSTDELETEPUT等。以下三种为 GET 请求:

  • form 表单默认提交(或者method指定为get)
  • 在浏览器中输入地址直接请求
  • 网页中的超链接(a标签)
user
  • 已登录:AbstractUser对象;
  • 未登录:AnonymousUser对象;
    判断是否已经登录: request.user.is_authenticated(),返回true表示已经登录
GET 类似字典的 QueryDict 对象,包含 GET 请求的所有参数
POST 类似字典的 QueryDict 对象,包含 POST 请求的所有键值对参数(表单post提交的参数)
body 获取原始的请求体数据,获取到的数据为bytes类型
META python 字典类型,封装了请求头headers中的数据
REMOTE_ADDR – 客户端的IP地址 
REQUEST_METHOD — 一个字符串,例如"GET" 或"POST
CONTENT_TYPE – 请求的正文的MIME 类型

注意:对于用户添加到请求头中的键值,Django会给键加上前缀 HTTP_再转换成大写,再把键值保存到request.META中 
官方文档参考

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对象

  1. 帮助我们将数据转换为json字符串,再返回给客户端
  2. 会设置响应头 Content-Type 为 application/json

     from django.http import JsonResponse
    
     def resp(request):
    return JsonResponse({'city': 'beijing', 'subject': 'python'})
  3. 当包含的内容中包含中文时,会返回该中文对应的编码,例如:

     def resp(request):
    
         # 最终看到的效果是: {"name": "\u5f20\u4e09"}
    response = JsonResponse({"name":"张三"})
    return response

    解决:JsonResponse(data, json_dumps_params={'ensure_ascii':False})

  4. 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问题的更多相关文章

  1. Django请求响应对象

    请求与响应对象 HttpRequest HttpRequest存储了客户请求的相关参数和一些查询方法. path 请求页面的全路径,不包括域名-例如, "/hello/". met ...

  2. DRF对Django请求响应做了技术升级

    Django视图是用来处理请求和响应的,Django默认是按Form和Template来设计的,如果要处理以JSON格式为主的RESTful API,那么就需要对Django请求和响应的处理代码进行优 ...

  3. Django框架 之 基于Ajax中csrf跨站请求伪造

    Django框架 之 基于Ajax中csrf跨站请求伪造 ajax中csrf跨站请求伪造 方式一 1 2 3 $.ajaxSetup({     data: {csrfmiddlewaretoken: ...

  4. [Django高级之中间件、csrf跨站请求伪造]

    [Django高级之中间件.csrf跨站请求伪造] Django中间件 什么是中间件? Middleware is a framework of hooks into Django's request ...

  5. Django 如何让ajax的POST方法带上CSRF令牌

    问题 大家知道,在大前端领域,有一种叫做ajax的东东,即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML),它被用来在不刷新页面的情况下,提 ...

  6. Django(十一)请求生命周期之响应内容(请求/响应 头/体)

    https://www.cnblogs.com/renpingsheng/p/7534897.html Django请求生命周期之响应内容 http提交数据的方式有"post",& ...

  7. Ajax的基本请求/响应模型

    一.Ajax工作核心 Ajax的核心是JavaScript对象XMLHttpRequest(简称XHR).它是一种支持异步请求的技术.可以通过使用XHR对象向服务器提出请求并处理响应,而不阻塞用户. ...

  8. Django请求生命周期之响应内容

    Django请求生命周期: 1.发送http请求2.服务器接受,根据请求头中的url在路由关系表中进行匹配(从上到下)3.匹配成功后,执行指定的views函数 URL -> 函数 ==>F ...

  9. AJAX 创建对象 请求 响应 readyState

    AJAX 创建对象 请求 响应 readyState AjAX = Asynchronous JavaScript and XML (异步的JavaScrip和 XML). 不是新的编程语言, 而是一 ...

随机推荐

  1. BZOJ_4311_向量_线段树按时间分治

    BZOJ_4311_向量_CDQ分治+线段树按时间分治 Description 你要维护一个向量集合,支持以下操作: 1.插入一个向量(x,y) 2.删除插入的第i个向量 3.查询当前集合与(x,y) ...

  2. 微信小程序在线制作 自己制作微信小程序

    小程序是个什么东西?怎么自己制作微信小程序?微信小程序在线制作难吗?最近老是听这类问题,耳朵都长茧子了. 百牛信息技术bainiu.ltd整理发布于博客园 接下来作为一个技术人员的角度就为大家分析一下 ...

  3. Linux终端那件事儿

    我们将会讨论如何更好的控制用户终端:也就说是键盘输入与屏幕输出.除了这些,我们还会了解我们编写的程序如何由用户处读取输入,即使是在输入重定向的情况下,以及确保输出到屏幕的正确位置.这里所提供的一些底层 ...

  4. linux 下 读取某个文件的某一行或者某几行

    wc -l  a.txt  统计a.txt 行数 查看文件a.txt的第190行到196行, sed -n '190,196p' a.txt  如果查看某一行用 sed -n 'a,bp' a.txt ...

  5. ORACLE PL/SQL 实例精解之第一章 PL/SQL概念

    1.传统一层一层传数据,而PLSQL作为独立的单元返回客户端,减少查询,减少网路传输的往返,高效 2.PL/SQL语句块 分为两种:命名(子程序,函数,包保存在数据库中,后期可以根据名称进行引用),匿 ...

  6. 洛谷 - P1141 - 01迷宫 - dfs

    https://www.luogu.org/problemnew/show/P1141 能互相到达的格子的答案自然是一样的,第一次dfs标记联通块,第二次dfs把cnt传递到整个联通卡并顺手消除vis ...

  7. SCUT - 249 - A piece of Cake - 组合数学

    https://scut.online/contest/25/I 由结论:d维物体切n刀分成的部分=sum(C(n,0)~C(n,d)),直接算就行了.

  8. Swift3.0 控制流

    常用的一些判断方式 //for in let numberList = [, , , , ] //获取第一个元素 !拆包 print(numberList.first!)//1 //获取最后一个元素 ...

  9. 51nod 1347 【水】

    #include<cstdio> #include <map> #include<iostream> #include<string.h> #inclu ...

  10. POJ1861 kruskal.

    #include <iostream> #include <stdio.h> #include <string.h> #include <stack> ...