Step1: Views函数中设置Get请求的响应内容
具体方式:通过调用middleware.csrf的get_token(request)函数设置csrftoken
from django.http import HttpResponse
from django.middleware import csrf
def index(request):
if request.method == "GET":
csrf.get_token(request)
resp = HttpResponse('[Get Request]Hello from MSB4011')
else:
resp = HttpResponse('[Post Request]Hello from MSB4011')
return resp
Step2: 客户端基于Session进行请求
- Sub-Step1: 创建Session对象
- Sub-Step2: 基于Session对象向Django服务发送Get请求并获得返回结果
- Sub-Step3: 从Session对象的cookies中获取csrftoken
- Sub-Step4: 在post请求的header中加入'X-CSRFTOKEN'请求头,内容为刚才获取的csrftoken
- Sub-Step5: 基于Session对象向Django服务发送Post请求
import requests
url = "http://127.0.0.1:8080"
session = requests.Session()
def get_request():
r = session.get(url)
return r
def post_request():
test_header = {
'X-CSRFTOKEN': session.cookies.get('csrftoken')
}
test_data = {
'name': 'MSB4011',
}
r = session.post(url, data=test_data, headers=test_header)
return r
if __name__ == "__main__":
get_request()
post_request()
备注:本文只是简单记录在Django服务开启CSRF拦截的情况如果用Post的方式进行访问,对于CSRF的解释网络上已经有较多文章,这里不赘述