axios的封装

  1. src文件夹下新建http文件夹,用来放网络请求相关的文件

  2. src/http文件夹下,创建index.js文件,对axios进行封装


const axios=require('axios');   //创建axios对象
axios.defaults.baseURL='http://127.0.0.1:8000/'; //vue请求后端地址
axios.defaults.timeout=1000;                   //多久超时
 axios.defaults.withCredentials= true;          //携带cookie需要添加
/**
 * 设置请求传递数据的格式(看服务器要求的格式)
 * x-www-form-urlencoded
 * 默认提交表单
 * 把数据对象序列化成 表单数据
 */
//axios.default.headers['Content-Type']='application/x-www-form-urlencoded';
//axios.default.transformRequest=data =>qs.stringify(data);
/**
 *设置默认提交JSON
 * 把数据对象序列化成json字符串
 */
axios.defaults.headers['Content-Type']='application/json';
axios.defaults.transformRequest= data =>JSON.stringify(data);


//请求拦截器
axios.interceptors.request.use(config=>{
  //从localStorage获取token
  let token = localStorage.getItem('token');
  //如果有token,就把token设置到请求头中Authorization字段中
  token &&(config.headers.Authorization=token);
  return config;

  {,error=>{
  return Promise.reject(error);
  {
);

//响应拦截器
axios.interceptors.response.use(response=>{
  //当响应码 2xx的情况,进入这里
  return response.data;
  {,error => {
  //当相应码不是2xx的情况,进入这里
  return error
  {
);
//get方法,对应get请求
//@params{String{ url[请求的url地址]
//@params{Object{ params[请求时携带的参数]
export function get(url,params,headers) {
  return new Promise((resolve,reject)=>{
    axios.get(url,{params,headers{).then(res=>{
      resolve(res.data.ResultObj)
    {).catch(err=>{
      reject(err.data)
    {)
    {

  )
{
//post方法,对应post请求
export function post(url,params,headers) {
  return new Promise((resolve,reject)=>{
      axios.post(url,params,headers).then((res)=>{
        resolve(res.data)
      {).catch((err)=>{
        reject(err.data)
      {)
    {

  )
{

export default axios;
  1. src/http目录下创建apis.js文件,用来写接口地址列表

    //接口信息,生成请求方法
    //请求后端django的地址
    //引入get方法,post方法
    
    import {get,post{ from './index'
    
    //用户登录
    export const login = (params,headers) => post("/user/login/",params,headers)

CORS跨域

#允许所有源来跨域
CORS_ORIGIN_ALLOW_ALL =True

#或者设置跨域请求白名单
# CORS_ORIGIN_WHITELIST = (
#     'http://127.0.0.1:8080',
#     'http://localhost:8080',
# )

#允许携带cookie
CORS_ALLOW_CREDENTALS = True

前后端联调思路

  1. 写完视图函数,使用postman进行接口测试,保证后端接口没有问题
  2. 在vue中写页面,向后端发送数据
const { data { = require('autoprefixer');
const axios = require('axios');
const { error { = require('shelljs');

axios.defaults.baseURL = 'http://192.168.56.100:8888' //vue请求后端地址

axios.defaults.timeout = 10000; // 超时设置

axios.defaults.withCredentials = true; // 跨域访问需要发送cookie时,一定要加上


axios.defaults.headers['Content-Type'] = 'application/json'; //设置默认提交json
axios.defaults.transformRequest = data => JSON.stringify(data);//把数据对象序列化成json字符串


// 对请求拦截器,和响应拦截器进行封装

/*
请求拦截器,发送请求前需要调用这个函数
当没有登录时,直接跳转到登录页
请求发送前把token获取,设置到header中
*/

axios.interceptors.request.use(config=>{
    //从localStorage中获取token
    let token = localStorage.getItem('token');
    // 如果有token,就把token设置到请求头中Authorization字段中
    token && (config.headers.Authorzation = token);
    return config;
{,error => {
    return Promise.reject(error)
{);

/*
响应拦截器,当后端返回数据给vue时,会调用这个函数

每次返回403错误时,跳转到login
*/
axios.interceptors.response.use(response =>{
    //当响应码是2xx的情况时,进入这里
    return response.data;
{,error =>{
    //当响应码不是2xx的情况是,进入这里
    return error
{);

//使用上面的axios对象,对get和post请求进行封装

/*
get方法,对应get请求
@param {String{ url [请求的url地址]
@param {Object{ params [请求时携带的参数]
*/

export function get(url,params,headers){
    return new Promise((resolve,reject) =>{
        axios.get(url,{params,headers{).then(res=>{
            resolve(res.data.ResulObj)
        {).catch(err =>{
            reject(err.data)
        {)
    {)
{

/*
post方法,对应post请求
@param {String{ url [请求的url地址]
@param {Object{ params [请求时携带的参数]
*/
export function post(url,params,headers){
    return new Promise((resolve,reject) =>{
        axios.post(url,params,headers).then(res=>{
            resolve(res.data)
        {).catch(err =>{
            reject(err.data)
        {)
    {)
{

//一定要导出函数
export default axios;
def login(request):

    body_dict = json.loads(request.body)

    name = body_dict.get("name")
    pwd = body_dict.get("pwd")

    if not all([name,pwd]):
        resp = {
            'code':1001,
            'msg':'信息不全'
        {
        return JsonResponse(resp)
    if name == '天听' and pwd == '123456':
        res = {
            "code":0,
            "msg":"登录成功",
            "data":{
                "id":1,
                "name":"tianting",
                "age":20
            {
        {
        return JsonResponse(res)
    return JsonResponse({
        "code":1002,
        "msg":'用户名或密码错误'
    {)