一、前言

  看了下教程,以为表单很简单呢,结果搞了一两个钟才弄懂,哈哈哈,所以说不要小瞧每一件事。

  先说明下HTTP请求:

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

  下面以输入框搜索为例,分别用get和post方法实战演练(还是基于DjangoTest项目演练),如下是效果图:

二、GET请求

1、在TestModel/tests.py,新增接收用户请求的代码

from django.shortcuts import render
from django.test import TestCase # Create your tests here. # -*- coding: utf-8 -*- '''例4:get请求'''
# 表单
def search_get(request):
return render(request, 'search_get.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)

2、在templates目录新增search_get.html

1)form的action属性说明:action="/search/",表示表单提交给的url,此处即表示表单提交后提交到http://127.0.0.1:8000/search/?q=xxx

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单搜索页-get</title>
</head>
<body>
<h3>GET请求搜索</h3>
<!--get方法-->
<form action="/search/" method="get">
<input type="text" name="q">
<input type="submit" value="搜索">
</form> </body>
</html>

3、修改DjangoTest/urls.py

1)path('get/',tests.search_get):即访问http://127.0.0.1:8000/get/,此时调用的是search_get函数(该函数处理的是指向打开search_get.html表单页)

2)path('search/',tests.search):这个是将路径指向http://127.0.0.1:8000/search,此时是调用search函数(该函数处理的是接收请求数据),此处要特别注意路径名需要对接search_get.html中tests.search函数所定义的action="search",所以这里的path必须是search

3)url访问说明:其实可以看下面的第4点,但我在这里还是再啰嗦一下比较好点

  • 访问http://127.0.0.1:8000/get/,打开表单页面
  • 搜索后由表单的action定义提交到http://127.0.0.1:8000/search,即相当于跳转到新页面了
  • get是将参数带到url中的,所以搜索后url为http://127.0.0.1:8000/search/?q=2

4、浏览器访问地址

1)访问http://127.0.0.1:8000/get/,加载的页面如下:

2)输入框输入内容

3)点击搜索后,效果如下:

三、POST请求

  前面是用get方法,将视图显示和请求处理分成两个函数处理,然而提交数据时更常用 POST 方法,所以接下来演示用post方法并用一个URL和处理函数,同时显示视图和处理请求。

1、在TestModel/tests.py,新增search_post 函数来处理 POST 请求

  'rlt'是search_post.html表单的<p>元素预留的位置值,用于接收搜索后的值

from django.shortcuts import render
from django.test import TestCase # Create your tests here. # -*- coding: utf-8 -*- '''例3:post请求'''
def search_post(request):
ctx= {}
if request.POST:
ctx['rlt'] = request.POST['querry']
return render(request,"search_post.html",ctx)

2、在templates目录新增search_post.html

1)在模板的末尾,我们增加一个 rlt 记号,为表格处理结果预留位置。

2)表格后面还有一个 {% csrf_token %} 的标签。csrf 全称是 Cross Site Request Forgery。这是 Django 提供的防止伪装提交请求的功能。POST 方法提交的表格,必须有此标签。

3)form的action属性说明:action="/post/",表示表单提交给的url,此处即表示表单提交后提交到http://127.0.0.1:8000/post/

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>表单搜索页-post</title>
</head>
<body>
<h3>POST请求搜索</h3>
<!--post方法:用一个URL和处理函数,同时显示视图和处理请求-->
<form action="/post/" method="post">
{% csrf_token %}
<input type="text" name="querry">
<input type="submit" value="搜索">
</form>
<p>{{ rlt }}</p>
</body>
</html>

3、修改DjangoTest/urls.py

4、浏览器访问地址

1)访问http://127.0.0.1:8000/post/,加载的页面如下:

2)输入内容后,点击搜索,效果如下:

