SpringBoot&Django后端返回json和前后端分离跨域问题的解决

一. 前后端分离解决跨域

1.1 问题描述

关于跨域报错提示:No 'Access-Control-Allow-Origin'

原因:当前端和后端不属于同源策略就会访问不到数据
在这里插入图片描述

1.2 后端SpringBoot框架下解决方式之一

使用@CrossOrigin这个注解在controller类中使用
在这里插入图片描述

1.3 后端Django框架下解决方式之一

1、安装django-cors-headers

pip install django-cors-headers

2、.配置settings.py文件
(a) INSTALLED_APPS里添加“corsheaders
(b)MIDDLEWARE_CLASSES添加配置 'corsheaders.middleware.CorsMiddleware',
(c)底部添加

CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = ()

CORS_ALLOW_METHODS = (
    'DELETE',
    'GET',
    'OPTIONS',
    'PATCH',
    'POST',
    'PUT',
    'VIEW',
)

CORS_ALLOW_HEADERS = (
    'accept',
    'accept-encoding',
    'authorization',
    'content-type',
    'dnt',
    'origin',
    'user-agent',
    'x-csrftoken',
    'x-requested-with',
)

截图如下
在这里插入图片描述
在这里插入图片描述

二. 后端返回json源码:

2.1 SpringBoot框架下java实现json

代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping(value = "DbService")
@CrossOrigin
public class Dblihui {
    
    

    @Autowired
    private JdbcTemplate jt;

    @ResponseBody
    @RequestMapping(value = "/getCustName", method = RequestMethod.GET)
    public List getSum() {
    
    
        String sql = "select distinct cust_name from pon_zwzx_wang order by cust_name";
        List list = jt.queryForList(sql);
        return list;
    }
}

2.2 Django框架下python实现json

代码如下:

from django.db import models


class BossBoss(models.Model):
    acc_num = models.CharField(max_length=20)
    prod_id = models.CharField(max_length=10)
    prod_name = models.CharField(max_length=20)
    owner_cust_id = models.CharField(max_length=19)
    owner_cust_name = models.CharField(max_length=30)
    address_desc = models.CharField(max_length=60)
    order_item_id = models.CharField(max_length=19)
    create_date = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'boss_boss'
# Create your views here.
from django.http import JsonResponse
from zqlx_api.models import BossBoss


def get_boss(request):
    boss = BossBoss.objects.all()
    data = []
    for b in boss:
        dic = {
    
    'owner_cust_id': b.owner_cust_id, 'acc_num': b.acc_num}
        data.append(dic)
    print(data)
    return JsonResponse(data, safe=False)
def list(request):
    result_set = models.users.objects.all().values('a_id', 'name', 'create_time')
 
    data_list = result_set[:]  # queryset转为list
    print(type(list(data_list)))
    data = list(data_list)
    resp = {
    
    'code': '100', 'message': '查询成功' , "data": data}
    print(json.dumps(resp, cls=CJsonEncoder))
    return HttpResponse(json.dumps(resp, cls=CJsonEncoder), content_type="application/json")
 
class CJsonEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj, datetime.date):
            return obj.strftime('%Y-%m-%d')
        else:
           return json.JSONEncoder.default(self, obj)

猜你喜欢

转载自blog.csdn.net/qq_35911309/article/details/111220156