Django(七)
一、ModelForm操作及验证
1、class Meta:class Meta:
#注意以下字段不能加逗号
model = models.UserInfo
#这里的all代指所用的字段,也可以是一个列表,里面是model中的字段
fields = '__all__'
# fields = ['username','user_type']
#exclude排除某一字段
# exclude = ['user_type']
#提示信息labels
labels = {
'username': '用户名',
'email':'邮箱',
'user_type':'用户类型'
}
#提示信息
help_texts = {
'username':'请输入用户名'
}
#自定义插件
widgets = {
'username':Fwidgets.Textarea(attrs={'class':'c1'})
}
#自定义错误信息
error_messages = {
#整体错误信息
'__all__':'...',
#每个字段错误信息
'username':{
'required':'用户名不能为空',
},
'email':{
'required':'邮箱不能为空',
'invalid':'邮箱格式不正确',
},
}
#字段正则表达式的修改
field_classes = {
#这里用的form的字段,只能填类
'email':Ffields.URLField
}
#字段本地化,注意settings里要做相应的配置
# localized_fields = ('ctime',)
如:
数据库中
2016
-
12
-
27
04
:
10
:
57
setting中的配置
TIME_ZONE
=
'Asia/Shanghai'
USE_TZ
=
True
则显示:
2016
-
12
-
27
12
:
10
:
57
2、ModelForm验证
ModelForm-->BaseModelForm-->BaseForm(is_valid,errors等方法)
3、添加数据
def index(request):
if request.method == 'GET':
obj = UserInfoModelForm()
return render(request,'index.html',{'obj':obj})
elif request.method == 'POST':
obj = UserInfoModelForm(request.POST)
#添加数据
# models.UserInfo.objects.create(**obj.cleaned_data)
#更新数据
# models.UserInfo.objects.filter().update(**obj.cleaned_data)
#自动添加数据
if obj.is_valid():
obj.save()
#obj.save()可以拆分成以下3个部分
instance = obj.save(False)
#只会保存当前这个类,而不会添加m2m
instance.save()
#保存m2m
obj.save_m2m
二、Ajax请求
1、原生ajax
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text"/> <input type="button" value="Ajax1" onclick="Ajax1();" /> <script type="text/javascript" src="/static/jquery-1.12.4.js"></script> <script> //优化原生ajax请求,做到不同浏览器的兼容 function getXHR(){ var xhr = null; if(XMLHttpRequest){ xhr = new XMLHttpRequest(); }else{ xhr = new ActiveXObject("Microsoft.XMLHTTP"); } return xhr; } function Ajax1(){ var xhr = getXHR(); //var xhr = new XMLHttpRequest(); xhr.open('POST', '/ajax_json/',true); xhr.onreadystatechange = function(){ if(xhr.readyState == 4){ // 这里的数值等于4,表示数据接收完毕 //获取返回值 var obj = JSON.parse(xhr.responseText); console.log(obj); } }; {# xhr.setRequestHeader('k1','v1');#} //加上请求头,后台需要解析才能接收到数据 xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset-UTF-8'); xhr.send("name=root;pwd=123"); } </script> </body> </html> ajax.html
def ajax(request):
return render(request, 'ajax.html')
def ajax_json(request):
import time
# time.sleep(3)
print(request.POST)
ret = {'code': True, 'data': request.POST.get('username')}
import json
return HttpResponse(json.dumps(ret))
views
2、jquery的ajax
$.ajax()
3、伪ajax(基于iframe标签)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- <input type="text" id="url" /> <input type="button" value="发送Iframe请求" onclick="iframeRequest();" /> <iframe id="ifm" src="http://www.baidu.com"></iframe> --> <form action="/ajax_json/" method="POST" target="ifm1"> <iframe id="ifm1" name="ifm1" ></iframe> <input type="text" name="username" /> <input type="text" name="email" /> <input type="submit" onclick="sumitForm();" value="Form提交"/> </form> <script type="text/javascript" src="/static/jquery-1.12.4.js"></script> <script> /* function iframeRequest() { var url = $('#url').val(); $('#ifm').attr('src',url); } */ </script> </body> </html> 伪ajax
4、使用时机
如果发送的是【普通数据】 -> 使用顺序 jQuery,原生(XMLHttpRequest),iframe