Django——表单的更多相关文章

  1. python 全栈开发,Day111(客户管理之 编辑权限(二),Django表单集合Formset,ORM之limit_choices_to,构造家族结构)

    昨日内容回顾 1. 权限系统的流程? 2. 权限的表有几个? 3. 技术点 中间件 session orm - 去重 - 去空 inclusion_tag filter 有序字典 settings配置 ...

  2. python3之Django表单(一)

    1.HTML中的表单 在HTML种,表单是在<form>...</form>种的元素,它允许用户输入文本,选择选项,操作对象等,然后发送这些数据到服务器 表单元素允许用户在表单 ...

  3. django表单的api

    django表单的api,参考文档:https://yiyibooks.cn/xx/Django_1.11.6/ref/forms/api.html 绑定与未绑定形式: Form要么是绑定的,要么是未 ...

  4. Django表单API详解

    声明:以下的Form.表单等术语都指的的广义的Django表单. Form要么是绑定了数据的,要么是未绑定数据的. 如果是绑定的,那么它能够验证数据,并渲染表单及其数据,然后生成HTML表单.如果未绑 ...

  5. 9:django 表单

    django自带表单系统,这个表单系统不仅可以定义属性名,还可以自己定义验证,更有自己自带的错误提示系统 这节我们仅仅粗略的来看一下django表单系统的入门运用(具体的实在太多东西,主要是我觉得有很 ...

  6. django 表单系统 之 forms.Form

    继承forms.Form实现django表单系统 参考: https://www.cnblogs.com/zongfa/p/7709639.html https://www.cnblogs.com/c ...

  7. 关于创建Django表单Forms继承BaseForm的问题

    在创建Django表单时,因为需要验证用户输入的验证码是否正确,因此需要在session里提取当前验证码的值和POST提交过来的值进行比对,如图: form.py from django import ...

  8. Django 表单处理流程

    Django 的表单处理:视图获取请求,执行所需的任何操作,包括从模型中读取数据,然后生成并返回HTML页面(从模板中),我们传递一个包含要显示的数据的上下文.使事情变得更复杂的是,服务器还需要能够处 ...

  9. 第四章:Django表单 - 2:Django表单API详解

    声明:以下的Form.表单等术语都指的的广义的Django表单. Form要么是绑定了数据的,要么是未绑定数据的. 如果是绑定的,那么它能够验证数据,并渲染表单及其数据,然后生成HTML表单.如果未绑 ...

  10. 第四章:Django表单 - 1:使用表单

    假设你想从表单接收用户名数据,一般情况下,你需要在HTML中手动编写一个如下的表单元素: <form action="/your-name/" method="po ...

随机推荐

  1. Java多线程与线程池技术

    一.序言 Java多线程编程线程池被广泛使用,甚至成为了标配. 线程池本质是池化技术的应用,和连接池类似,创建连接与关闭连接属于耗时操作,创建线程与销毁线程也属于重操作,为了提高效率,先提前创建好一批 ...

  2. 如何查看k8s相关日志

    一.看系统日志cat /var/log/messages 二.用 kubectl 查看日志 # 注意:使用Kubelet describe 查看日志,一定要带上 命名空间,否则会报如下错误[root@ ...

  3. java四种访问修饰符及各自的权限

    1.public,即共有的,是访问权限限制最宽的修饰符.被public修饰的类.属性.及方法不仅可以跨类访问,而且可以跨包访问. 2. protected,即保护访问权限,是介于public和priv ...

  4. JavaScript学习总结1-字符、数字

    1.严格检查模式 JavaScript是一种十分随便自由的语言 1 <script> 2 console.log(i); 3 </script> 即使没有定义i变量,也能在控制 ...

  5. css 动画 (2)

    1. html 结构 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  6. CesiumJS 2022^ 原理[3] 渲染原理之从 Entity 看 DataSource 架构 - 生成 Primitive 的过程

    目录 API 用法回顾 1. 为什么要从 Viewer 访问 Entity API 1.1. 高层数据模型的封装 - DataSource API 1.2. 显示管理器 DataSourceDispl ...

  7. 一文学会text-justify,orientation,combine文本属性

    大家好,我是半夏,一个刚刚开始写文的沙雕程序员.如果喜欢我的文章,可以关注 点赞 加我微信:frontendpicker,一起学习交流前端,成为更优秀的工程师-关注公众号:搞前端的半夏,了解更多前端知 ...

  8. C/C++指针、函数、结构体、共用体

    指针 变量与地址 变量给谁用的? 变量是对某一块空间的抽象命名. 变量名就是你抽象出来的某块空间的别名. 指针就是地址.指向某个地址. 指针与指针变量 指针是指向某块地址.指针(地址)是常量. 指针变 ...

  9. 利用QEMU+GDB搭建Linux内核调试环境

    前言 对用户态进程,利用gdb调试代码是很方便的手段.而对于内核态的问题,可以利用crash等工具基于coredump文件进行调试. 其实我们也可以利用一些手段对Linux内核代码进行gdb调试,qe ...

  10. 【面试普通人VS高手系列】死锁的发生原因和怎么避免

    一个去阿里面试的小伙伴私信我说:今天被一个死锁的问题难到了. 平常我都特意看了死锁这块的内容,但是回答的时候就想不起来. 这里可能存在一个误区,认为技术是要靠记的. 大家可以想想,平时写代码的时候,这 ...