[Python]Django请求与响应(二)

简介: [Python]Django请求与响应(二)

4.2 JSON数据

4.2.1 Postman发送JSON数据

JSON字符串必须使用双引号,JSON与字典类似

{
    "username":"zszs",
    "pwd":"123123"
}

4.2.2 服务器获取传递的JSON数据

服务器获取传递的JSON数据,使用request.body.

json模块:

  • json.dumps:将字典转换为JSON字符串
  • json.loads:将JSON字符串转换为字典
from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
import json
# Create your views here.
def login(request):
    # JSON数据在request的body中
    # 获取传递的JSON数据
    body = request.body
    print(body)
    # 传递过来的数据为二进制,对传递的数据进行解码
    body_str = body.decode()
    print(body_str, type(body_str))
    # 解码后的数据为JSON字符串,转换为字典
    body_dic = json.loads(body_str)
    print(body_dic, type(body_dic))
    return HttpResponse('收到')

5. 获取请求头传递的数据

获取通过请求头传递过来的数据,使用request.MATE进行获取请求头headers中的数据,request.META为字典类型。

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
import json
# Create your views here.
def login(request):
    # 获取请求头
    request_header = request.META
    print(request_header)
    print(type(request_header))
    # 由于请求头是字典类型
    # 获取请求发送过来的文本的文本类
    print(request_header['CONTENT_TYPE'])
    return HttpResponse('收到')

6. 其他常用HttpRequest对象属性

  • method:一个字符串,表示请求使用的HTTP方法,常用值包括:‘GET’、‘POST’。
  • user:请求的用户对象。
  • path:一个字符串,表示请求的页面的完整路径,不包含域名和参数部分。
  • encoding:一个字符串,表示提交的数据的编码方式。
  • 如果为None则表示使用浏览器的默认设置,一般为utf-8。
  • 这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值。
  • FILES:一个类似于字典的对象,包含所有的上传文件。
from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
import json
# Create your views here.
def login(request):
    # 获取浏览器发送请求的请求类型
    print(request.method)
    # 获取所有的上传文件
    print(request.FILES)
    return HttpResponse('收到')

7. HttpResponse对象

视图在接收请求并处理后,必须返回HttpResponse对象或子对象。HttpRequest对象由Django创建,HttpResponse对象由开发人员创建。

7.1 HttpResponse

可以使用django.http.HttpResponse来构造响应对象。

HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)
  • 可通过HttpResponse对象属性来设置响应体、响应体数据类型、状态码:
  • content:表示返回的内容。
  • 默认传递字符串,不要传递对象、字典等数据
  • content_type:响应体数据类型
  • status:返回的HTTP响应状态码。
from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
import json
# Create your views here.
def login(request):
    data = {
        'name': 'zszs'
    }
    return HttpResponse(data)

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
import json
# Create your views here.
def login(request):
    obj = object()
    return HttpResponse(obj)

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
import json
# Create your views here.
def login(request):
    return HttpResponse('收到请求')

7.2 JsonResponse

JsonResponse为HttpResponse的子类对象。

若要返回json数据,可以使用JsonResponse来构造响应对象。

JsonResponse的作用:

1.帮助我们将数据转换为json字符串

2.设置响应头Content-Type为application/json

from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
from django.http import JsonResponse
import json
# Create your views here.
def login(request):
    data = {
        'name': 'zszszs'
    }
    return JsonResponse(data)

7.3 HttpResponse的其他子类

Django提供了一系列HttpResponse的子类,可以快速设置状态码

  • HttpResponseRedirect 301
  • HttpResponsePermanentRedirect 302
  • HttpResponseNotModified 304
  • HttpResponseBadRequest 400
  • HttpResponseNotFound 404
  • HttpResponseForbidden 403
  • HttpResponseNotAllowed 405
  • HttpResponseGone 410
  • HttpResponseServerError 500

8. 重定向

在浏览器向服务器发送请求成功后,可以将页面重定向到其他的页面或网址。如:用户进行登录,登录成功后跳转到首页,可以使用重定向。

进行重定向使用redirect()

redirect()的导入:

from django.shortcuts import redirect
from django.shortcuts import render
from django.http import HttpRequest
from django.http import HttpResponse
from django.http import JsonResponse
from django.shortcuts import redirect
from django.urls import reverse
import json
# Create your views here.
def login(request):
    # 请求成功,进行页面跳转
    # 跳转到book/index
    # 由于对路由起了命名空间和路由命名
    # path('book/', include(('book.urls', 'book'), namespace='book'))
    # path('index/', index, name='index')
    # 动态获取路由
    redirect_path = reverse('book:index')
    return redirect(redirect_path)


相关文章
|
2月前
|
存储 应用服务中间件 开发工具
对象存储OSS-Python设置代理访问请求
通过 Python SDK 配置 nginx 代理地址请求阿里云 OSS 存储桶服务。示例代码展示了如何使用 RAM 账号进行身份验证,并通过代理下载指定对象到本地文件。
115 15
|
3月前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
269 45
|
2月前
|
数据采集 JSON 测试技术
Grequests,非常 Nice 的 Python 异步 HTTP 请求神器
在Python开发中,处理HTTP请求至关重要。`grequests`库基于`requests`,支持异步请求,通过`gevent`实现并发,提高性能。本文介绍了`grequests`的安装、基本与高级功能,如GET/POST请求、并发控制等,并探讨其在实际项目中的应用。
79 3
|
2月前
|
JSON 前端开发 JavaScript
Python中如何判断是否为AJAX请求
AJAX请求是Web开发中常见的异步数据交互方式,允许不重新加载页面即与服务器通信。在Python的Django和Flask框架中,判断AJAX请求可通过检查请求头中的`X-Requested-With`字段实现。Django提供`request.is_ajax()`方法,Flask则需手动检查该头部。本文详解这两种框架的实现方法,并附带代码示例,涵盖安全性、兼容性、调试及前端配合等内容,帮助开发者提升Web应用性能与用户体验。
57 0
|
4月前
|
数据采集 前端开发 算法
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
本文介绍了如何使用 Python 的 `requests` 库应对复杂的 HTTP 请求场景,包括 Spider Trap(蜘蛛陷阱)、SESSION 访问限制和请求频率限制。通过代理、CSS 类链接数控制、多账号切换和限流算法等技术手段,提高爬虫的稳定性和效率,增强在反爬虫环境中的生存能力。文中提供了详细的代码示例,帮助读者掌握这些高级用法。
281 1
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
|
3月前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
83 3
|
3月前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
112 2
|
3月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
73 1
|
4月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
74 4
|
9月前
|
开发框架 开发者 Python
深入探究Python Web开发框架:Flask与Django
Python作为一种广泛应用于Web开发的编程语言,其拥有众多优秀的Web开发框架。本文将深入探讨其中两大知名框架——Flask与Django。通过对它们的概念与实践进行比较分析,帮助读者更好地理解和选择适合自己项目需求的Web开发框架。

热门文章

最新文章

推荐镜像

更多