• 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
    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

  • 相关阅读:
    call、apply、bind函数的理解以及手写。
    父div里两个子div(inline-block),为什么两个子div中间会有小缝隙,如何解决?
    手写柯里化
    arguments的理解
    New
    BFC
    useCallBack和useMemo的用法
    观察者模式和发布订阅模式
    grid布局
    Android常见输入法的包名和主类名
  • 原文地址:https://www.cnblogs.com/manger/p/6384901.html
Copyright © 2020-2023  润新知