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请求" 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

  


原文地址:https://www.cnblogs.com/willpower-chen/p/6340706.html