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 3.x 连接数据库示例(pymysql 方式)
Jan 19 Python
Python变量和字符串详解
Apr 29 Python
python flask 多对多表查询功能
Jun 25 Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 Python
python实现百度语音识别api
Apr 10 Python
PyQt5每天必学之滑块控件QSlider
Apr 20 Python
对Python 3.5拼接列表的新语法详解
Nov 08 Python
使用Django搭建web服务器的例子(最最正确的方式)
Aug 29 Python
Python中zip()函数的简单用法举例
Sep 02 Python
python mysql 字段与关键字冲突的解决方式
Mar 02 Python
Python run()函数和start()函数的比较和差别介绍
May 03 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 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合并两个数组的两种方式的异同
2012/09/14 PHP
PHP实现的多彩标签效果代码分享
2014/08/21 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
php版微信公众平台入门教程之开发者认证的方法
2016/09/26 PHP
PHP内存缓存功能memcached示例
2016/10/19 PHP
实例讲解PHP表单处理
2019/02/15 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
jquery 上下滚动广告
2009/06/17 Javascript
跟着JQuery API学Jquery 之三 筛选
2010/04/09 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
Javascript基础教程之for循环
2015/01/18 Javascript
js性能优化技巧
2015/11/29 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
JavaScript中Promise的使用详解
2017/02/26 Javascript
jQuery实现的form转json经典示例
2017/10/10 jQuery
Vue 使用formData方式向后台发送数据的实现
2019/04/14 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
Vue 实现创建全局组件,并且使用Vue.use() 载入方式
2020/08/11 Javascript
python 正则表达式 概述及常用字符
2009/05/04 Python
python检测lvs real server状态
2014/01/22 Python
Python中optparse模块使用浅析
2015/01/01 Python
用Python进行基础的函数式编程的教程
2015/03/31 Python
Python编程中time模块的一些关键用法解析
2016/01/19 Python
Python元组知识点总结
2019/02/18 Python
Python pandas DataFrame操作的实现代码
2019/06/21 Python
Django ORM 常用字段与不常用字段汇总
2019/08/09 Python
python中bytes和str类型的区别
2019/10/21 Python
python实现简单猜单词游戏
2020/12/24 Python
canvas 实现 github404动态效果的示例代码
2017/11/15 HTML / CSS
90后毕业生的求职信范文
2013/09/21 职场文书
建材业务员岗位职责
2013/12/08 职场文书
最新的咖啡店创业计划书
2013/12/30 职场文书
档案室主任岗位职责
2014/02/12 职场文书
《月球之谜》教学反思
2014/04/10 职场文书
小学生爱国演讲稿
2014/04/25 职场文书
教师师德师风整改措施
2014/10/24 职场文书