Django(4)表单

简介: Django(4)表单
>>> django.VERSION  
(4, 1, 0, 'final', 0)


PS:基于前几章的进度进行修改


一、概述


  • 表单在网页中主要负责数据采集功能。一个表单有三个基本组成部分:


表单域:包含了文本框、密码框、隐藏域、多行文本框、复选框、单选框、下拉选择框和文件上传框等。


表单按钮:包括提交按钮、复位按钮和一般按钮;用于将数据传送到服务器上的CGI脚本或者取消输入,还可以用表单按钮来控制其他定义了处理脚本的处理工作。


注释:CGI为通用网关接口


HTML表单是网站交互性的经典方式


HTTP协议以请求——回复的方式工作,当客户发送请求时,可以在请求中附加数据,服务器通过解析请求,从而获得客户传输的数据,并根据URL来提供特定的服务


二、GET方法


  • 继续之前的项目,创建/HelloWorld/HelloWorld/search.py文件,用于接收用户的请求:


# -*- coding: utf-8 -*-
from django.http import HttpResponse
from django.shortcuts import render
def search_from(request):  
    return render(request,'search_from.html')   #指定表单
def search(request):  #接收请求数据
    request.encoding = 'utf-8'
    if 'q' in request.GET and request.GET['q']:   #对接收数据进行判断
        message = '你搜索的内容为:' + request.GET['q']
    else:
        message = '你提交了空表单'
    return HttpResponse(message)
  • 在模板目录中添加search_from.html,路径为/HelloWorld/templates/search_from.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>GET_test</title>
</head>
<body>
    <form action="/search/" method="get">
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
</body>
</html>
  • 修改/HelloWorld/HelloWorld/urls.py
#-*- coding: utf-8 -*-
from django.urls import path
from . import index_test,testdb,search   #导入search.py
urlpatterns = [
    path('hello/',index_test.Hello),
    path('testdb/',testdb.testdb),
    path('search-from/',search.search_from),  #增加两个path,指定search.py的两个方法
    path('search/',search.search),
]


  • 访问IP:8000/search-from


访问search-from资源时会调用search_from方法,此方法会提交search_from.html表单,表单使用GET方式去访问search资源,然后开始执行search方法,最终输出你搜索的内容为:Test

234be402519b451e8a83079f82c49af3.png



008432f7023b401f896d296be1a6d215.png


  • 访问IP:8000/search


因为没有经过上面提交表单的操作,所以在执行search方法时,是没有q参数的,所以判定false,输出你提交了空表单


4f266b72e49f4ec2a356dd8d54a4025f.png

三、POST方法


  • 上面使用了GET方法,视图显示和请求处理分成了两个函数处理
  • 下面来看POST方法,下面方法使用一个URL和一个处理函数,同时显示视图和处理请求,下面创建文件/HelloWorld/templates/post.html


<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>POST_TEST</title>
</head>
<body>
    <form action="/search-post/" method="post">
        {% csrf_token %}
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
    <p>{{ rlt }}</p>
</body>
</html>

模板末尾的rlt记号,用于为表格处理结果预留位置,表格后面还有一个{% csrf_token %}标签


注意:csrf全称 Cross Site Request Forgery ,这是 Django 提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签


新建文件/HelloWorld/HelloWorld/search2.py

# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.views.decorators import csrf
def search_post(request):  # 接收POST请求数据
    ctx ={}
    if request.POST:
        ctx['rlt'] = request.POST['q']
    return render(request, "post.html", ctx)
  • 修改文件/HelloWorld/HelloWorld/urls.py
#-*- coding: utf-8 -*-
from django.urls import path
from . import index_test,testdb,search,search2
urlpatterns = [
    path('hello/',index_test.Hello),
    path('testdb/',testdb.testdb),
    path('search-from',search.search_from),
    path('search/',search.search),
    path('search-post',search2.search_post),
]


  • 访问IP:8000/search-post

019395044b244bc2ba3111ed4218abdd.png


89e4f2d9add44f30a2f88a90fbe53d10.png

访问search-post资源时会调用search_post方法,然后提交post.html表单,表单调用/search-post/并且把输入的文本定义到ctx字典中,并定义键值,最终表单末尾进行调用{{ rlt }},这样的效果就是输入任何文本,会输出任何文本


下面是现在的目录结构


17888c77eca24b738cdebcc0b8781392.png


四、Request对象


  • 每个视图函数的第一个参数是HttpRequest对象,例如:
from django.http import HttpResponse
def test(request):
    return HttpResponse("Hello World!!!")


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


image.pngimage.pngimage.png


Request对象也有一些有用的方法


image.png


五、QueryDict对象


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


image.png

除此之外,QueryDict也有一些方法:

image.png

目录
相关文章
|
4月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
72 2
|
4月前
|
数据采集 Python
Django 表单
【8月更文挑战第24天】
36 3
|
4月前
|
Python
Django表单组件
【8月更文挑战第20天】
37 1
|
4月前
|
前端开发 JavaScript 数据处理
Django的表单处理
【8月更文挑战第16天】
26 2
|
6月前
|
Python
Django表单
【6月更文挑战第13天】Django表单。
32 5
|
6月前
|
测试技术 数据库 Python
使用django构建表单测试
【6月更文挑战第14天】该文档介绍了如何对本地库进行自动化测试,特别是关注于代码结构和模型测试。作者鼓励为其他模型和表单创建类似的测试,并提及测试应避免对底层框架的重复验证。
74 0
使用django构建表单测试
|
6月前
|
Python
Django表单
【6月更文挑战第3天】Django表单。
35 1
|
6月前
|
Python
Django表单
【6月更文挑战第3天】Django表单。
28 1
|
前端开发 中间件 数据安全/隐私保护
【Django】创建用户,中间件,表单组件
【Django】创建用户,中间件,表单组件
87 0
|
7月前
|
前端开发 开发者 Python
django表单
django表单
50 0