Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象

文章目录

    • 1. GET方法提交表单
    • 2. POST方法提交表单
    • 3. Request 对象
      • 3.1 HttpRequest对象包含当前请求URL的一些信息
    • 4. QueryDict对象
      • 4.1 QueryDict 方法表

1. GET方法提交表单

Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第1张图片

根据上节的目录,在 myFirstDjango/创建 search.py并添加如下内容

#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
@author: JinWenChao
@file: search
@time: 2020/12/3 14:34
"""

from django.http import HttpResponse
from django.shortcuts import render


# 转发到 search_form.html 页面
def redirect_form(request):
    return render(request, 'search_form.html')


# 接收get请求的表单数据
def search_get(request):
    request.encoding = 'utf-8'
    if 'value' in request.GET and request.GET['value']:
        message = '你搜索的内容为: ' + request.GET['value']
    else:
        message = '你提交了空表单'
    return HttpResponse(message)

myFirstDjango/urls.py中添加如下内容

from django.urls import path
from django.conf.urls import url
from . import views, testdb, search

# 此项就是django的url配置
urlpatterns = [
    path('TmplUseTag', views.TmplUseTag),
    path('testdb', testdb.testdb),
    # 使用正则表达式的校验方式校验URL,映射到 search.redirect_form
    url(r'^redirect_form/$', search.redirect_form),
    url(r'^search_get/$', search.search_get),
]

templates文件下创建 search_form.html并添加如下内容


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>GET请求提交表单title>
head>
<body>
{% comment %}
action : 表单提交地址
method : 提交方式为GET
{% endcomment %}
<form action="/search_get/" method="get">
    <input type="text" name="value">
    <input type="submit" value="搜索">
form>
body>
html>

启动服务,访问 http://localhost:8080/redirect_form/会给你返回 search_form.html页面

Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第2张图片
在输入框中输入参数,点击搜索,输出如下

在这里插入图片描述

2. POST方法提交表单

myFirstDjango/search.py中添加如下内容

# 接收POST请求数据 
def search_post(request):
    """
    接收到请求数据后,判断当前请求是POST的话
    直接返回 search_post.html 页面,并且传参数 result
    :param request: 
    :return: 
    """
    result = {
     }
    if request.POST:
        result['result'] = request.POST['value']
    return render(request, "search_post.html", result)

myFirstDjango/urls.py中添加如下内容

from django.urls import path
from django.conf.urls import url
from . import views, testdb, search

# 此项就是django的url配置
urlpatterns = [
    path('TmplUseTag', views.TmplUseTag),
    path('testdb', testdb.testdb),
    # 使用正则表达式的校验方式校验URL,映射到 search.redirect_form
    url(r'^redirect_form/$', search.redirect_form),
    # get请求视图
    url(r'^search_get/$', search.search_get),
    # post请求视图
    url(r'^search-post/$', search.search_post)
]

templates文件下创建 search_post.html并添加如下内容


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>POST提交表单结果title>
head>
<body>
<form action="/search-post/" method="post">
    {% csrf_token %}
    <input type="text" name="value">
    <input type="submit" value="搜索">
form>
{% comment %}
点击搜索后,搜索内容会回显到下方的P标签
{% endcomment %}
 <p>搜索:  {
    { result }}p>
body>
html>

启动服务,访问 http://localhost:8080/search-post/会给你返回 search_post.html页面

Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第3张图片

输入框中输入内容,回显到下方P标签中

Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第4张图片

3. Request 对象

每个视图函数的第一个参数是一个 HttpRequest 对象,就像下面这个 search_post() 函数

def search_post(request):
    result = {
     }
    if request.POST:
        result['result'] = request.POST['value']
    return render(request, "search_post.html", result)

3.1 HttpRequest对象包含当前请求URL的一些信息

属性 描述
path 请求页面的全路径,不包括域名—例如, “/hello/”
method 请求中使用的HTTP方法的字符串全大写表示 例如: if request.method == ‘GET’:
GET 包含所有HTTP GET参数的类字典对象。参见QueryDict 文档
POST Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第5张图片
REQUEST 在这里插入图片描述
COOKIES 包含所有cookies的标准Python字典对象。Keys和values都是字符串
FILES Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第6张图片
META Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第7张图片Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第8张图片
user 在这里插入图片描述Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第9张图片
session 唯一可读写的属性,代表当前会话的字典对象。只有激活Django中的session支持时该属性才可用
raw_post_data 原始HTTP POST数据,未解析过。 高级处理时会有用处
__getitem__(key) 在这里插入图片描述
has_key() 检查request.GET or request.POST中是否包含参数指定的Key
get_full_path() 返回包含查询字符串的请求路径。例如, “/music/bands/the_beatles/?print=true”
is_secure() 如果请求是安全的,返回True,就是说,发出的是HTTPS请求

4. QueryDict对象

  • 在HttpRequest对象中, GET和POST属性是django.http.QueryDict类的实例
  • QueryDict类似字典的自定义类,用来处理单键对应多值的情况
  • QueryDict实现所有标准的词典方法。还包括一些特有的方法

4.1 QueryDict 方法表

方法 描述
__getitem__ 和标准字典的处理有一点不同,就是,如果Key对应多个Value,__getitem__()返回最后一个value
__setitem__ 设置参数指定key的value列表(一个Python list)。注意:它只能在一个mutable QueryDict 对象上被调用(就是通过copy()产生的一个QueryDict对象的拷贝)
get() 如果key对应多个value,get()返回最后一个value
update() 参数可以是QueryDict,也可以是标准字典。和标准字典的update方法不同,该方法添加字典 items,而不是替换它们Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第10张图片
items() 和标准字典的items()方法有一点不同,该方法使用单值逻辑的__getitem__()Django框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第11张图片
values() 和标准字典的values()方法有一点不同,该方法使用单值逻辑的__getitem__()
copy() 返回对象的拷贝,内部实现是用Python标准库的copy.deepcopy()。该拷贝是mutable(可更改的) — 就是说,可以更改该拷贝的值
getlist(key) 返回和参数key对应的所有值,作为一个Python list返回。如果key不存在,则返回空list。 It's guaranteed to return a list of some sort..
setlist(key,list_) 设置key的值为list_ (unlike __setitem__())
appendlist(key,item) 添加item到和key关联的内部list
setlistdefault(key,list) 和setdefault有一点不同,它接受list而不是单个value作为参数
lists() 和items()有一点不同, 它会返回key的所有值,作为一个listDjango框架入门五__表单提交HTTP GET/POST请求与Request,QueryDict对象_第12张图片

借鉴 https://www.runoob.com/django/django-form.html

你可能感兴趣的:(django,python,django,GET,POST,Request)