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


相关文章
|
12天前
|
开发框架 数据库 开发者
Web开发新境界:用Python玩转Django和Flask!
【6月更文挑战第12天】Python的Web开发框架Django和Flask各有千秋。Django是全能型框架,适合快速开发大型应用,提供ORM、模板引擎、URL路由和后台管理等全面功能。Flask则轻量级且灵活,适用于小型到中型应用,以其简单易用、高度可扩展和灵活路由著称。两者结合使用,能应对各种Web开发需求。
|
10天前
|
前端开发 JavaScript 数据安全/隐私保护
计算机Python项目|django学生成绩管理系统
计算机Python项目|django学生成绩管理系统
|
9天前
|
JSON 数据格式 Python
Python 的 requests 库是一个强大的 HTTP 客户端库,用于发送各种类型的 HTTP 请求
【6月更文挑战第15天】Python的requests库简化了HTTP请求。安装后,使用`requests.get()`发送GET请求,检查`status_code`为200表示成功。类似地,`requests.post()`用于POST请求,需提供JSON数据和`Content-Type`头。
35 6
|
7天前
|
存储 JavaScript 前端开发
Python Django下的实现注册验证码
摘要: 使用Python生成随机验证码图像,包括干扰线和噪点,保存到静态文件夹,并将验证码文本存储到数据库。数据库表包含ID、验证码图片路径和验证码文本。JavaScript函数`getRandomInt`生成1到300的随机数,用于请求对应数据库条目的验证码和图片。XMLHttpRequest发送POST请求到服务器,视图函数返回指定ID的验证码图片路径,实现验证码的动态刷新。
|
10天前
|
小程序 前端开发 JavaScript
计算机Python项目|django傣族节日及民间故事推广小程序
计算机Python项目|django傣族节日及民间故事推广小程序
|
10天前
|
JSON API 数据格式
如何用 Python 的 requests 库发送 JSON 数据的 POST 请求
使用 requests 库发送 JSON 数据的 POST 请求是一个非常简单且实用的操作。通过将目标 URL 和 JSON 数据传递给 requests.post 方法,你可以轻松发送请求并处理响应。本篇文章介绍了从安装 requests 库,到发送 JSON 数据的 POST 请求,再到处理响应的整个流程。希望这篇文章能帮助你更好地理解并应用这个强大的 HTTP 请求库。
|
11天前
|
Python
python做http请求
python做http请求
14 1
|
7天前
|
前端开发 数据库 Python
Python Django项目下的分页和筛选查询
在Django中实现分页功能,视图函数通过`Paginator`处理数据,每页显示10条记录。URL配置支持带参数和不带参数的分页请求。前端模板使用for循环展示分页数据,包括商品信息和状态按钮,并利用分页组件导航。筛选查询视图根据GET请求的`state`参数过滤上架或下架产品,同样实现分页功能。前端添加状态选择下拉框,分页链接携带查询参数`state`确保筛选状态在翻页时保持。
|
JavaScript 测试技术 Go
用 Python 实现每秒百万级请求
本文讲的是用 Python 实现每秒百万级请求,Python 社区近来针对性能做了很多优化。CPython 3.6 新的字典实现方式提升了解释器的总体性能。得益于更快的调用约定和字典查询缓存,CPython 3.7 会更快。
2555 0
|
1天前
|
机器学习/深度学习 人工智能 前端开发
Python中的模块化编程
【6月更文挑战第17天】Python模块化编程与软件架构设计的关键在于拆分任务到独立模块,提高代码的可维护性、可重用性和可扩展性。例如,学生管理系统可分解为录入、查询和删除模块。MVC和MVVM架构模式有助于组织代码,而微服务和函数式编程将在未来发展中扮演重要角色。通过示例代码,读者能学习如何实现这些概念,提升项目开发效率和质量。
147 57