Django框架中表单的用法


Posted in Python onJune 10, 2022

HTML表单是网站交互性的经典方式。 本章将介绍如何用Django对用户提交的表单数据进行处理。

一、HTTP 请求

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

1、GET 方法

我们在之前的项目中创建一个 search.py 文件,用于接收用户的请求:

/HelloWorld/HelloWorld/search.py 文件代码:

# -*- coding: utf-8 -*-
 
from django.http import HttpResponse
from django.shortcuts import render_to_response
 
# 表单
def search_form(request):
    return render_to_response('search_form.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)

在模板目录 templates 中添加 search_form.html 表单:

/HelloWorld/templates/search_form.html 文件代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
    <form action="/search" method="get">
        <input type="text" name="q">
        <input type="submit" value="搜索">
    </form>
</body>
</html>

urls.py 规则修改为如下形式:

/HelloWorld/HelloWorld/urls.py 文件代码:

from django.conf.urls import url
from . import view,testdb,search
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
    url(r'^search-form$', search.search_form),
    url(r'^search$', search.search),
]

访问地址 http://127.0.0.1:8000/search-form 并搜索,结果如下所示:

Django框架中表单的用法

2、POST 方法

上面我们使用了GET方法。视图显示和请求处理分成两个函数处理。

提交数据时更常用POST方法。我们下面使用该方法,并用一个URL和处理函数,同时显示视图和处理请求。

我们在 templates 创建 post.html:

/HelloWorld/templates/post.html 文件代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
    <form action="/search-post" method="post">
        {% csrf_token %}
        <input type="text" name="q">
        <input type="submit" value="Submit">
    </form>
 
    <p>{{ rlt }}</p>
</body>
</html>

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

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

在HelloWorld目录下新建 search2.py 文件并使用 search_post 函数来处理 POST 请求:

/HelloWorld/HelloWorld/search2.py 文件代码:

# -*- coding: utf-8 -*-
 
from django.shortcuts import render
from django.views.decorators import csrf
 
# 接收POST请求数据
def search_post(request):
    ctx ={}
    if request.POST:
        ctx['rlt'] = request.POST['q']
    return render(request, "post.html", ctx)

urls.py 规则修改为如下形式:

/HelloWorld/HelloWorld/urls.py 文件代码:

from django.conf.urls import url
from . import view,testdb,search,search2
 
urlpatterns = [
    url(r'^hello$', view.hello),
    url(r'^testdb$', testdb.testdb),
    url(r'^search-form$', search.search_form),
    url(r'^search$', search.search),
    url(r'^search-post$', search2.search_post),
]

访问 http://127.0.0.1:8000/search-post 显示结果如下:

Django框架中表单的用法

完成以上实例后,我们的目录结构为:

HelloWorld
|-- HelloWorld
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- search.py
|   |-- search.pyc
|   |-- search2.py
|   |-- search2.pyc
|   |-- settings.py
|   |-- settings.pyc
|   |-- testdb.py
|   |-- testdb.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- view.py
|   |-- view.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
|-- TestModel
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- admin.py
|   |-- admin.pyc
|   |-- apps.py
|   |-- migrations
|   |   |-- 0001_initial.py
|   |   |-- 0001_initial.pyc
|   |   |-- __init__.py
|   |   `-- __init__.pyc
|   |-- models.py
|   |-- models.pyc
|   |-- tests.py
|   `-- views.py
|-- db.sqlite3
|-- manage.py
`-- templates
    |-- base.html
    |-- hello.html
    |-- post.html
    `-- search_form.html

二、Request 对象

每个 view 函数的第一个参数是一个 HttpRequest 对象,就像下面这个 hello() 函数:

from django.http import HttpResponse

def hello(request):
    return HttpResponse("Hello world")

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

Django框架中表单的用法

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

Django框架中表单的用法

1、QueryDict对象

在HttpRequest对象中, GET和POST属性是django.http.QueryDict类的实例。

QueryDict类似字典的自定义类,用来处理单键对应多值的情况。

QueryDict实现所有标准的词典方法。还包括一些特有的方法:

Django框架中表单的用法

此外, QueryDict也有一些方法,如下表:

Django框架中表单的用法

到此这篇关于Django框架中表单用法的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。


Tags in this post...

Python 相关文章推荐
使用python编写批量卸载手机中安装的android应用脚本
Jul 21 Python
Pyhton中防止SQL注入的方法
Feb 05 Python
Django实现的自定义访问日志模块示例
Jun 23 Python
python 将list转成字符串,中间用符号分隔的方法
Oct 23 Python
python3 动态模块导入与全局变量使用实例
Dec 22 Python
pytorch 图像中的数据预处理和批标准化实例
Jan 15 Python
Python如何使用内置库matplotlib绘制折线图
Feb 24 Python
Django中Q查询及Q()对象 F查询及F()对象用法
Jul 09 Python
Python实现异步IO的示例
Nov 05 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 Python
Python爬虫网络请求之代理服务器和动态Cookies
Apr 12 Python
Golang Web 框架Iris安装部署
Aug 14 Python
移除Selenium中window.navigator.webdriver值
Jun 10 #Python
Django框架模板用法详解
Jun 10 #Python
python库Tsmoothie模块数据平滑化异常点抓取
使用Django框架创建项目
Jun 10 #Python
Python实现信息管理系统
Jun 05 #Python
python实现学员管理系统(面向对象版)
Jun 05 #Python
python实现学生信息管理系统(面向对象)
Jun 05 #Python
You might like
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
一个简单实现多条件查询的例子
2006/10/09 PHP
php中实现简单的ACL 完结篇
2011/09/07 PHP
深入分析PHP引用(&amp;)
2014/09/04 PHP
php并发加锁示例
2016/10/17 PHP
php array_slice 取出数组中的一段序列实例
2016/11/04 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
AngularJS实现根据变量改变动态加载模板的方法
2016/11/04 Javascript
浅析js的模块化编写 require.js
2016/12/07 Javascript
js数组去重的hash方法
2016/12/22 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
AngularJS实现的2048小游戏功能【附源码下载】
2018/01/03 Javascript
js实现时钟定时器
2020/03/26 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
Vue和React有哪些区别
2020/09/12 Javascript
[52:52]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第三局
2016/02/27 DOTA
[57:28]2018DOTA2亚洲邀请赛 4.6 淘汰赛 TNC vs Liquid 第一场
2018/04/10 DOTA
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
python3.4用函数操作mysql5.7数据库
2017/06/23 Python
TensorFlow平台下Python实现神经网络
2018/03/10 Python
python实现微信小程序用户登录、模板推送
2019/08/28 Python
使用tensorflow DataSet实现高效加载变长文本输入
2020/01/20 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
2020/03/28 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
工作自荐信
2013/12/11 职场文书
公益活动策划方案
2014/01/09 职场文书
人事专员岗位说明书
2014/07/29 职场文书
党的群众路线教育实践活动个人整改方案
2014/09/21 职场文书
2014年高中班主任工作总结
2014/11/08 职场文书
入团申请书格式
2019/06/20 职场文书
利用For循环遍历Python字典的三种方法实例
2022/03/25 Python