Django之提交表单与前后端交互的方法


Posted in Python onJuly 19, 2019

Django之META与前后端交互

1 提交表单之GET

前端提交数据与发送
1)提交表单数据
2)提交JSON数据
后端的数据接收与响应
1)接收GET请求数据
2)接收POST请求数据
3)响应请求

GET 请求过程
前端通过ajax发起GET请求,json格式数据
var data = { 
  "name": "test", 
  "age": 1 
}; 
$.ajax({ 
  type: 'GET', 
  url: /your/url/, 
  data: data, # 最终会被转化为查询字符串跟在url后面: /your/url/?name=test&age=1 
  dataType: 'json', # 注意:这里是指服务端返回json格式的数据 
  success: function(data) { # 这里的data就是json格式的数据 
  }, 
  error: function(xhr, type) { 
  } 
}); 
后端接受GET请求数据
name = request.GET.get('name', '') 
age = int(request.GET.get('age', '0'))

2 提交表单之POST

方式一:

前端发送POST请求:
var data = {} 
# 如果页面并没有表单,只是input框,请求也只是发送这些值,那么可以直接获取放到data中 
data['name'] = $('#name').val()  
# 如果页面有表单,那么可以利用jquery的serialize()方法获取表单的全部数据 
data = $('#form1').serialize();  
$.ajax({ 
  type: 'POST', 
  url: /your/url/, 
  data: data, #request Header中默认是Content-Type:application/x-www-form-urlencoded
  dataType: 'json', # 注意:期望服务器返回的数据类型 
  success: function(data) { # 这里的data就是json格式的数据 
  }, 
  error: function(xhr, type) { 
  } 
});
注: ajax中没有指明content-type类型,请求头中默认是Content-Type:application/x-www-form-urlencoded,因此参数会编码为 name=xx&age=1 提交到后端,后端作为表单数据处理

后端接受请求表单数据:
name = request.POST.get('name', '') 
age = int(request.POST.get('age', '0')) 


方式二:

前端通过POST提交JSON数据
# POST一个json数据  
var data = { 
  “name”: "test", 
  "age", 1 
} 
$.ajax({ 
  type: 'POST', 
  url: /your/url/, 
  data: JSON.stringify(data), # json对象转化为字符串 
  #request Header注明content-type:'application/json; charset=UTF-8'
  contentType: 'application/json; charset=UTF-8', 
  dataType: 'json', # 注意:期望服务端返回json格式的数据 
  success: function(data) { # 这里的data就是json格式的数据 
  }, 
  error: function(xhr, type) { 
  } 
}); 
注: 如果要给后端传递json数据,就需要增加content-type参数,告诉后端,传递过来的数据格式,并
且需要将data转为字符串进行传递。实际上,服务端接收到后,发现是json格式,做的操作就是将字符串转为json对象。
另外,不转为字符串,即使加了content-type的参数,也默认会转成name=xx&age=1,使后端无法获取正确的json。

后端接受数据:
data = request.get_json()
另外,如果前端提交的数据格式不能被识别,可以用request.get_data()接收数据。

3 request.META组成

request.META是python中一个字典,包含了本次所有HTTP请求的Header信息,比如ip,浏览器
  Agent。注意Header信息的完整列表取决于用户所发送的Header信息与服务端设置的header信息,常见的键值对有:
(1) HTTP_USER_AGENT,用户浏览器的user-agent字符串,例如: "Mozilla/5.0 (X11; U; Linux i686; fr-FR; rv:1.8.1.17) Gecko/20080829 Firefox/2.0.0.17" .
(2) REMOTE_ADDR客户端ip,如"12.345.67.89" ,如果申请是经过代理服务器的话,那么它可能是
以逗号分割的多个IP地址,如:"12.345.67.89,23.456.78.90")

  request.META是python一个普通字典,当键不存在时,访问会触发一个KeyError异常。一般采用
  try/execpt语句或者用python中get()方法来处理,设置默认返回,友好的响应客户端。

4 request.META调用设计

(1)要获取用户浏览器信息,写法通常可以:
def ua_display(request):
  info = request.META.get('HTTP_USER_AGENT', 'unknown')
  return HttpResponse("Your browser is %s" % info)

 (2) 采用try/execpt语句防止阻塞程序
def ua_display_2(request):
  try:
    info = request.META['HTTP_USER_AGENT']
  except KeyError:
    info = 'unknown'
  return HttpResponse("Your browser is %s" % info)

(3) 想要看META中具体有哪些数据,采用python字典获取键值items方法
values = request.META.items()
info = []
for k,v in values:
  info.append('<tr><td>%s</td><td>%s</td></tr>' % (k, v))

(4) 
      CONTENT_LENGTH  文本长度
      CONTENT_TYPE  数据类型
      HTTP_ACCEPT_ENCODING  编码
      HTTP_ACCEPT_LANGUAGE  语言
      HTTP_REFERER  引用页,如果有的话
      HTTP_USER_AGENT 客户机用户代理字符串
      QUERY_STRING 查询字符串,单一的未解析的字符串
      REMOTE_ADDR  客户机IP地址
      REMOTE_HOST  客户机hostname
      REQUEST_METHOD 请求方式,比如 GET 或 POST
      SERVER_NAME 服务器 hostname
      SERVER_PORT 服务器端口

