摘要

本章讲述了form表单的action参数,以及前后端简单传递数据的方式:form表单中的method参数,input标签中的name参数,GET/POST请求,以及后端接收数据的方式:request.method方法

form表单

form表单的action参数

# 控制数据提交的地址
'''
1. action='',默认向当前地址发送数据
2. action='https://www.baidu.com/' 完整地址,向所写地址发送数据
3. action='/index/' 路由地址,向当前服务端的index地址提交数据
127.0.0.1/index/
'''

form表单的method参数

# 控制数据提交的方法
'''
get 默认,向别人请求数据(可以携带一些要求,如一些筛选条件)
携带数据方式:
URL?aaa=bbb&xxx=ccc 使用?符号携带,使用&符号隔开多个条件
限制:
1. 携带的数据的大小有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
对于服务器:
Apache (Server):最大url长度为8,192个字符。
Microsoft Internet Information Server(IIS):最大url的长度为16,384个字符。
对于浏览器:
Microsoft Internet Explorer (Browser):URL的最大限制为2,083个字符,超过限制提交按钮将失效。
Firefox (Browser):URL的长度限制为65,536个字符
Safari (Browser):URL最大长度限制为 80,000个字符。
Opera (Browser):URL最大长度限制为190,000个字符。
Google (chrome):URL最大长度限制为8,182个字符。
2. 携带的数据因为是明文,所以不能有敏感数据 post 向别人提交数据
携带数据的方式: 请求体
请求体携带的数据安全性较高,并且大小没有限制
'''

request.method方法

简介

request.method			   获取请求方式,结果是纯大写的字符串数据
GET\POST
request.POST 获取请求体中携带的数据
request.POST.get() 获取列表最后一个数据值
request.POST.getlist() 获取整个列表数据,以列表形式返回
request.GET 获取请求中url中问号后面携带的数据,无论GET\POST都会传递数据
request.GET.get() 获取列表最后一个数据值
request.GET.getlist() 获取整个列表数据,以列表形式返回

get请求传递数据

# input标签添加name属性值
<div class="container">
<div class="row">
<h1 class="text-center">用户登录</h1>
<div class="col-md-6 col-md-offset-3">
<form action="">
<p>username:
<input type="text" class="form-control" name="name">
</p>
<p>password:
<input type="password" class="form-control" name="pwd">
</p>
<input type="submit" class="btn btn-block btn-success">
</form>
</div>
</div>
</div> # 在浏览器username处填写Tom,在password处填写123
# 此时提交表单后,浏览器的url会变为:http://127.0.0.1:8000/login/?name=Tom&pwd=123

post请求传递数据

    <div class="container">
<div class="row">
<h1 class="text-center">用户登录</h1>
<div class="col-md-6 col-md-offset-3">
<form action="" method="post"> # 修改method传递方式
{% csrf_token %}
<p>username:
<input type="text" class="form-control" name="name">
</p>
<p>password:
<input type="password" class="form-control" name="pwd">
</p>
<input type="submit" class="btn btn-block btn-success">
</form>
</div>
</div>
</div>

现在的问题是,后端如何知道用户发送的是get请求还是post请求?方法如下:

def login_func(request):
# 如果问号后面携带数据,可使用request.GET获取,例如url为:http://127.0.0.1:8000/login/?name=jack
print(request.GET) # 返回: <QueryDict: {'name': ['jack']}>
if request.method == 'GET':
return render(request, 'login.html')
elif request.method == 'POST':
print(request.POST) # 返回 <QueryDict: {'name': ['jack'], 'pwd': ['123']}>
name = request.POST.get('name') # 返回jack
pwd = request.POST.get('pwd') # 返回123
print(name, pwd)
print(request.POST.getlist('name')) # 返回['Jack', 'Rose', 'Maria']
return HttpResponse('The post get the data')
# 如果要返回多个数据,需要一次性接收(checkbox这种),可以使用下面的方法:
print(request.POST.getlist('name')) # 返回['Jack', 'Rose', 'Maria']

GET/POST实际应用,简单登录方式实现

# 前端页面使用上面的html代码,在此不再重复
# 后端代码如下
def login_func(request):
if request.method == 'POST':
name = request.POST.get('name')
pwd = request.POST.get('pwd')
# 注意,此种方法收到的前端数据都是字符串
if name == 'jack' and pwd == '123':
return HttpResponse('用户登录成功')
return HttpResponse('用户名或密码错误')
return render(request, 'login.html')

总结

可以看到,django学会了传输数据的简单方式后,就可以实现前后端数据的传输,但是如果要实现数据交互,就需要使用数据库了,后面就需要开始学习django与数据库如何交互的。

Django之form表单相关操作的更多相关文章

  1. JS之Form表单相关操作

    获取ID组件的值 var userid=document.getElementById('userid').value;var cdkey=document.getElementById('cdkey ...

  2. Django的form表单

    html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...

  3. 转载:Django之form表单

    转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...

  4. Django 11 form表单(状态保持session、form表单及注册实现)

    Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...

  5. Django--分页器(paginator)、Django的用户认证、Django的FORM表单

    分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['joh ...

  6. Django之form表单操作

    小白必会三板斧 from django.shortcuts import render,HttpResponse,redirect HttpRespone:返回字符串 render:返回html页面 ...

  7. Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作

    一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...

  8. django中form表单的提交:

    一,关于表单: 表单在百度百科的解释:   表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...

  9. Django之form表单组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  10. Django 之 form表单

    Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...

随机推荐

  1. NS-Atmosphere payload Programmer

    NS-Atmosphere payload Programmer 通过该软件将任意payload烧写到NS-Atmosphere 注入器中, 兼容windows, ubuntu, 苹果 MAC OS ...

  2. js-var,let ,const 的区别

    变量提升: 在js预编译阶段,函数和变量的声明会被提前检索编译,打乱了编写时的声明顺序. 函数字面量表达式不会被提升 var a = function(){}; ex: console.log(a) ...

  3. 下载Vue.js输入Vue -V报错解决办法

    报错如图所示 解决办法: 1. 以管理员身份运行vscode; 2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的; 3. 执行:set-Execution ...

  4. 设置mode='out-on'导致路由切换过快路由加载报错 Failed to execute 'insertBefore' on 'Node'

    原代码: 解决代码: 原因未知

  5. QThead实现模拟VC线程函数

    // 头文件 #ifndef QTHREADBASE_H #define QTHREADBASE_H #include <iostream> #include <stdlib.h&g ...

  6. jsp第9个作业

    regist.jsp <%@ page language="java" import="java.util.*" pageEncoding="U ...

  7. ping 的七种用法【搬运】

    原作者:Pheenet菲尼特 原地址:https://www.toutiao.com/a6783191796659782148/?tt_from=weixin&utm_campaign=cli ...

  8. linux命令基本操作

    chmod 命令 : chmod -R 755 tools_command/ 解释 : -R 为递归遍历tools_command文件夹, chmod 755修改权限: 查看所有用户 1.cat /e ...

  9. apt-get install 出现could not open lock file /var/lib/dpkg/lock错误问题

    apt-get install 经常出现 could not open lock file /var/lib/dpkg/lock -open 错误问题 一种解决办法 1.切换到root用户 su ~ ...

  10. Openssl自签证书|Nginx配置全站HTTPS,包括WSS(websocket)

    一.生成自签证书 如果有购买证书的,可忽略此步骤. 生成方法一: openssl genrsa -des3 -out ca.key 1024 openssl rsa -in ca.key -out c ...