Django之form表单
Django的请求
默认页面请求都是get请求
Request是传递到视图的请求,里面包含请求的各种参数:
常用的请求方式:
Get:默认是get请求,请求数据以明文形式放在路由上,get的格式是以?开头,键等于值的形式,以&来分割键值对,通常用于和服务器获取资源。
Post:请求数据隐藏发送,安全系数更高。通常用于向服务器提交资源。
Django默认提供了处理get和post请求的参数,其他类型的请求需要使用django的视 图类来自定义。
request的函数 | 函数说明 |
---|---|
request.COOKIES | 接收cookie的方法 |
request.GET | 获取get请求数据的方法 |
request.POST | 获取post请求数据的方法 |
request.FILES | 获取文件上传请求数据的方法 |
request.method | 获取请求的方法 |
request.path | 请求的路径 |
request.get_raw_uri | 请求的url |
request.META | 请求的详细参数 |
request.META.HTTP_USER_AGENT | 请求端系统 |
request.META.OS | 用户请求头,返回请求浏览器版本 |
request.META.HTTP_HOST | 请求的主机 |
request.META.HTTP_REFERER | 请求的来源 |
前端Web的form表单
Action 提交的地址,默认是当前路由。
Method 提交的方法,默认是get
Input 是表单的元素
Name参数用来做传参的值
Submit会自动提交当前表单的数据
Django的form表单
csrf跨域伪造攻击
使用当前浏览器还在生效状态的cookie对指定网站进行操作。最初针对的是银行网站的转账。
Django本身会对csrf进行校验,在django的1.4版本之前,csrf默认关闭,需要在settings当中手动开启,在1.4之后,默认开启.
在django的任何post请求,都会在请求之初,给用户下发一下串用来校验身份的编码,并且每次请求不一样。
如果不加csrf_token校验,会发生csrf错误
使用django的csrf校验
1、返回post登陆页面的时候要用render方法,render方法和render_to_response方法的功能类似,但是会在第一个参数返回request,如果不返还,前端无法调用 {% csrf_token %}
2、在form表单内部的第一行,插入csrf校验,使用{% csrf_token %}
{% csrf_token %}标签实际上就是在前端的form表单当中生成了一个hidden隐藏域,name为csrfmiddlewaretoken,value是csrf校验的值
存入数据库的步骤和get请求类似
Django form表单类
表单功能在开发的过程当中有一半的需求是获取数据,另一半校验数据。针对于表单,校验分为前端校验和后端校验:
前端校验就是通过js或者jq脚本对form表单输入的数据进行校验,形象,直观,有利于对用户进行提醒,用户体验好。
后端校验就是在视图当中或者python后端当中对提交的数据进行校验,比较安全。
前端校验我们可以通过各种校验框架进行校验,django推出了自己的form表单类来定义后端校验。
Form表单类是有django定义的,可以自动生成前端form表单代码的表单类,已经完成大部分的校验功能。
常用的form表单样式:
as_p 表单显示为段落标签形式,一个字段为一行
as_ul 表单显示为无序列表样式
使用for循环遍历出来再用表格装饰,显示为表格样式
Django 的form表单没有携带form外标签,也没有提交按钮,这样的设计更方便开发者修改样式
Form表单类通用的参数:
Max_length | 最大长度 |
in_length | 最小长度 |
required | 为False为可以为空,默认为True |
label | Form表单的标签内容 |
Help_text | 帮助文档 |