信息如下:
ALLUSERSPROFILE C:\ProgramData
COMMONPROGRAMFILES C:\Program Files\Common Files
COMSPEC C:\windows\system32\cmd.exe
CONFIGSETROOT  C:\windows\ConfigSetRoot
CONTENT_LENGTH 
CONTENT_TYPE  text/plain
CSRF_COOKIE 8dLJLZyBH801ba24VdzYqJ81b5nqTxh0
DJANGO_SETTINGS_MODULE PythonProject.settings
FP_NO_HOST_CHECK  NO
GATEWAY_INTERFACE  CGI/1.1
HOMEDRIVE  C:
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING  gzip,deflate,sdch
HTTP_ACCEPT_LANGUAGE  zh-CN,zh;q=0.8
HTTP_CONNECTION keep-alive
HTTP_COOKIE csrftoken=8dLJLZyBH801ba24VdzYqJ81b5nqTxh0; sessionid=1rf6hmdw7k0zzsg8q3q1lw2j75gmoood
HTTP_HOST  127.0.0.1:8000
HTTP_USER_AGENT Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
NUMBER_OF_PROCESSORS  4
OS Windows_NT
PATH  E:\Python;E:\Python\Scripts;C:\windows\system32;E:\Python
PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
PATH_INFO  /display_meta/
PROCESSOR_ARCHITECTURE AMD64
PROCESSOR_IDENTIFIER  Intel64 Family 6 Model 42 Stepping 7, GenuineIntel
PROCESSOR_LEVEL 6
PROCESSOR_REVISION 2a07
PROMPT $P$G
PSMODULEPATH  C:\windows\system32\WindowsPowerShell\v1.0\Modules\
PUBLIC C:\Users\Public
QUERY_STRING  
REMOTE_ADDR 127.0.0.1
REMOTE_HOST
REQUEST_METHOD GET
RUN_MAIN  true
SERVER_PROTOCOL HTTP/1.1
SERVER_SOFTWARE WSGIServer/0.1 Python/2.7.5
SESSIONNAME Console
SHIM_MCCOMPAT  0x810000001
WINDOWS_TRACING_FLAGS  3
WINDOWS_TRACING_LOGFILE C:\BVTBin\Tests\installpackage\csilogfile.log
wsgi.errors ', mode 'w' at 0x00000000025C6150>
wsgi.file_wrapper  wsgiref.util.FileWrapper
wsgi.input 
wsgi.multiprocess  False
wsgi.multithread  True
wsgi.run_once  False
wsgi.url_scheme http
wsgi.version  (1, 0)

以上这篇Django之提交表单与前后端交互的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python和Perl绘制中国北京跑步地图的方法
Mar 03 Python
Python Flask-web表单使用详解
Nov 18 Python
numpy.linspace 生成等差数组的方法
Jul 02 Python
对python3新增的byte类型详解
Dec 04 Python
使用python将图片按标签分入不同文件夹的方法
Dec 08 Python
python用opencv批量截取图像指定区域的方法
Jan 24 Python
基于腾讯云服务器部署微信小程序后台服务(Python+Django)
May 08 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
python实现爬虫抓取小说功能示例【抓取金庸小说】
Aug 09 Python
运行tensorflow python程序,限制对GPU和CPU的占用操作
Feb 06 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
Python+Selenium实现自动化的环境搭建的步骤(图文)
Sep 01 Python
解决Python3 抓取微信账单信息问题
Jul 19 #Python
Django 数据库同步操作技巧详解
Jul 19 #Python
浅谈Python中函数的定义及其调用方法
Jul 19 #Python
python 处理微信对账单数据的实例代码
Jul 19 #Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 #Python
python障碍式期权定价公式
Jul 19 #Python
python+numpy实现的基本矩阵操作示例
Jul 19 #Python
You might like
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
Discuz批量替换帖子内容的方法(使用SQL更新数据库)
2014/06/23 PHP
PHP对象相互引用的内存溢出实例分析
2014/08/28 PHP
php实现的验证码文件类实例
2015/06/18 PHP
浅谈PHP封装CURL
2019/03/06 PHP
jquery formValidator插件ajax验证 内容不做任何修改再离开提示错误的bug解决方法
2013/01/04 Javascript
利用JQuery动画制作滑动菜单项效果实现步骤及代码
2013/02/07 Javascript
js使用split函数按照多个字符对字符串进行分割的方法
2015/03/20 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
微信小程序 自定义对话框实例详解
2017/01/20 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
JavaScript闭包_动力节点Java学院整理
2017/06/27 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
javascript实现前端成语点击验证
2020/06/24 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
Flask入门教程实例:搭建一个静态博客
2015/03/27 Python
Python实现字典的key和values的交换
2015/08/04 Python
Python实现字符串匹配算法代码示例
2017/12/05 Python
儿童python练习实例
2018/05/27 Python
python 实现语音聊天机器人的示例代码
2018/12/02 Python
pandas删除指定行详解
2019/04/04 Python
python中open函数的基本用法示例
2019/09/07 Python
html5视频媒体标签video的使用方法及完整参数说明详解
2019/09/27 HTML / CSS
英国一家专门出售品牌鞋子的网站:Allsole
2016/08/07 全球购物
Yves Rocher伊夫·黎雪美国官网:法国始创植物美肌1959
2019/01/09 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
市场营销专业个人自荐信格式
2013/09/21 职场文书
外语系毕业生找工作的求职信
2013/11/28 职场文书
办加油卡单位介绍信
2014/01/09 职场文书
资源工程专业毕业生求职信
2014/02/27 职场文书
大学军训感言300字
2014/03/09 职场文书
儿童生日会策划方案
2014/05/15 职场文书
法制主题班会教案
2015/08/13 职场文书
python之django路由和视图案例教程
2021/07/26 Python
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript