django的csrf

csrf:跨站請求網站html

 

若是是ajax提交,能夠按照下面的方式處理python

 

  <script src="/static/jq/jquery-3.3.1.js"></script>
    <script src="/static/jq/jquery.cookie.js"></script>
    <script>
        $(function () {
            ajax_buttion()
        })

        function ajax_buttion() {
            $("#btn").bind("click",function () {
                $.ajax(
                    {
                        url:"/test/app1/",
                        type:"post",
                        data:{
                            username:"root",
                            pwd:"admin"
                        },
                        headers:{
                            "X-CSRFToken":$.cookie("csrftoken")
                        },
                        sucess:function (data) {
                            console.log(data)

                        }
                    }


                )

            })
        }
    </script>

  

 

 能夠設置一個全局的設置,而後在$(function){jquery

}中執行函數ajax

 

 

        $(function () {
            ajax_buttion()
            $.ajaxSetup()
        })

  

 

若是是form表單提交,則能夠按照下面的方式處理django

    <form action="/test/app1/" method="post">
        {% csrf_token %}
        <input type="text" name="uname">
        <input type="submit" value="submit">
        <input type="button" value="ajax" id="btn">
    </form>

  

 

而後返回使用render的方式返回cookie

def test(request):
    # int("hahah")
    # print(settings.C)
    print("test------->views",time.time())

    print(request.method)
    print("_".center(100,"-"))
    print(request)
    # return HttpResponse("last_app1")
    return render(request,"test.html")

  

中間件裏csrf默認是全局都生效的,可是若是咱們有需求,好比全局生效,可是我某個函數不須要使用csrf該怎麼辦;或者個人全局不設置csrf,可是對某個視圖函數須要採用csrf,該怎麼辦app

這裏就須要導入2個模塊函數

from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.csrf import csrf_protect

  

而後在視圖函數中使用使用裝飾器來裝飾視圖函數post

下面的例子就是起到全局啓動csrf,可是我這個函數不啓動csrf網站

@csrf_exempt
def test(request):
    # int("hahah")
    # print(settings.C)
    print("test------->views",time.time())

    print(request.method)
    print("_".center(100,"-"))
    print(request)
    # return HttpResponse("last_app1")
    return render(request,"test.html")

  

 下面的例子就是全局不啓用csrf,可是我這個函數不啓動csrf

@csrf_protect
def test(request):
    # int("hahah")
    # print(settings.C)
    print("test------->views",time.time())

    print(request.method)
    print("_".center(100,"-"))
    print(request)
    # return HttpResponse("last_app1")
    return render(request,"test.html")
相關文章
相關標籤/搜索