python自动开发之第二十四天(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请求" οnclick="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

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/willpower-chen/p/6340706.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值