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

Django(七)的更多相关文章

  1. Django+七牛上传+查看+下载文件相关函数,新整理未完全测试

    M class File(models.Model): # 文档模型 name = models.CharField(max_length=255) staff = models.ForeignKey ...

  2. Django (七) token&静态文件&媒体文件

    token&静态文件&媒体文件 1. token 1. 会话技术 2. 服务端会话技术 3. 它实际上就是手动实现的session 4. 实现token 4.1 在models.py中 ...

  3. Django 多页面间参数传递用session方法(Django七)

    由一个页面跳转至另一个页面可以有render中携带几个参数,如下:照上例便在跳转到homepage页面后使用传递的四个参数了 但问题是如何在由homepage跳转到其他页面时仍可以使用这四个参数呢?我 ...

  4. 安装Django时解决的问题-mysql及访问(附pycharm激活)

    1.做些软链接和virtualenv的基本使用: ln -s /data/linkdood/im/vrv/python36/bin/python3.6 /usr/bin/python3 ln -s / ...

  5. Django+xadmin打造在线教育平台(七)

    十.授课教师 10.1.讲师列表页 拷贝teacher-list.html和teacher-detail.html到templates目录下 先改teacher-list.html,同样继承base. ...

  6. Django 系列博客(七)

    Django 系列博客(七) 前言 本篇博客介绍 Django 中的视图层中的相关参数,HttpRequest 对象.HttpResponse 对象.JsonResponse,以及视图层的两种响应方式 ...

  7. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  8. {Django基础七之Ajax} 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解)

    Django基础七之Ajax 本节目录 一 Ajax简介 二 Ajax使用 三 Ajax请求设置csrf_token 四 关于json 五 补充一个SweetAlert插件(了解) 一 Ajax简介 ...

  9. 第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装

    第三百七十九节,Django+Xadmin打造上线标准的在线教育平台—xadmin的安装 xadmin介绍 xadmin是基于Django的admin开发的更完善的后台管理系统,页面基于Bootstr ...

  10. 第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍

    第三百七十八节,Django+Xadmin打造上线标准的在线教育平台—django自带的admin后台管理介绍 配置django的admin数据库管理后台 首先urls.py配置数据库后台路由映射,一 ...

随机推荐

  1. 如何运行开源的React Native项目?

    如何运行开源的RN项目? 1.下载 2.解压 3.配置本地sdk位置 sdk.dir = D\:\\Android\\SDK 4.调整gradle版本 apply plugin: "com. ...

  2. elasticsearch 索引搜索和索引性能优化配置——思路:去掉不必要的数据,减小数据的磁盘空间占用,同时提升性能

    压缩配置: index.codec: best_compression 合并索引: curl –XPOST localhost:9200/hec_test3/_forcemerge’ 配置mappin ...

  3. 【转】iOS开发-关闭/收起键盘方法总结

    原文网址:http://www.cnblogs.com/GarveyCalvin/p/4167759.html 前言:作为IOS开发人员,需要经常和表单打交道.因此我对收起键盘的方法作了下总结,IOS ...

  4. bzoj1123 [POI2008]BLO——求割点子树相乘

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1123 思路倒是有的,不就是个乘法原理吗,可是不会写...代码能力... 写了一堆麻麻烦烦乱七 ...

  5. npm搭建React项目

    转自:http://blog.csdn.net/u012859720/article/details/70597119 要想使用npm,首先安装Node.js 一.安装全局包 $ npm instal ...

  6. Dubbo的@Reference和@Service说明---1Reference用在消费者2Service用在提供者【import com.alibaba.dubbo.config.annotation.Service;】

    @Reference 用在消费端,表明使用的是服务端的什么服务@RestControllerpublic class RemoteUserController { @Reference(version ...

  7. php获取当地时间 time zone

      PHP5.2.4之前的版本无需设置时区.下面是修改PHP时区的三个办法. 1.修改PHP.ini这个文件 找到date.timezone这行,去掉前面的分号,改成: Java代码 date.tim ...

  8. mysql自动添加时间的方法

    时间添加方法,可以在编辑数据时方便时间选择输入: 将时间列DataType设为timestamp,设定其默认值为CURRENT_TIMESTAMP. 这样每次插入一条新纪录,数据库会自动在时间段存储当 ...

  9. 【Oracle】redo与undo

    一 .redo(重做信息) 是Oracle在线(或归档)重做日志文件中记录的信息,万一出现失败时可以利用这些数据来“重放”(或重做)事务.Oracle中记录这些信息的文件叫做redo log file ...

  10. PostgreSQL的HA解决方案-1主从和备份(master/slave and backup)

    一.部署说明 1.1 实施环境 本文档实验环境如下: PGSQL主机: 192.168.1.45 PGSQL备机: 192.168.1.50 软件和系统版本 Pgsql 版本: pgsql 9.2.4 ...