专栏首页深度学习之tensorflow实战篇python3 django整理(九) django 接收参数,以json彼此传递post与get

python3 django整理(九) django 接收参数,以json彼此传递post与get

首先我们来说一说,post与get的区别 POST和GET差异:

  1. POST和GET是HTTP协议定义的与服务器交互的方法。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。另外,还有PUT和DELETE方法。
  2. POST和GET都可以与服务器完成查,改,增,删操作。
  3. GET提交,请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接; POST提交,把提交的数据放置在HTTP包的包体中;因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。

HTTP没有要求,如果Method是POST数据就要放在BODY中。也没有要求,如果Method是GET,数据(参数)就一定要放在URL中而不能放在BODY中。

HTTP协议对GET和POST都没有对长度的限制 HTTP协议明确地指出了,HTTP头和Body都没有长度的要求。而对于URL长度上的限制,有两方面的原因造成:

  1. 浏览器。据说早期的浏览器会对URL长度做限制。据说IE对URL长度会限制在2048个字符内(流传很广,而且无数同事都表示认同)。但我自己试了一下,我构造了90K的URL通过IE9访问live.com,是正常的。网上的东西,哪怕是Wikipedia上的,也不能信。
  2. 服务器。URL长了,对服务器处理也是一种负担。原本一个会话就没有多少数据,现在如果有人恶意地构造几个几M大小的URL,并不停地访问你的服务器。服务器的最大并发数显然会下降。另一种攻击方式是,把告诉服务器Content-Length是一个很大的数,然后只给服务器发一点儿数据,嘿嘿,服务器你就傻等着去吧。哪怕你有超时设置,这种故意的次次访问超时也能让服务器吃不了兜着走。有鉴于此,多数服务器出于安全啦、稳定啦方面的考虑,会给URL长度加限制。但是这个限制是针对所有HTTP请求的,与GET、POST没有关系。

首先在view中定义一个post请求, django 2.0.5 Python 3.6.5

views中的请求函数

def apis(request):
     print("hello input")
     # p={"word":"data"}
     #查看客户端发来的请求,前端的数据
     print("request.body={}".format(request.body))
     #返回给客户端的数据
     result="success"
     if request.method=="POST":
         print(request.POST)

     return JsonResponse({"status": 200, "msg": "OK","data": result})

由于是post的请求,所以其请求体在request.body中,即客户端发过来的请求,即前端发过来的参数。一般都会对参数进行处理,之后返回result再次传输给前端,这里我没有进行处理,直接返回给以一个result.

之后配置url

最后新建一个client(客户端)来测试接口是否成功。这里是使用django 自带的tests.py 写了一个函数。

from django.test import TestCase

# Create your tests here.
import requests,json
def dodo():
    req={34:1}
    url='http://127.0.0.1:8000/apis'
    #params 为发送给服务器的请求
    params = {
          "name":"前端输入参数"
        }
    #请求头,是浏览器正常的就行
    headers = {"User-agent":"none/ofyourbusiness","Spam":"Eggs"}
    #发送请求,返回新数据
    data = requests.post(url,data=params,headers=headers)

    print(data)
    print(data.text)
dodo()

运行结果如上,表示成功。 我是做算法的,可能对于后端来说这个很简单,但是对于我这个算法来说弄了小半天。终于解决了,记录一下。

以下为参考的用django实现的获取用户输入方法示例。

URLS 配置 #urls.py from django.conf.urls.defaults import * from mysite.views import search , result # Uncomment the next two lines to enable the admin: # from django.contrib import admin # admin.autodiscover()

urlpatterns = patterns('',
    # Example:
    # (r'^mysite/', include('mysite.foo.urls')),
 
    # Uncomment the admin/doc line below to enable admin documentation:
    # (r'^admin/doc/', include('django.contrib.admindocs.urls')),
 
    # Uncomment the next line to enable the admin:
    (r'^$', search),
    (r'^search/$', result)
)

VIEW.py配置

    #views.py
    #-*- coding: UTF-8 -*-
    from django.shortcuts import render_to_response
     
    def search(request):
        return render_to_response('search.html')
    def result(request):
        key = request.GET['q']
        if not key :
            message = u'请输入搜索内容'
            return render_to_response('result.html',{'message':message})
        else :
            message = u'你输入的是' + key
            return render_to_response('result.html',{'message':message})
     
     
    <html><!--search.html-->
    <head>
        <title>Search</title>
    </head>
    <body>
        <form action="/search/" method="get">
            <input type="text" name="q">
            <input type="submit" value="Search">
        </form>
    </body>
    </html>
     
    <html><!--result.html-->
    <head>
        <title>Search</title>
    </head>
    <body>
            {{message}}
    </body>
    </html>

参考前台通过form表单向Django后台传输数据,Django处理后返回给前台

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • R语言读CSV、txt文件方式以及read.table read.csv 和readr(大数据读取包)

    首先准备测试数据*(mtcars) 分别为CSV. TXT read.table 默认形式读取CSV(×)与TXT(效果理想) ? ① > t...

    学到老
  • R语言读CSV、txt文件方式以及read.table read.csv 和readr(大数据读取包)

    mpg" "cyl" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb 1 Mazda RX4...

    学到老
  • python django整理(三)页面基础(仿BBS)

    首先根据已有网站(http://dig.chouti.com/)信息进行创建数据库并创建表 #_*_ coding:utf-8 _*_ from django....

    学到老
  • 爬虫系列(3)初窥urllib库。

    其实就是根据URL来获取它的网页信息,虽然我们在浏览器中看到的是一幅幅优美的画面,但是其实是由浏览器解释才呈现出来的,实质它是一段HTML代码,加 JS、CSS...

    小Gy
  • 速读原著-TCP/IP(TCP 服务器的设计)

    我们在1 . 8节说过大多数的T C P服务器进程是并发的。当一个新的连接请求到达服务器时,服务器接受这个请求,并调用一个新进程来处理这个新的客户请求。不同的操...

    cwl_java
  • Http协议原理解析第一篇

    悟空聊架构
  • 无法向会话状态服务器发出会话状态请求

    无法向会话状态服务器发出会话状态请求。请确保 ASP.NET State Service (ASP.NET 状态服务)已启动,并且客户端端口与服务器端口相同。如...

    纯粹是糖
  • ATTR节点应用

    应用层与内核驱动层的交互,一般是通过驱动节点的读写来实现。即驱动开发人员在完成驱动设备的创建后,同时会创建对应的节点,且提供节点的访问函数,以便应用层开发调用。...

    开源519
  • Http协议原理解析第一篇

    OSI模型把网络通信分成七层:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,对于开发网络应用人员来说,一般把网络分成五层,这样比较容易理解。这五层...

    悟空聊架构
  • 高并发网站/服务常规应对方案和思路

    作为后端的程序开发人员,经常听到高并发,但是高并发到底有多高?其实是没有数值定义的

    KenTalk

扫码关注云+社区

领取腾讯云代金券