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的类实例属性访问规则探讨
Jan 30 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
Python编程使用NLTK进行自然语言处理详解
Nov 16 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
Python中logging实例讲解
Jan 17 Python
Python字典的基本用法实例分析【创建、增加、获取、修改、删除】
Mar 05 Python
关于python多重赋值的小问题
Apr 17 Python
pycharm配置当鼠标悬停时快速提示方法参数
Jul 31 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
Windows系统下pycharm中的pip换源
Feb 23 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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 生成唯一id的几种解决方法
2013/03/08 PHP
基于PHP CURL用法的深入分析
2013/06/09 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
prototype class详解
2006/09/07 Javascript
优秀js开源框架-jQuery使用手册(1)
2007/03/10 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
jquery配合css简单实现返回顶部效果
2013/09/30 Javascript
JS关闭窗口或JS关闭页面的几种代码分享
2013/10/25 Javascript
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
基于JavaScript操作DOM常用的API小结
2015/12/01 Javascript
使用 stylelint检查CSS_StyleLint
2016/04/28 Javascript
JavaScript必知必会(三) String .的方法来自何方
2016/06/08 Javascript
js完整倒计时代码分享
2016/09/18 Javascript
AngularJS ng-repeat指令中使用track by子语句解决重复数据遍历错误问题
2017/01/21 Javascript
Vue之Watcher源码解析(1)
2017/07/19 Javascript
Angular2学习笔记之数据绑定的示例代码
2018/01/03 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
layer.js之回调销毁对话框的例子
2019/09/11 Javascript
Python实现微信公众平台自定义菜单实例
2015/03/20 Python
python如何使用jt400.jar包代码实例
2019/12/20 Python
jupyter notebook实现显示行号
2020/04/13 Python
Tensorflow中批量读取数据的案列分析及TFRecord文件的打包与读取
2020/06/30 Python
纪伊国屋新加坡网上书店:Kinokuniya新加坡
2017/12/29 全球购物
俄罗斯运动鞋商店:Sneakerhead
2018/05/10 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
Myprotein西班牙官网:欧洲第一大运动营养品牌
2020/02/24 全球购物
函授大专自我鉴定
2013/11/01 职场文书
大学生学业生涯规划
2014/01/05 职场文书
关于学习的演讲稿
2014/05/10 职场文书
大学生应聘导游自荐信
2014/06/02 职场文书
法人委托书范本
2014/09/15 职场文书
党员干部群众路线个人整改措施
2014/09/18 职场文书
国际贸易本科毕业生求职信
2014/09/26 职场文书
财务总监岗位职责范本
2015/04/03 职场文书
与Windows10相比Windows11有哪些改进?值不值得升级?
2021/11/21 数码科技
Kubernetes中Deployment的升级与回滚
2022/04/01 Servers