総ジャンゴ

サイクル1.django要求
誰もが私を描くために持っている
ウェブサービスゲートウェイインターフェース
WSGIプロトコル
wsgiref(Djangoは手頃な量が付属して非常に高い同時実行ではありません一般的に地元のテストのために使用指します)
(使用後のオンラインDjangoプロジェクト)uwsgi
WERKZEUG (フラスコを使用)
WSGIプロトコル機能モジュール達成するために
PSを:
HTTP形式にデータ処理要求ときに
話す要求データを取ると、データ線の後端部に詰めて送信されるHTTP再送

    django中间件
        django默认有七个中间件(Csrf...,Authticate...,Session...)
        
        django支持用户自定义中间件
            暴露给用户五个可以自定义的方法
                1.process_request  请求来的时候
                2.process_response  响应走的时候
                3.process_view  路由匹配成功即将执行视图函数之前
                4.process_template_response  视图函数中返回了render对象
                5.process_exception  视图函数报错之后 报错信息会交给当前方法
            
            如何自定义中间件
                1.在某个应用下创建一个任意名称的py文件
                2.写一个类继承MiddlewareMixin
                3.在该类中书写上述五个可以自定义的方法
                4.在settings配置文件将你写的中间件添加到Middleware配置项中
                    ps:格式应用名.py文件名.类名 (不会自动提示 书写的时候要格外注意)
    
    CBV源码
        1.类继承了View
        2.路由自定义类名.as_view()  绑定给类的方法  书写完毕立刻执行
        3.as_view()里面的定义了一个view闭包函数 并将view函数的内存地址返回出来 也就意味着CBV的路由本质还是FBV
        4.一旦路由匹配上 执行闭包函数view  生成一个自定义类的对象 返回了对象.dispatch方法
        5.注意在设计面向对象关系查找的时候 一定要牢记 当前的self到底是谁  在我们这里调用的就是View里面的disptch方法
        6.首先判断当前请求方法在不在django提供默认的八个请求(get,post,put,delete,oprions...)内 如果不在直接报错
        7.如果请求方式存在  利用反射拿到当前对象里面对应的属性或者方法
        8.执行该方法(该方法返回上面 浏览器就能收到上面)
        ps:django必会三板斧返回的都是HttpReponse对象
        
    
    ContentType 前后端传输数据编码格式
        1.urlencode
            1.它是form表单和ajax默认提交数据的编码格式
                数据格式:username=jason&password=123
            2.不能传输文件
            3.django只会将符合urlencoded格式的数据处理并放入request.POST中
        2.formdata
            1.它可以支持传文件(既可以传文件也支持普通的键值对上传)
                1.在form表单中 通过修改form标签的enctype将默认的编码格式修改为formdata
                
        3.application/json
            1.传输的是json格式的数据
        ps:
            1.编码格式应该与数据类型一致 不能骗人家
            2.浏览器查看编码格式 右键检查 点击network 查看requestheaders里面的contentType参数  原生的数据view source
    
    
    
    Ajax两大特点
        1.异步提交
        2.局部刷新
        
        
        同步异步:描述的是任务的提交方式
        
        阻塞非阻塞:描述的是程序的运行状态
            程序的运行状态
                1.就绪态
                2.运行态
                3.阻塞态
    
    Ajax传json格式数据
        $.ajax({
            url:'',
            type:'post',
            data:JSON.stringify({'username':'jason'}),
            contentType:'application/json',
            success:function(data){
                ...
            }
        
        })
    Ajax传文件 需要利用内置对象FormData(既可以传文件也支持普通的键值对上传)
        var formData = new FormData();
        formData.append('username','jason');
        # 获取文件标签内的文件数据
        var fileObj = $('#myfile')[0].files[0];
        formData.append('myfile',fileObj);
        $.ajax({
            url:'',
            type:'post',
            data:formData,
            
            # 如果利用内置对象传数据
            contentType:false,
            processData:false,
            
            success:function(data){
                alert(data)
            }
        
        })
        
        
        
forms组件
    1.渲染标签
    2.校验数据
    3.展示错误信息
    
    使用
        1.自定义一个继承forms.Form的类
            from django import forms
            class MyForm(forms.Form):
                username = forms.Charfield(max_length=6)
        2.传入字典即可校验数据
            1.判断数据是否合法 is_valid()
            2.查看校验通过的数据 cleaned_data
            3.查看校验未通过并且未通过的原因 errors
            
        
        3.渲染标签 forms组件只能帮你渲染获取用户输入的标签
            1.{{ form_obj.as_p }}
            2.{{ form_obj.username.label }}{{ form_obj.username }}
            3.{% for foo in form_obj %}
                <p>
                    {{ foo.label }}
                    {{ foo }}
                    <span>{{ foo.errors.0 }}</span>
                </p>
              {% endfor %}
        
        钩子函数(二次校验)
            局部钩子
                def clean_字段名(self):
                    # 比如 用户名是否存在/合法
                    ...
            全局钩子
                def clean(self):
                    # 比如密码与确认密码之间的校验
                    ...
            
        forms组件补充
            1.可以写正则
            2.widgets参数
                TextInput
                PassInput(attrs={'class':'form-control c1'})
            3.其他字段(参考博客)

おすすめ

転載: www.cnblogs.com/huanghongzheng/p/11234423.html