博客
关于我
Django中HttpRequest和HttpResponse
阅读量:171 次
发布时间:2019-02-28

本文共 2013 字,大约阅读时间需要 6 分钟。

Django 请求和响应对象详解

在Django开发中,请求和响应对象是管理应用程序状态和交互的核心工具。通过这些对象,Django能够有效地传递应用程序运行所需的各种信息。

1. HttpRequest 对象

属性概述

HttpRequest 对象是Django接收客户端请求时所创建的对象,主要包含以下属性:

  • path_info:返回用户访问的URL路径,不包含域名。例如:/music/bands/the_beatles/
  • method:表示请求使用的HTTP方法,必须全大写。例如:GETPOST
  • GET:包含所有HTTP GET参数的字典对象。例如:request.GET['name'] 可以获取GET请求中的查询参数。
  • POST:包含所有HTTP POST参数的字典对象。需要注意的是,POST方法可以传递文件,因此文件信息将包含在FILES属性中。
  • body:请求体,字节类型。POST请求中的数据可以从body中提取。
  • cookies:一个字典,包含所有客户端发送的cookie信息。
  • files:一个字典,包含所有上传文件的信息。只有在请求方法为POST且表单使用enctype="multipart/form-data"时才会包含文件数据。
  • meta:一个字典,包含所有HTTP首部信息。例如,HTTP_HOSTHTTP_REFERER 等。
  • user:表示当前登录的用户。如果用户未登录,则为AnonymousUser实例。
  • session:表示当前会话的字典对象。只有在启用Django会话功能时才可用。

常用方法

  • get_host():返回请求的原始主机地址。例如:"127.0.0.1:8000"
  • get_full_path():返回请求路径,包括查询字符串。例如:"/music/bands/the_beatles/?print=true"
  • get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None):用于获取签名过的cookie。支持设置默认值和时间戳校验。

文件上传示例

def upload(request):    if request.method == "POST":        filename = request.FILES["file"].name        with open(filename, "wb") as f:            for chunk in request.FILES["file"].chunks():                f.write(chunk)        return HttpResponse("上传OK")

2. HttpResponse 对象

属性使用

  • 字符串响应

    from django.http import HttpResponseresponse = HttpResponse("Here's the text of the Web page.")response = HttpResponse("Text only, please.", content_type="text/plain")
  • 设置响应头

    response = HttpResponse()response['Content-Type'] = 'text/html; charset=UTF-8'del response['Content-Type']
  • 响应属性

    • content:响应内容
    • charset:响应内容编码
    • status_code:响应状态码

JsonResponse 对象

JsonResponseHttpResponse 的子类,专门用于生成JSON格式的响应。

from django.http import JsonResponseresponse = JsonResponse({'foo': 'bar'})print(response.content)  # 输出:b'{"foo": "bar"}'

支持非字典数据类型:

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

注意事项

  • 在处理表单数据时,request.POSTrequest.FILES 是主要的数据来源。
  • 对于多选框、下拉框等多值输入,需要使用 request.POST.getlist() 方法获取列表数据。
  • request.user 可以区分登录用户和匿名用户。匿名用户的属性包括:idNoneusername 为空字符串等。

通过合理使用 HttpRequestHttpResponse 对象,开发者可以充分利用Django框架来管理应用程序的状态和用户交互,实现高效的Web开发。

转载地址:http://dnnj.baihongyu.com/

你可能感兴趣的文章
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>