python-django后台获取前端数据进行操作以及响应的方式
一.获取数据–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后台获取前端数据进行操作以及响应的方式相关推荐
- 微信小程序——从后台获取数据库数据并在前台显示(前端+后端+数据库)
因为人工测试的时候需要统计数据都在纸上,统计起来很麻烦.所以我想做个小程序来辅助我测试,但我之前没学过小程序,所以就一点一点搞吧.今天这篇主要讲从后台获取数据库数据并在前台显示(类似背单词小程序的点击 ...
- 从后台获取的数据渲染到页面中的dom操作
很多情况下页面dom都是从后台拼接字符串添加生成的新的dom元素,在编辑器中不能看到,只能通过检查看到页面的dom结构,但是这时候会发生一个问题,就是如果使用jQuery无法进行dom操作,事件和方法 ...
- Django中model新建数据表操作后admin页面不更新问题
Django中model新建数据表操作后admin页面不更新问题 这种情况一般是没有在admin.py文件中进行模型的注册所导致的,打开应用文件夹下的admin.py,然后添加代码: from .mo ...
- python 获取金融数据_class类在python中如何获取金融数据
class类在python中如何获取金融数据 发布时间:2020-12-11 11:12:06 来源:亿速云 阅读:101 作者:小新 这篇文章主要介绍了class类在python中如何获取金融数据, ...
- vue从后台获取新数据后刷新_vue项目中实现定时刷新页面(重新渲染数据实时更新)...
需求: 每隔一分钟自动刷新一下当前页面,同时发送请求,重新渲染数据,以到达实时更新. 开始: js有两种定时器 setInterval(function(){}, milliseconds)--会不停 ...
- 用python做生物信息数据分析_基于Python的自动获取生物信息数据的软件设计
基于 Python 的自动获取生物信息数据的软件设计 * 周斯涵,刘月兰 ** [摘 要] [摘 要] 从国际生物信息学数据库中采集数据来进行相关领域的分析, 但随着数据库规模不断扩大 , 数据来源种 ...
- 利用jquery写的从后台获取json数据以表格显示,并带翻页功能.里面包含模式窗口等功能...
利用jquery写的从后台获取json数据,以表格显示,并带翻页功能 里面包含模式窗口等功能 大家看例子就懂了 下面是效果图: http://www.jm47.com/project/3001.asp ...
- 从钉钉后台获取考勤数据(其他数据获取类似)
从钉钉后台获取考勤数据等 下载钉钉的SDK包 从开发者后台获取AppKey和AppSecret 上代码: # -*- coding: utf-8 -*- import requests, loggin ...
- 雅虎财经数据python 网络爬虫stock股票 用 Python 通过雅虎财经获取股票数据
yfinance Python Tutorial (2022) - Analyzing Alpha https://www.youtube.com/watch?v=SxIwqdedomg 讲的很详 ...
最新文章
- 【 SIMULATION 】RMSE Comparison of Linear Approaches for TOA - Based Positioning
- Atitit 提升效率 界面gui方面的前后端分离与cbb体系建设 规范与推荐标准
- 在python的dataframe中进行类似于mysql的join操作(持续更新)
- 简单的机器学习程序_人体动作识别小程序【机器学习 人工智能】
- wdinow 下 使用 docker 安装 code-server (web 版 vscode)
- LabelSmooth
- java key锁_Java细粒度锁实现的3种方式
- axios直传阿里云,获取上传进度已以及取消上传
- hp linux还原系统还原,酷越一键备份还原(惠普电脑系统还原)精简美化版...
- Task01:熟悉新闻推荐系统的基本流程(数据库设计)
- 电脑桌面运维工程师考证
- 7-5 走楼梯升级版(PTA程序设计)
- Python数据处理(三)——美国西雅图自行车流量可视化
- 7-2 sdust-Java-学生成绩读取与排序 (20 分)
- 管理薪酬 穆穆-movno1
- Clipper库 | 类型和填充规则
- Augmented Dickey–Fuller (ADF)Test 详解
- 安装Microsoft.UI.Xaml.2.6(WSA安卓子系统安装缺失)
- 降低电商快递运输成本的6种策略
- 95%的短视频公司可能都要倒闭破产
热门文章
- 最详细的java调用含参数的python程序并且返回值
- Cesium教程 (1) 界面介绍-3dtiles加载-更改鼠标操作设置
- snmp 获得硬件信息_网络管理员之软硬件安装
- python输出语句print i、j、k_Python的打印使用,python,之,print,用法
- 备忘录保存为长图的方法
- 数据结构—冒泡排序 C语言代码实现(从前向后/从后向前两种)
- 阻塞状态和等待状态的区别
- 【数据库和SQL学习笔记】1.SQL语言的功能和特点,数据定义语言和应用,主键和外键
- HJ95.人民币转换
- 强化学习笔记二 -- MDP