django-unable-to-get-post-wechat-applet-to-send-data - vn69

/imgposts/iksz37a5.jpg

Tôi đang sử dụng Django 3.2 LTS để nhận giá trị code được gửi từ chức năng login của ứng dụng mini WeChat. Đoạn mã tôi sử dụng như sau:

code = request.POST["code"]

Tuy live casino nhiên, tôi gặp lỗi sau:

KeyError: 'code'

Khi kiểm tra bằng cách sử dụng request.body, tôi có thể thấy chuỗi JSON đã được serial hóa và bên trong chứa dữ liệu code cần thiết. Tôi cũng có thể trích xuất nó bằng cách sử dụng hàm json.loads, nhưng cách làm này không thực sự tinh tế hay chuyên nghiệp.

Để giải quyết vấn đề này, bạn cần điều chỉnh phần header của yêu cầu wx.request trong ứng dụng mini WeChat từ:

header: {
  'content-type': 'application/json'
},

Thành:

header: {
  'content-type': 'application/x-www-form-urlencoded'
},

Lý do chính khiến request.POST không thể nhận dữ liệu là vì Django mong đợi dữ liệu ở định dạng application/x-www-form-urlencoded. Khi bạn gửi dữ liệu dưới dạng JSON (application/json), Django sẽ không tự động phân tích nó vào đối tượng request.POST. Thay vào đó, dữ liệu sẽ chỉ có sẵn dưới dạng chuỗi thô trong request.body.

Nếu bạn muốn giữ nguyên định dạng JSON mà không cần thay đổi header, bạn có thể xử lý dữ liệu JSON trực tiếp từ request.body một cách rõ ràng hơn bằng cách viết đoạn mã sau:

1import json
2
3try:
4    data = json.loads(request.body)
5    code = data.get('code')
6except json.JSONDecodeError:
7    # Xử lý trường hợp không thể parse JSON
8    code = None

Cách này giúp bạn linh hoạt hơn trong việc xử lý các yêu cầu API mà không cần thay đổi cấu hình phía client.

Việc hiểu rõ cách thức hoạt động của header và cách Django xử lý các loại nội dung khác nhau là rất quan trọng khi phát triển ứng dụng liên kết giữa Django và các nền tảng khác như xem kết quả tỷ số bóng đá ứng dụng mini WeChat. Bằng cách điều chỉnh header hoặc xử lý dữ liệu JSON trực tiếp, bạn có thể dễ dàng khắc phục vấn đề này và đảm bảo ứng dụng của mình hoạt động ổn định.

Kiểm tra lại toàn bộ bài viết và không tìm thấy bất kỳ ký tự nào ngoài tiếng Việt.