一.获取数据–HttpRequest对象

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

  • 提取URL的特定部分,如/weather/beijing/2018,可以在服务器端的路由中用正则表达式截取;
  • 查询字符串(query string),形如key1=value1&key2=value2;
  • 请求体(body)中发送的数据,比如表单数据、json、xml;
  • 在http报文的头(header)中。

1. URL路径参数

如果想从URL中获取值http://127.0.0.1:8000/18/188/

应用中urls.py

from django.urls import path
from book.views import goods
urlpatterns = [path('<cat_id>/<goods_id>/',goods)
]

视图中函数: 参数的位置不能错

from django.http import JsonResponse
def goods(request,cat_id,goods_id):return JsonResponse({'cat_id':cat_id,'goods_id':goods_id})

2.Django中的QueryDict对象

HttpRequest对象的属性GET、POST都是QueryDict类型的对象

与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况

  • 方法get():根据键获取值

如果一个键同时拥有多个值将获取最后一个值

如果键不存在则返回None值,可以设置默认值进行后续处理

get('键',默认值)
  • 方法getlist():根据键获取值,值以列表返回,可以获取指定键的所有值

如果键不存在则返回空列表[],可以设置默认值进行后续处理

getlist('键',默认值)

3. 查询字符串Query String

获取请求路径中的查询字符串参数(形如?k1=v1&k2=v2),可以通过request.GET属性获取,返回QueryDict对象。

/get/?a=1&b=2&a=3
def get(request):a = request.GET.get('a')b = request.GET.get('b')alist = request.GET.getlist('a')print(a)  # 3print(b)  # 2print(alist)  # ['1', '3']return HttpResponse('OK')

注意:查询字符串不区分请求方式,即假使客户端进行POST方式的请求,依然可以通过request.GET获取请求中的查询字符串数据。

4. 请求体

请求体数据格式不固定,可以是表单类型字符串,可以是JSON字符串,可以是XML字符串,应区别对待。

可以发送请求体数据的请求方式有POST、PUT、PATCH、DELETE。

4.1 表单类型 Form Data

前端发送的表单类型的请求体数据,可以通过request.POST属性获取,返回QueryDict对象。

def post(request):a = request.POST.get('a')b = request.POST.get('b')alist = request.POST.getlist('a')print(a)print(b)print(alist)return HttpResponse('OK')

4.2 非表单类型 Non-Form Data

非表单类型的请求体数据,Django无法自动解析,可以通过request.body属性获取最原始的请求体数据,自己按照请求体格式(JSON、XML等)进行解析。request.body返回bytes类型。

例如要获取请求体中的如下JSON数据

{"a": 1, "b": 2}

可以进行如下方法操作:

import jsondef post_json(request):json_str = request.bodyjson_str = json_str.decode()  # python3.6 无需执行此步req_data = json.loads(json_str)print(req_data['a'])print(req_data['b'])return HttpResponse('OK')

5.验证path中路径参数

系统为我们提供了一些路由转换器位置在django.urls.converters.py

DEFAULT_CONVERTERS = {'int': IntConverter(), # 匹配正整数,包含0'path': PathConverter(), # 匹配任何非空字符串,包含了路径分隔符'slug': SlugConverter(), # 匹配字母、数字以及横杠、下划线组成的字符串'str': StringConverter(), # 匹配除了路径分隔符(/)之外的非空字符串,这是默认的形式'uuid': UUIDConverter(), # 匹配格式化的uuid,如 075194d3-6885-417e-a8a8-6c931e272f00
}

可以通过以下形式来验证数据的类型

 path('<int:cat_id>/<int:id>/',goods),

二.响应返回数据–HttpResponse对象

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

1. HttpResponse

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

HttpResponse(content=响应体, content_type=响应体数据类型, status=状态码)

也可通过HttpResponse对象属性来设置响应体、响应体数据类型、状态码:

content:表示返回的内容。
status_code:返回的HTTP响应状态码。

响应头可以直接将HttpResponse对象当做字典进行响应头键值对的设置:

response = HttpResponse()
response['django'] = 'Python'  # 自定义响应头Itcast, 值为Python

示例:

from django.http import HttpResponsedef response(request):return HttpResponse('python', status=400)

返回图片类型
图片二进制,图片: image/jpeg , image/gif, image/png

def response(request):return HttpResponse(image,content_type='image/jpeg')

2. HttpResponse子类

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

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

3. JsonResponse

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

帮助我们将数据转换为json字符串,设置响应头Content-Type为application/json

from django.http import JsonResponsedef response(request):return JsonResponse({'city': 'beijing', 'subject': 'python'})

4. redirect重定向

from django.shortcuts import redirectdef response(request):return redirect('/get_header')

