Django之form表单相关操作
摘要
本章讲述了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表单相关操作的更多相关文章
- JS之Form表单相关操作
获取ID组件的值 var userid=document.getElementById('userid').value;var cdkey=document.getElementById('cdkey ...
- Django的form表单
html的form表单 django中,前端如果要提交一些数据到views里面去,需要用到 html里面的form表单. 例如: # form2/urls.py from django.contrib ...
- 转载:Django之form表单
转载: 一.使用form类创建一个表单 先定义好一个RegForm类: forms.py from django import forms # 导入forms类 class NameForm(form ...
- Django 11 form表单(状态保持session、form表单及注册实现)
Django 11 form表单(状态保持session.form表单及注册实现) 一.状态保持 session 状态保持 #1.http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状 ...
- Django--分页器(paginator)、Django的用户认证、Django的FORM表单
分页器(paginator) >>> from django.core.paginator import Paginator >>> objects = ['joh ...
- Django之form表单操作
小白必会三板斧 from django.shortcuts import render,HttpResponse,redirect HttpRespone:返回字符串 render:返回html页面 ...
- Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作
一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...
- django中form表单的提交:
一,关于表单: 表单在百度百科的解释: 表单在网页中主要负责数据采集功能.一个表单有三个基本组成部分: 表单标签:这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方法. 表单域 ...
- Django之form表单组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Django 之 form表单
Django中的Form表单 1.背景 平时我们在书写form表单时,经常都是手动的去写一些input标签,让用户输入一些功能,进行一些校验的判断,等等.Django中的form表单就能够帮我们去实现 ...
随机推荐
- NS-Atmosphere payload Programmer
NS-Atmosphere payload Programmer 通过该软件将任意payload烧写到NS-Atmosphere 注入器中, 兼容windows, ubuntu, 苹果 MAC OS ...
- js-var,let ,const 的区别
变量提升: 在js预编译阶段,函数和变量的声明会被提前检索编译,打乱了编写时的声明顺序. 函数字面量表达式不会被提升 var a = function(){}; ex: console.log(a) ...
- 下载Vue.js输入Vue -V报错解决办法
报错如图所示 解决办法: 1. 以管理员身份运行vscode; 2. 执行:get-ExecutionPolicy,显示Restricted,表示状态是禁止的; 3. 执行:set-Execution ...
- 设置mode='out-on'导致路由切换过快路由加载报错 Failed to execute 'insertBefore' on 'Node'
原代码: 解决代码: 原因未知
- QThead实现模拟VC线程函数
// 头文件 #ifndef QTHREADBASE_H #define QTHREADBASE_H #include <iostream> #include <stdlib.h&g ...
- jsp第9个作业
regist.jsp <%@ page language="java" import="java.util.*" pageEncoding="U ...
- ping 的七种用法【搬运】
原作者:Pheenet菲尼特 原地址:https://www.toutiao.com/a6783191796659782148/?tt_from=weixin&utm_campaign=cli ...
- linux命令基本操作
chmod 命令 : chmod -R 755 tools_command/ 解释 : -R 为递归遍历tools_command文件夹, chmod 755修改权限: 查看所有用户 1.cat /e ...
- 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 ~ ...
- Openssl自签证书|Nginx配置全站HTTPS,包括WSS(websocket)
一.生成自签证书 如果有购买证书的,可忽略此步骤. 生成方法一: openssl genrsa -des3 -out ca.key 1024 openssl rsa -in ca.key -out c ...