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中使用Beautiful Soup库的超详细教程
Apr 30 Python
python字符串,数值计算
Oct 05 Python
对numpy数据写入文件的方法讲解
Jul 09 Python
python 实现视频流下载保存MP4的方法
Jan 09 Python
Python根据成绩分析系统浅析
Feb 11 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
为什么说Python可以实现所有的算法
Oct 04 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
使用python实现名片管理系统
Jun 18 Python
python 判断一组数据是否符合正态分布
Sep 23 Python
Django ModelForm组件原理及用法详解
Oct 12 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
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
YII Framework框架教程之国际化实现方法
2016/03/14 PHP
thinkphp 手机号和用户名同时登录
2017/01/20 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
PHP实现防止表单重复提交功能【基于token验证】
2018/05/24 PHP
Javascript 匿名函数及其代码模式原理
2010/03/19 Javascript
关于this和self的使用说明
2010/08/01 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
为EasyUI的Tab标签添加右键菜单的方法
2012/07/14 Javascript
json数据的列循环示例
2013/09/06 Javascript
javascript版2048小游戏
2015/03/18 Javascript
jQuery添加删除DOM元素方法详解
2016/01/18 Javascript
JavaScript:Date类型全面解析
2016/05/19 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
防止Node.js中错误导致进程阻塞的办法
2016/08/11 Javascript
jquery层级选择器(匹配父元素下的子元素实现代码)
2016/09/05 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
webuploader实现上传图片到服务器功能
2018/08/16 Javascript
解决vue跨域axios异步通信问题
2019/04/17 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
[06:48]DOTA2-DPC中国联赛2月26日Recap集锦
2021/03/11 DOTA
python抓取百度首页的方法
2015/05/19 Python
python 重命名轴索引的方法
2018/11/10 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
pycharm软件实现设置自动保存操作
2020/06/08 Python
Python如何截图保存的三种方法(小结)
2020/09/01 Python
python Matplotlib数据可视化(1):简单入门
2020/09/30 Python
香港交友网站:be2香港
2018/07/22 全球购物
serialVersionUID具有什么样的特征
2014/02/20 面试题
程序员求职信
2014/04/16 职场文书
2014年党支部学习材料
2014/05/19 职场文书
观看《杨善洲》宣传教育片心得体会
2016/01/23 职场文书
初三语文教学反思
2016/03/03 职场文书