心蓝的博客 心蓝的博客
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档

心蓝

人生苦短,我用python
首页
  • 零基础

    • python零基础入门
  • 专项

    • 正则表达式
  • web框架

    • django框架
    • drf
技术
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • 零基础

  • 专项

  • web框架

    • django框架

      • web框架介绍
      • python虚拟环境
      • 创建django项目与应用
      • django中的路由系统
      • web框架设计模式
      • 模板
      • 静态文件引用
      • web应用开发模式
      • 请求和响应
        • 请求
          • HttpRequest对象
          • 常用属性
          • 请求参数类型
        • 响应
          • HttpResponse
          • 传入字符串
          • 设置头字段
          • 设置状态码
          • JsonResponse对象
      • 视图
      • ORM与模型
      • 数据库操作
      • 项目实战一
      • 表单
      • RESTful API
      • 项目实战二
      • djangoadmin
    • drf

  • python
  • web框架
  • django框架
心蓝
2022-12-21
目录

请求和响应

# 请求和响应

web框架本质就是处理用户发起的请求,然后返回响应结果。请求,和响应就是框架中的数据流。

# 请求

当页面被请求时,django会创建一个HttpRequest对象,该对象包含关于请求的元数据。然后django加载适当的视图,将HttpRequest对象作为第一个参数传递给视图函数(这就是为什么所有的视图的第一个参数都命名为request的原因)。每个视图负责返回一个HttpResponse对象。

# HttpRequest对象

# 常用属性

  • .body

原始请求的body,类型是字节类型。

  • .method

代表请求中使用的http方法的字符串,保证是大写字母。例如在函数视图中通过判断request.method来处理不同的逻辑:

if request.method == 'GET':
    do_something()
elif request.method == 'POST':
    do_something_else()
1
2
3
4
  • .GET

一个类似字典的对象,包含所有给定的HTTP GET参数(查询参数)。

  • .POST

一个类似字典的对象,包含所有给定的表单格式的HTTP POST参数。

  • .FILES

一个类似字典额对象,包含所有上传的文件。

更多属性,请参考官方文档 (opens new window)

# 请求参数类型

利用HTTP协议向服务器传参有几种途径?

  1. 查询字符串参数
    • url中?后面的key=value形式的参数
    • 在django中通过request.GET属性获取
  2. 请求体参数
    • post方法的form表单
      • 在django中通过request.POST属性获取
    • json格式和put,patch,delete方法传递的form表单
      • 在django中通过request.body属性获取
    • 文件
      • 上传的文件通过request.FILES属性获取
  3. 路径参数
    • 在django中通过路由规则传递给视图

# 响应

与django自动创建请求对象不同,创建响应对象是你的责任。你写的每个视图都要负责实例化,填充和返回一个响应对象。

# HttpResponse

# 传入字符串

典型的用法是将页面的内容以字符串、或字节字符串的形式传递给 HttpResponse 构造函数:

>>> from django.http import HttpResponse
>>> response = HttpResponse("Here's the text of the Web page.")
>>> response = HttpResponse("Text only, please.", content_type="text/plain")
>>> response = HttpResponse(b'Bytestrings are also accepted.')
1
2
3
4

也可以增量的形式添加内容,你可以使用response作为一个类似文件的对象:

>>> response = HttpResponse()
>>> response.write("<p>Here's the text of the Web page.</p>")
>>> response.write("<p>Here's another paragraph.</p>")
1
2
3

# 设置头字段

使用HttpResponse.headers设置和删除一个字段。

>>> response = HttpResponse()
>>> response.headers['Age'] = 120
>>> del response.headers['Age']
1
2
3

# 设置状态码

直接传递参数status给构造函数

>>> from django.http import HttpResponse
>>> response = HttpResponse("Here's the text of the Web page.", status=200)
1
2

# JsonResponse对象

  • class JsonResponse(data,encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, kwargs)

一个HttpResponse的子类,用来创建json编码的响应。默认的Content-Type为application/json。第一个参数data应该是字典实例。如果safe参数设置为False,它可以是任何json可序列化的对象。

典型的用法:

>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
b'{"foo": "bar"}'
1
2
3
4

序列化非字典对象:

为了对 dict 以外的对象进行序列化,你必须将 safe 参数设置为 False:

>>> response = JsonResponse([1, 2, 3], safe=False)
1

如果没有传递 safe=False,将引发一个 TypeError (opens new window)。

本文完,感谢你的耐心阅读,如有需要可加我微信,备注「博客」并说明原因,我们一起进步,下次见。

#django
上次更新: 2023/04/16, 21:41:27
web应用开发模式
视图

← web应用开发模式 视图→

最近更新
01
requests让接口测试如此简单 原创
03-31
02
最简明的python正则教程
03-30
03
pycharm激活码
12-30
更多文章>
Theme by Vdoing | Copyright © 2019-2025 心蓝
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式