django使用ajax报错:“forbidden (CSRF token missing or incorrect.): /user/register/”

报错内容如下:

[22/Jan/2019 03:44:00] "GET / HTTP/1.1" 404 2015
[22/Jan/2019 03:44:11] "GET /user/register/ HTTP/1.1" 200 4308
Forbidden (CSRF token missing or incorrect.): /user/register/
[22/Jan/2019 03:44:25] "GET /user/register/?username=18381665323&pwd=12345678&cpwd=12345678&email=930047011%40qq.com&allow=on HTTP/1.1" 200 4308
[22/Jan/2019 03:44:25] "POST /user/register/ HTTP/1.1" 403 2502
Performing system checks...

在原先的视图view中的函数定义如下:

import re
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render

# Create your views here.

def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    if request.method == 'POST':
        name = request.POST.get('username')
        pwd = request.POST.get('pwd')
        cpwd = request.POST.get('cpwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        print('DATA: ', name, pwd, cpwd, email, allow)
        if pwd != cpwd:
            data = {'code': 1000, 'mag': '两次密码不等'}
            return JsonResponse(data)
        if allow != 'on':
            data = {'code': 1010, 'msg': '请同意协议'}
            return JsonResponse(data)
        if not re.match("^^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$", email):
            data = {'code': 1030, 'msg': '邮箱格式错误'}
            return JsonResponse(data)
        if not all([name, pwd, cpwd, email, allow]):
            data = {'code': 1040, 'msg': '请填写所有信息'}
            return JsonResponse(data)
        if all([name, pwd, cpwd, email, allow]):
            data = {'code': 200, 'msg': 'OK'}
            return JsonResponse(data)

解决办法:在视图view函数之前添加"@csrf_exempt"即可解决问题,修改如下:

import re
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponse, JsonResponse
from django.shortcuts import render

# Create your views here.


@csrf_exempt
def register(request):
    if request.method == 'GET':
        return render(request, 'register.html')
    if request.method == 'POST':
        name = request.POST.get('username')
        pwd = request.POST.get('pwd')
        cpwd = request.POST.get('cpwd')
        email = request.POST.get('email')
        allow = request.POST.get('allow')
        print('DATA: ', name, pwd, cpwd, email, allow)
        if pwd != cpwd:
            data = {'code': 1000, 'mag': '两次密码不等'}
            return JsonResponse(data)
        if allow != 'on':
            data = {'code': 1010, 'msg': '请同意协议'}
            return JsonResponse(data)
        if not re.match("^^[A-Za-z\d]+([-_.][A-Za-z\d]+)*@([A-Za-z\d]+[-.])+[A-Za-z\d]{2,4}$", email):
            data = {'code': 1030, 'msg': '邮箱格式错误'}
            return JsonResponse(data)
        if not all([name, pwd, cpwd, email, allow]):
            data = {'code': 1040, 'msg': '请填写所有信息'}
            return JsonResponse(data)
        if all([name, pwd, cpwd, email, allow]):
            data = {'code': 200, 'msg': 'OK'}
            return JsonResponse(data)

在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