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字符串详细介绍
May 09 Python
Python 类的继承实例详解
Mar 25 Python
django模板语法学习之include示例详解
Dec 17 Python
使用Python通过win32 COM实现Word文档的写入与保存方法
May 08 Python
keras模型可视化,层可视化及kernel可视化实例
Jan 24 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
Mar 02 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
python安装和pycharm环境搭建设置方法
May 27 Python
Python 忽略文件名编码的方法
Aug 01 Python
Python‘==‘ 及 ‘is‘相关原理解析
Sep 05 Python
pandas 按日期范围筛选数据的实现
Feb 20 Python
Python3接口性能测试实例代码
Jun 20 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
给php新手谈谈我的学习心得
2007/02/25 PHP
深入PHP nl2br()格式化输出的详解
2013/06/05 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
PHP加密技术的简单实现
2016/09/04 PHP
php封装的mongodb操作类代码
2017/08/06 PHP
JQuery 将元素显示在屏幕的中央的代码
2010/02/27 Javascript
通过一段代码简单说js中的this的使用
2013/07/23 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
你有必要知道的25个JavaScript面试题
2015/12/29 Javascript
JS 实现倒计时数字时钟效果【附实例代码】
2016/03/30 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
JS中常用的消息框总结
2018/02/24 Javascript
详解redis在nodejs中的应用
2018/05/02 NodeJs
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
微信小程序实现九宫格抽奖
2020/04/15 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
JS实现点星星消除小游戏
2020/03/24 Javascript
[36:17]DOTA2上海特级锦标赛 - VGL音乐会全集
2016/03/06 DOTA
python 多进程通信模块的简单实现
2014/02/20 Python
Python 字典(Dictionary)操作详解
2014/03/11 Python
python字典get()方法用法分析
2015/04/17 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
python制作小说爬虫实录
2017/08/14 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
CSS3实现菜单悬停效果
2020/11/17 HTML / CSS
递归实现回文判断(如:abcdedbca就是回文,判断一个面试者对递归理解的简单程序)
2013/04/28 面试题
生产车间实习自我鉴定
2013/09/23 职场文书
护理专业本科生自荐信
2013/10/01 职场文书
自我推荐信格式模板
2015/03/24 职场文书
小鞋子观后感
2015/06/05 职场文书
小学校本教研总结
2015/08/13 职场文书
2016年“12.3”国际残疾人日活动总结
2016/04/01 职场文书
制作能在nginx和IIS中使用的ssl证书
2021/06/21 Servers
Java Spring Boot 正确读取配置文件中的属性的值
2022/04/20 Java/Android