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使用PyV8执行javascript代码示例分享
Dec 04 Python
使用Python中的线程进行网络编程的入门教程
Apr 15 Python
Python基于Tkinter的HelloWorld入门实例
Jun 17 Python
详解python3百度指数抓取实例
Dec 12 Python
Python制作简易注册登录系统
Dec 15 Python
利用python实现命令行有道词典的方法示例
Jan 31 Python
python SSH模块登录,远程机执行shell命令实例解析
Jan 12 Python
python 6.7 编写printTable()函数表格打印(完整代码)
Mar 25 Python
Python基础教程(一)——Windows搭建开发Python开发环境
Jul 20 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
Django跨域请求原理及实现代码
Nov 14 Python
Elasticsearch 批量操作
Apr 19 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
PHP 的 __FILE__ 常量
2007/01/15 PHP
什么情况下可以不写PHP的闭合标签“?&gt;”
2014/08/28 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
2016/09/22 PHP
javascript textContent与innerText的异同分析
2010/10/22 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
Jquery异步请求数据实例代码
2011/12/28 Javascript
原生js实现给指定元素的后面追加内容
2013/04/10 Javascript
jquery插件validate验证的小例子
2013/05/08 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
7个JS基础知识总结
2014/03/05 Javascript
JS实现简单路由器功能的方法
2015/05/27 Javascript
两种JS实现屏蔽鼠标右键的方法
2020/08/20 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
JavaScript必知必会(六) delete in instanceof
2016/06/08 Javascript
jquery.multiselect多选下拉框实现代码
2016/11/11 Javascript
深入学习 JavaScript中的函数调用
2017/03/23 Javascript
js实现随机点名小功能
2017/08/17 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
js闭包和垃圾回收机制示例详解
2021/03/01 Javascript
ajax jquery实现页面某一个div的刷新效果
2021/03/04 jQuery
python实现简单socket程序在两台电脑之间传输消息的方法
2015/03/13 Python
python计算方程式根的方法
2015/05/07 Python
Python实现身份证号码解析
2015/09/01 Python
Linux上安装Python的PIL和Pillow库处理图片的实例教程
2016/06/23 Python
Python随机函数random()使用方法小结
2018/04/29 Python
python游戏地图最短路径求解
2019/01/16 Python
django获取from表单multiple-select的value和id的方法
2019/07/19 Python
HTML5如何为形状图上颜色怎么绘制具有颜色和透明度的矩形
2014/06/23 HTML / CSS
戛纳奢侈品商店:Jacques Loup法国
2019/11/04 全球购物
质检部部长职责
2013/12/16 职场文书
平面设计专业大学生职业规划书
2014/03/12 职场文书
妈妈再爱我一次观后感
2015/06/08 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
祝福语集锦:朋友新店开业祝福语
2019/12/10 职场文书