zoukankan      html  css  js  c++  java
  • Django:(03)请求和响应

     

    一、HttpRequest

    客户端传参的几种方式
    传递方式
    示例
    后端获取方式
    数据类型
    url路径(path)
    /news/1/2
    正则匹配
     str
    查询字符串
    /news2?category=1&page=2
    request.GET
    QueryDict
    请求体:表单类型数据
    category=1&page=2
    request.POST
    QueryDict
    请求体:json等
    {"category":1,"page":2}
    request.body
    bytes
    请求头
    category=1 page=2
    request.META
    字典

    表格说明:

      客户端通过五种方式向服务器传参,django 会自动把参数封装到 request 对象(HttpRequest类型的实例)中,我们获取这些参数需要通过 request 对象获取,而根据传参的方式的不同,获取调用的属性也会不同,获取到的数据类型也不一样。根据属性的数据类型需要调用其 get() 方法或 getlist() 方法获取值。

    获取 request 请求的属性:
    
    .GET:获取查询字符串参数  (与请求方式无关)——QueryDict对象    
    .POST:获取请求体中的表单类型的数据(与请求方式有关,仅限post请求)——QueryDict对象  
    .body:获取请求体非表单类型的数据,比如:json    
    .META:获取请求头中的数据(获取自定义属性时,需要加前缀“HTTP_”, 并转成大写) 
    .user:当前访问的登录用户对象

    关于 request.user 属性:

      request 里保存着 user 属性,如果用户已登陆,那么 user 是一个 AbstractUser 对象,如果用户未登录,那么 user 是一个 AnnoymousUser 对象。

      user对象判断是否登陆:request.user.is_authenticated()返回true表示登陆。

    CSRF 安全防护:

      Django 对 POST、PUT、PATCH、DELETE 请求方式开启了 CSRF 安全防护,为方便测试,可以在 settings.py 文件中注释掉 CSRF 中间件,关闭CSRF防护。

    获取QueryDict:

      获取QueryDict的值时,可以在参数中设置默认值,在或取不到值时返回默认值

    二、QueryDict对象

    • QueryDict 对象的包位于 django.http.QueryDict
    • 与字典类似,但一个键可以保存多个值
    • HttpRequest对象的 GET 和 POST 属性都是 QueryDict 类型

    获取值的方法:

    .get()方法

    根据键获取值
    如果一个键同时拥有多个值,将获取最后一个值
    如果键不存在则返回None值,可以设置返回自定义的默认值
    dict.get('键',默认值)

    .getlist()方法

    根据键获取多个值,值以列表返回
    如果键不存在则返回空列表[]
    dict.getlist('键',默认值)
    

      

    三、HttpResponse

    1、常用子类

    HttpResponseRedirect   重定向
    JsonResponse   返回json数据

    Django提供了一系列HttpResponse的子类,可以快速设置状态码:
    HttpResponseRedirect 302
    HttpResponseNotModified 304
    HttpResponseBadRequest 400
    HttpResponseNotFound 404
    HttpResponseForbidden 403
    HttpResponseNotAllowed 405
    HttpResponseServerError 500

    2、构造响应对象

    • 使用 django.http.HttpResponse来构造响应对象:

    response =HttpResponse(content=响应体, content_type=响应体数据MIME类型, status=状态码)
    • 响应头设置:

      可以直接将 HttpResponse 对象当做字典进行响应头键值对的设置:

    respone['响应头key'] = 响应头值
    

    3、JsonResponse 子类

    # 传递字典类型的数据   content_type: application/json
    JsonResponse({"name":"张三"})
    # 解决编码问题:  {"name": "u5f20u4e09"}
    JsonResponse({"name":"张三"}, json_dumps_params={'ensure_ascii':False})
    # 传递列表数据
    JsonResponse([{"name":"张三"}], json_dumps_params={'ensure_ascii':False}, safe=False)

    4、HttpResponseRedirect 子类

     # 重定向到首页   状态码:302
    return redirect('/index')
    
    # 项目的urls.py
    url(r'^', include('users.urls', namespace='users')),  
    # 应用的urls.py
    url(r'^home$', views.index, name='index'),
    
    def my_redirect(request):
        # 生成的url的值为 /home
        url = reverse('users:index') 
        return redirect(url) # 重定向
  • 相关阅读:
    数据结构算法(3)--排序
    数据结构算法(2)--字符串匹配
    数据结构与算法(0)-四则运算
    数据结构算法(1)--递归转化
    高级软件工程实践总结
    beta冲刺随笔集合
    Beta冲刺-用户测试报告
    Beta冲刺总结
    SDN期末作业-负载均衡的实现
    SDN第六次作业
  • 原文地址:https://www.cnblogs.com/mzfly/p/9974466.html
Copyright © 2011-2022 走看看