HarmonyOS鸿蒙Next中各位高手!axios发送post请求时,后端采用Django如何配置CSRF?如何接收前端数据?

HarmonyOS鸿蒙Next中各位高手!axios发送post请求时,后端采用Django如何配置CSRF?如何接收前端数据?

各位高手!axios发送post请求时,后端采用Django。

如何配置CSRF?

如何接收前端发送过来的数据?

请大神指点!感谢

4 回复

在Django框架中,为了确保Web应用的安全性,防止CSRF(Cross-site request forgery)攻击,开发者需要在处理非GET类型的请求时添加一个“X-CSRFToken”令牌。这个令牌是由Django框架生成的,Django会检查每个非GET类型的http请求的headers里面的X-CSRFToken项的值是否和cookie里面保存的值相同,如果不相同或者缺失,就拒绝这个请求,如果相同,说明这次请求是从真实用户发起的。 示例代码如下:

// django框架第一次响应来自某个客户端的请求时,会在服务器端随机生成一个token。
const csrftoken = response.headers['X-CSRFToken']

// 客户端需要把这个token保存。后续每次请求都要带上这个token,
let res: AxiosResponse = await axios.request({
  url: url,
  method: method,
  data: data,
  headers: { 'X-CSRFToken': csrftoken },
})

更多关于HarmonyOS鸿蒙Next中各位高手!axios发送post请求时,后端采用Django如何配置CSRF?如何接收前端数据?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


谢谢!

在HarmonyOS鸿蒙Next中使用axios发送POST请求时,需在请求头添加CSRF token。Django后端需配置CSRF中间件,前端从cookie获取csrftoken并设置在headers的X-CSRFToken字段。后端使用@csrf_exempt装饰器可豁免CSRF验证。接收数据时,Django通过request.POST获取表单数据,request.body处理JSON数据,使用json.loads()解析。确保Django的settings.py中配置了CSRF_TRUSTED_ORIGINS允许鸿蒙应用域名。

在HarmonyOS Next应用中使用axios发送POST请求到Django后端时,CSRF配置与数据接收方法如下:

1. Django后端CSRF配置

  • 确保django.middleware.csrf.CsrfViewMiddleware已启用(默认在settings.py的MIDDLEWARE中)
  • 前端需从Cookie获取CSRF token,在axios请求头中携带:
    // 获取CSRF token(假设Cookie中名为csrftoken)
    const csrfToken = document.cookie.replace(/(?:(?:^|.*;\s*)csrftoken\s*=\s*([^;]*).*$)|^.*$/, "$1");
    
    // axios配置
    axios.post('/your-endpoint/', data, {
      headers: {
        'X-CSRFToken': csrfToken,
        'Content-Type': 'application/json'
      }
    })
    
  • 若使用@csrf_exempt装饰器可局部禁用CSRF(不推荐)

2. Django接收前端数据

  • 在视图函数中通过request.body解析原始数据:
    import json
    from django.http import JsonResponse
    
    def your_view(request):
        if request.method == 'POST':
            data = json.loads(request.body)  # 解析JSON数据
            param1 = data.get('key1')
            param2 = data.get('key2')
            return JsonResponse({'status': 'success'})
    
  • 若前端发送FormData,使用request.POST获取:
    param = request.POST.get('field_name')
    

关键点

  • 确保前端与后端的Content-Type一致(JSON推荐application/json
  • 对于预检请求(OPTIONS),Django需配置CORS中间件处理跨域
  • 生产环境应保持CSRF防护,仅对可信来源开放

按以上配置即可正常处理POST请求及CSRF验证。

回到顶部