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实现简单过滤文本段的方法
May 24 Python
python+splinter自动刷新抢票功能
Sep 25 Python
python处理两种分隔符的数据集方法
Dec 12 Python
python如何获取apk的packagename和activity
Jan 10 Python
python实现高斯投影正反算方式
Jan 17 Python
Python requests模块安装及使用教程图解
Jun 30 Python
python pandas dataframe 去重函数的具体使用
Jul 20 Python
Python自动创建Excel并获取内容
Sep 16 Python
Python中的面向接口编程示例详解
Jan 17 Python
用Python的绘图库(matplotlib)绘制小波能量谱
Apr 17 Python
python生成可执行exe控制Microsip自动填写号码并拨打功能
Jun 21 Python
用Python爬取英雄联盟的皮肤详细示例
Dec 06 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 数组的创建、调用和更新实现代码
2009/03/09 PHP
PHP以指定字段为索引返回数据库所取的数据数组
2013/06/30 PHP
php微信公众号开发之简答题
2018/10/20 PHP
运用Windows XP附带的Msicuu.exe、Msizap.exe来彻底卸载顽固程序
2007/04/21 Javascript
JavaScript 监听textarea中按键事件
2009/10/08 Javascript
屏蔽F1~F12的快捷键的js函数
2010/05/06 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
js自执行函数的几种不同写法的比较
2012/08/16 Javascript
js中关于一个分号的崩溃示例
2013/11/11 Javascript
调整小数的格式保留小数点后两位
2014/05/14 Javascript
javascript中的正则表达式使用指南
2015/03/01 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
jQuery实现鼠标经过时高亮,同时其他同级元素变暗的效果
2016/09/18 Javascript
JavaScript中利用构造器函数模拟类的方法
2017/02/16 Javascript
MUI 上拉刷新/下拉加载功能实例代码
2017/04/13 Javascript
微信小程序访问node.js接口服务器搭建教程
2017/04/25 Javascript
解决vue处理axios post请求传参的问题
2018/03/05 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
Vue开发实现吸顶效果的示例代码
2018/08/21 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
深入理解 JS 垃圾回收
2019/06/03 Javascript
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
python实现猜数字游戏
2020/03/25 Python
python 统计文件中的字符串数目示例
2019/12/24 Python
python垃圾回收机制(GC)原理解析
2019/12/30 Python
HTML5手指下滑弹出负一屏阻止移动端浏览器内置下拉刷新功能的实现代码
2020/04/10 HTML / CSS
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
会计实习期自我鉴定
2013/10/06 职场文书
上课玩手机检讨书
2014/02/08 职场文书
团日活动总结范文
2014/04/25 职场文书
员工教育培训协议书
2014/09/27 职场文书
意向协议书
2015/01/27 职场文书
地震慰问信
2015/02/14 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
2015年感恩父亲节活动策划方案
2015/05/05 职场文书