python-django后台获取前端数据进行操作以及响应的方式相关推荐

  1. 微信小程序——从后台获取数据库数据并在前台显示(前端+后端+数据库)

    因为人工测试的时候需要统计数据都在纸上,统计起来很麻烦.所以我想做个小程序来辅助我测试,但我之前没学过小程序,所以就一点一点搞吧.今天这篇主要讲从后台获取数据库数据并在前台显示(类似背单词小程序的点击 ...

  2. 从后台获取的数据渲染到页面中的dom操作

    很多情况下页面dom都是从后台拼接字符串添加生成的新的dom元素,在编辑器中不能看到,只能通过检查看到页面的dom结构,但是这时候会发生一个问题,就是如果使用jQuery无法进行dom操作,事件和方法 ...

  3. Django中model新建数据表操作后admin页面不更新问题

    Django中model新建数据表操作后admin页面不更新问题 这种情况一般是没有在admin.py文件中进行模型的注册所导致的,打开应用文件夹下的admin.py,然后添加代码: from .mo ...

  4. python 获取金融数据_class类在python中如何获取金融数据

    class类在python中如何获取金融数据 发布时间:2020-12-11 11:12:06 来源:亿速云 阅读:101 作者:小新 这篇文章主要介绍了class类在python中如何获取金融数据, ...

  5. vue从后台获取新数据后刷新_vue项目中实现定时刷新页面(重新渲染数据实时更新)...

    需求: 每隔一分钟自动刷新一下当前页面,同时发送请求,重新渲染数据,以到达实时更新. 开始: js有两种定时器 setInterval(function(){}, milliseconds)--会不停 ...

  6. 用python做生物信息数据分析_基于Python的自动获取生物信息数据的软件设计

    基于 Python 的自动获取生物信息数据的软件设计 * 周斯涵,刘月兰 ** [摘 要] [摘 要] 从国际生物信息学数据库中采集数据来进行相关领域的分析, 但随着数据库规模不断扩大 , 数据来源种 ...

  7. 利用jquery写的从后台获取json数据以表格显示,并带翻页功能.里面包含模式窗口等功能...

    利用jquery写的从后台获取json数据,以表格显示,并带翻页功能 里面包含模式窗口等功能 大家看例子就懂了 下面是效果图: http://www.jm47.com/project/3001.asp ...

  8. 从钉钉后台获取考勤数据(其他数据获取类似)

    从钉钉后台获取考勤数据等 下载钉钉的SDK包 从开发者后台获取AppKey和AppSecret 上代码: # -*- coding: utf-8 -*- import requests, loggin ...

  9. 雅虎财经数据python 网络爬虫stock股票 用 Python 通过雅虎财经获取股票数据

    yfinance Python Tutorial (2022) - Analyzing Alpha https://www.youtube.com/watch?v=SxIwqdedomg   讲的很详 ...

最新文章

  1. 【 SIMULATION 】RMSE Comparison of Linear Approaches for TOA - Based Positioning
  2. Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准
  3. 在python的dataframe中进行类似于mysql的join操作(持续更新)
  4. 简单的机器学习程序_人体动作识别小程序【机器学习 人工智能】
  5. wdinow 下 使用 docker 安装  code-server (web 版 vscode)
  6. LabelSmooth
  7. java key锁_Java细粒度锁实现的3种方式
  8. axios直传阿里云,获取上传进度已以及取消上传
  9. hp linux还原系统还原,酷越一键备份还原(惠普电脑系统还原)精简美化版...
  10. Task01:熟悉新闻推荐系统的基本流程(数据库设计)
  11. 电脑桌面运维工程师考证
  12. 7-5 走楼梯升级版(PTA程序设计)
  13. Python数据处理(三)——美国西雅图自行车流量可视化
  14. 7-2 sdust-Java-学生成绩读取与排序 (20 分)
  15. 管理薪酬 穆穆-movno1
  16. Clipper库 | 类型和填充规则
  17. Augmented Dickey–Fuller (ADF)Test 详解
  18. 安装Microsoft.UI.Xaml.2.6(WSA安卓子系统安装缺失)
  19. 降低电商快递运输成本的6种策略
  20. 95%的短视频公司可能都要倒闭破产

热门文章

  1. 最详细的java调用含参数的python程序并且返回值
  2. Cesium教程 (1) 界面介绍-3dtiles加载-更改鼠标操作设置
  3. snmp 获得硬件信息_网络管理员之软硬件安装
  4. python输出语句print i、j、k_Python的打印使用,python,之,print,用法
  5. 备忘录保存为长图的方法
  6. 数据结构—冒泡排序 C语言代码实现(从前向后/从后向前两种)
  7. 阻塞状态和等待状态的区别
  8. 【数据库和SQL学习笔记】1.SQL语言的功能和特点,数据定义语言和应用,主键和外键
  9. HJ95.人民币转换
  10. 强化学习笔记二 -- MDP