一、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

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

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

伪ajax

  4、使用时机

    如果发送的是【普通数据】 -> 使用顺序 jQuery,原生(XMLHttpRequest),iframe

最新文章

  1. Mittag-Leffler定理,Weierstrass因子分解定理和插值定理
  2. iOS UIAlertController
  3. c++类的声明和对象的定义---10
  4. xftp的使用
  5. 解决iPhone上select时常失去焦点,随意跳到下一个输入框,影响用户操作
  6. 浏览器助手,请求拦截,后台模拟键鼠操作,页内嵌入JS
  7. MFC程序的启动过程——先全局对象theApp(第一入口),后WinMain(真正入口),会引爆pApp-&gt;InitInstance从而创建窗口(程序员入口)
  8. 【解决】Maven myeclipse出现Could not find the main class
  9. Xcode can&#39;t verify the identity of the server
  10. Swing 显示良好JPanel保存为图片
  11. Java经典编程题50道之三十五
  12. MyBatis基础学习笔记--自总结
  13. MySQL更改命令行默认分隔符
  14. 红米Note5进入全网通5.0时代,其实是高通已经落后了!
  15. HEVC与VP9之间的对比
  16. java输入输出流(I/O)总结
  17. python五十六课——正则表达式(常用函数之search())
  18. swift class的虚函数表、扩展、@objc修饰、虚函数的派发方式研究
  19. [转]redis主从配置及主从切换
  20. memcached缓存基本概念

热门文章

  1. SVM最通俗的解读
  2. leetcode数学相关
  3. vue.js的第一个程序
  4. .Net Core项目上Azure Docker云
  5. 强迫症!一行代码拿到url特定query的值
  6. 汇编程序10:计算长度为C字节的数据和
  7. Djnago进阶
  8. LeetCode Weekly Contest 28
  9. 5.30获取openid和createTime--mybatis自动生成接口和映射【这里需要自定义】
  10. js手机移动端选择插件 mobileSelect.js