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")