【Django】python后端的POST与GET请求

简介POST与GET

超文本协议中总共四种数据交互方式:PUT、DELETE、POST、GET
对应数据处理的增、删、改、查
PUT、DELETE两种方式此处不做介绍
主要说下POST与GET,也就是改、查

协议中的区别

  1. http报文中标签不一致,一个是POST,一个是GET
  2. GET是直接将整个报文发出(这里不考虑MSS MTU这些因素),POST是先发header,再发body,发不发body也说两说,得看发完头对面回复什么

使用中的区别

如上述所言,POST与GET一个主要用于修改数据的场景,一个主要用于查询的场景。那么在功能以及权限上是有区分的,这里的区分将作用域实际Django代码中

开始整理代码

先来GET接口

在视图代码中加入下面代码,准备处理GET请求,由于前面讲过简单的GET的模板,这里就不用模板了。

def search_get(request):
    request.encoding = 'utf-8'
    if 'q' in request.GET and request.GET['q']:
        message = '你搜索的内容为: ' + request.GET['q']
    else:
        message = '你提交了空表单'
    return HttpResponse(message)

将search_get接口加入后端访问路径

path('search-get/', search.search_get),

很简单就能看出,这里先判断GET请求中是否存在字段‘q’, 存在的话将字段q读出来让http返回。
看下效果
在这里插入图片描述

再来整理POST接口代码

以前说过GET的模板应用,这里说下POST的模板应用。
建立模板html代码

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>域中四大:天大,地大,道大,人亦大</title>
    </head>
    <body>
        <form action="/search-post/" method="post">
            {% csrf_token %}
            <input type="text" name="q">
            <input type="submit" value="搜索">
        </form>

        <p>{
   
   { last_input }}</p>
    </body>
</html>

再贴上处理POST请求的代码

def search_post(request):
    input_text ={
    
    }
    if request.POST:
        print(request)
        input_text['last_input'] = request.POST['q']
        print(request.POST)
    return render(request, "post_form.html", input_text)

之前说过,双大括号范围内的数据是用来留给render入参的。这里将POST的请求数据交给render的html入参。
还有个一指的注意东西:{% csrf_token %},这个是Django提供的防止伪装提交请求的功能。
在这里插入图片描述

访问本路径的请求参数

写了几天的代码了,每个处理请求接口的函数中都会有一个request入参,这个入参是什么?下面介绍:

HttpRequest

When a page is requested, Django creates an HttpRequest object that contains metadata about the request. Then Django loads the appropriate view, passing the HttpRequest as the first argument to the view function. Each view is responsible for returning an HttpResponse object.
大致翻译一下就是:
当一个页面被请求时,Django会创建一个包含请求元数据的HttpRequest对象。 然后Django加载相应的视图,将HttpRequest作为第一个参数传递给视图函数。 每个视图负责返回一个HttpResponse对象。

对了着重说下:所有属性值或者字段没有特殊说明,都是只读状态!
这个object中包含了哪些东西?

  1. scheme:确认是http还是https
  2. body
  3. path
  4. path_info:
  5. method:比如POST,比如GET
  6. encoding
  7. content_type
  8. content_params
  9. GET
  10. POST
  11. COOKIES
  12. FILES
  13. headers
  14. META
    14.1 CONTENT_LENGTH
    14.2 CONTENT_TYPE
    14.3 HTTP_ACCEPT
    14.4 HTTP_ACCEPT_ENCODING
    14.5 HTTP_ACCEPT_LANGUAGE
    14.6 HTTP_HOST
    14.7 HTTP_REFERER
    14.8 HTTP_USER_AGENT
    14.9 QUERY_STRING
    14.10 REMOTE_ADDR
    14.11 REMOTE_HOST
    14.12 REMOTE_USER
    14.13 REQUEST_METHOD
    14.14 SERVER_NAME
    14.15 SERVER_PORT

猜你喜欢

转载自blog.csdn.net/qq_34954047/article/details/124413661