[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)


相关文章
|
23天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
125 45
|
30天前
|
数据采集 前端开发 算法
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
本文介绍了如何使用 Python 的 `requests` 库应对复杂的 HTTP 请求场景,包括 Spider Trap(蜘蛛陷阱)、SESSION 访问限制和请求频率限制。通过代理、CSS 类链接数控制、多账号切换和限流算法等技术手段,提高爬虫的稳定性和效率,增强在反爬虫环境中的生存能力。文中提供了详细的代码示例,帮助读者掌握这些高级用法。
Python Requests 的高级使用技巧:应对复杂 HTTP 请求场景
|
13天前
|
JSON API 数据格式
Python中获取HTTP请求响应体的详解
本文介绍了如何使用Python的`requests`和`urllib`库发送HTTP请求并处理响应体。`requests`库简化了HTTP请求过程,适合快速开发;`urllib`库则更为底层,适用于性能要求较高的场景。文章详细演示了发送GET请求、处理JSON响应等常见操作。
|
24天前
|
安全 数据库 开发者
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第26天】本文详细介绍了如何在Django框架下进行全栈开发,包括环境安装与配置、创建项目和应用、定义模型类、运行数据库迁移、创建视图和URL映射、编写模板以及启动开发服务器等步骤,并通过示例代码展示了具体实现过程。
35 2
|
28天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
38 1
|
1月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
30 4
|
1月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
36 1
|
1月前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
36 4
|
1月前
|
JSON 缓存 API
在 Python 中使用公共类处理接口请求的响应结果
在 Python 中使用公共类处理接口请求的响应结果
33 1
|
6月前
|
开发框架 开发者 Python
深入探究Python Web开发框架:Flask与Django
Python作为一种广泛应用于Web开发的编程语言,其拥有众多优秀的Web开发框架。本文将深入探讨其中两大知名框架——Flask与Django。通过对它们的概念与实践进行比较分析,帮助读者更好地理解和选择适合自己项目需求的Web开发框架。
下一篇
无影云桌面