$.ajax({
url:'', // 不写默认朝当前页面所在的url地址提交
type:'post',
contentType:'application/json',
data:JSON.stringify({'name':'jason','csrfmiddlewaretoken':'{{ csrf_token }}'}),
success:function (data) {
alert(data)
}
})
Ajax发送文件
$('#d1').click(function () {
// 如果用ajax发送文件 需要使用内置对象FormData
var formData = new FormData(); // 生成一个内置对象
// 内置对象formdata既可以传普通的键值对,也可以传文件
formData.append('name','jason'); // 普通键值对
formData.append('password','123');
// 传文件
var fileObj = $('#d2')[0].files[0]; // 先获取标签对象 转成原生js对象 通过内置的files方法拿到列表 然后去索引0拿到文件对象
formData.append('myfile',fileObj);
$.ajax({
url:'', // 不写默认朝当前页面所在的url地址提交
type:'post',
// 注意ajax在发送文件的时候 需要你手动指定两个特殊的参数
contentType:false, // 不要用任何编码 使用我formdata自带的编码即可
processData:false, // 浏览器不要处理我的数据 是什么就什么
data:formData,
success:function (data) {
alert(data)
} })
})
注册示例
获取用户输入 后端判断用户输入的内容是否合法
如果不合法前端渲染对应的错误信息
forms组件
1.前端渲染展示页面 获取用户输入 >>> 渲染页面
2.将数据发送给后端进行数据的合法性校验 >>> 数据校验
3.将不合法的提示信息展示给用户看 >>> 展示提示信息 关于数据的校验
1.前端
2.后端
数据的校验前端可以没有,但是后端一定要做!!!
forms组件能够帮你完成上面的三个过程
1.校验数据
forms组件的校验数据的使用
1.定义一个继承forms.Form一个类
from django import forms
class MyForm(forms.Form):
username = forms.CharField(max_length=6) # username最长只能是6位
password = forms.CharField(max_length=8,min_length=3) # password最长8位 最短3位
email = forms.EmailField() # email接受的数据必须符合邮箱格式
2.给forms组件传参数 (字典的显示)
obj = views.MyForm({'username':'egondsb','password':'12','email':'123@qq.com'})
3.查看数据是否完全合法
obj.is_valid()
4.查看所有校验通过的数据
obj.cleaned_data
{'email': '123@qq.com'}
5.查看所有没有通过的数据
obj.errors
"""
{
'username': ['Ensure this value has at most 6 characters (it has 7).'],
'password': ['Ensure this value has at least 3 characters (it has 2).']}
"""
2.渲染标签
forms组件只能帮你渲染 获取用户输入(输入框 选择框 下拉框...)的标签
提交按钮也得自己写
form表单取消前端校验功能
<form action="" method="post" novalidate>
forms组件当前端输入的信息不合法的时候 页面上的数据保留不会刷新 这样方便用户修改
3.展示提示信息
{% for foo in form_obj %}
<p>
{{ foo.label }}{{ foo }}
<span>{{ foo.errors.0 }}</span>
</p>
{% endfor %}
forms组件的钩子函数
局部钩子
全局钩子
# 局部钩子
def clean_username(self):
# 用户名中不能有666
username = self.cleaned_data.get('username')
if '666' in username:
self.add_error('username','光喊666是不行的')
return username
# 全局钩子
def clean(self):
# 获取密码和确认密码比对
password = self.cleaned_data.get('password')
confirm_password = self.cleaned_data.get('confirm_password')
if not password == confirm_password:
self.add_error('confirm_password','两次密码不一致')
return self.cleaned_data
django中测试脚本书写
import os
import sys if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day66.settings")
import django
django.setup()
from app01 import models
print(models.Userinfo.objects.all())