vue+django+axios前后端分离项目实战经验

前提:本项目使用虚拟环境已经配置好,默认全都配置了django环境

前言

跨域的定义可以从广义和狭义两个角度来解释:

广义定义

跨域是指一个域下的文档或脚本试图去请求另一个域下的资源。这种跨域请求不仅仅局限于浏览器环境,也可能出现在其他客户端或服务器之间的通信中。在广义上,跨域是不同系统或不同应用之间资源共享和交互的一种表现。

狭义定义

狭义上的跨域特指浏览器环境下,由于浏览器的同源策略限制,一个域名下的网页无法直接访问另一个域名下的资源。同源策略是浏览器的一种安全策略,它要求如果两个资源的协议、域名、端口三者中有任何一个不同,那么这两个资源就处于不同的源,它们之间的请求就会受到浏览器的限制,这就是跨域问题。

具体来说,当一个网页(如A页面)尝试通过AJAX等方式请求另一个域名(如B域名)下的资源时,如果A页面和B域名不满足同源策略的要求(即协议、域名、端口三者完全相同),那么浏览器就会阻止这次请求,从而引发跨域问题。

跨域问题的解决方案

针对跨域问题,有多种解决方案,包括但不限于:

  1. JSONP:一种非官方的跨域数据交互协议,它允许在服务器端集成Script标签返回至客户端,通过script标签没有跨域限制的“漏洞”来实现跨域请求。但JSONP只支持GET请求,且存在安全风险。

  2. CORS(跨源资源共享):一种基于HTTP头的机制,通过服务器设置相应的HTTP头信息来允许或拒绝来自不同源的请求。CORS是现代浏览器支持的一种跨域解决方案,它支持GET、POST等多种请求方式,并且相对安全。

  3. 代理服务器:通过在客户端和服务器之间设置一个代理服务器,将跨域请求转发给代理服务器,由代理服务器向目标服务器发起请求,并将响应结果返回给客户端。这种方式可以绕过浏览器的同源策略限制,但会增加系统的复杂性和延迟。

  4. 修改document.domain:对于主域相同但子域不同的跨域请求,可以通过修改页面的document.domain属性来使两个页面处于同一源下,从而解决跨域问题。但这种方法只适用于父子window之间的通信,且有一定的限制和兼容性问题。

    实战

  1. 后端创建django项目

    找一个文件夹,进入cmd使用命令创建一个django项目

    django-admin startproject +项目名

         接下来用pycharm打开这个项目,终端使用命令创建应用

  python manage.py startapp +应用名

         创建好后的文件结构应为:

(项目文件结构)

        在setting.py中注册应用

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "app"#刚创建的应用在这里注册
]

        输入命令测试项目app是否能运行

python manage.py
 

2.vue前端使用axios连接后端项目

解决ajax跨域问题:(两种解决方法,普遍用第二种,这里介绍第二种)

1、jsonp

2、django-cors-headers

下载django-cors-headers

pip install django-cors-headers

在setting.py文件中注册

INSTALLED_APPS = [
    "django.contrib.admin",
    "django.contrib.auth",
    "django.contrib.contenttypes",
    "django.contrib.sessions",
    "django.contrib.messages",
    "django.contrib.staticfiles",
    "app"#刚创建的应用在这里注册,
    "corsheaders"#跨域注册
]

添加corsheaders中间件

MIDDLEWARE = [
    "django.middleware.security.SecurityMiddleware",
    "django.contrib.sessions.middleware.SessionMiddleware",
    "django.middleware.common.CommonMiddleware",
    'corsheaders.middleware.CorsMiddleware',#中间件,必须在这个django.middleware.csrf.CsrfViewMiddleware之前
    "django.middleware.csrf.CsrfViewMiddleware",
    "django.contrib.auth.middleware.AuthenticationMiddleware",
    "django.contrib.messages.middleware.MessageMiddleware",
    "django.middleware.clickjacking.XFrameOptionsMiddleware",
]

在setting.py文件的最后添加CORS_ORIGIN_ALLOW_ALL = True允许所有域名访问(只适合测试,实际开发不适用),实际开发可以使用CORS_ALLOWED_ORIGINS = []设置白名单配置允许跨域的域名/IP

#配置cors的策略
CORS_ORIGIN_ALLOW_ALL = True

编写应用视图函数views.py测试前后端连接

from django.shortcuts import HttpResponse
​
def index(request):
    return  HttpResponse("测试")
 

在urls.py文件下配置路由,导入刚才编写的views视图函数,到这里后端配置已经结束

from django.contrib import admin
from django.urls import path
from app.views import index#导入视图函数
​
urlpatterns = [
    path("admin/", admin.site.urls),
    path("index/", index),#视图路由
]

注意:部分同学在导入应用时会报错,一直提示找不到这个模块,但是不会影响运行,可以直接运行,例如下图

解决方法:但是看着爆红心里确实不舒服,可以这么设置,将项目根目录设置为源目录即可,例如下图,报错完美解决

3. 配置前端vue项目

导入vue.js

导入axios,也可以下载到本地,这里使用cdn引用

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>

创建message变量接收后端传递的data,并且渲染到页面上,在methods中创建一个方法gettest(),实现axios请求,在mounted中实现自动挂载

<div id="app">
        {{message}}
    </div>
data:{
            message:''
        },
        methods:{
            //方法没有缓存,每次调用都会执行
            gettest(){
                axios.get('http://127.0.0.1:8000/index/')//连接后端编写好的路由
                .then(res=>{
                    this.message=res.data//将后端返回的数据赋值给message
                })
                .catch(err=>{
                    console.log(err)//如果连接失败,打印错误信息
                })
            }
              mounted(){
            this.gettest()
        }

启动调试(最好在模拟服务器上打开,直接运行也行,这里使用liveserver调试)

获得后端返回的数据渲染在页面上,后端显示状态码为200,前后端连接成功

Python是一种流行的编程语言,有非常丰富的库和框架可供使用。而Django是一个基于Python的开发框架,用于快速搭建Web应用程序。Vue是一种流行的JavaScript框架,用于构建用户界面。 当我们要搭建一个前后端分离的项目时,可以使用Python的Django框架和Vue框架来实现。下面是大致的步骤: 1. 对于后端,我们可以使用Django框架来搭建RESTful API。首先,创建一个新的Django项目并设置好相关配置。然后,定义数据模型和数据库表,可以使用Django的ORM(对象关系映射)来简化数据库操作。接下来,创建视图函数来处理不同的API请求,可以通过序列化器将模型数据转换为JSON格式进行传输。最后,设置URL路由映射和权限控制,确保API的安全性和可访问性。 2. 对于前端,我们可以使用Vue框架来构建用户界面。首先,创建一个新的Vue项目并安装所需的依赖项。然后,创建组件来管理不同的页面和功能模块。在组件中,可以使用Vue的数据绑定和计算属性等功能来简化数据处理和状态管理。同时,可以使用Vue Router来管理页面之间的导航和路由,以及使用axios库来发送API请求和接收响应。 3. 在前后端之间进行通信时,前端通过axios发送HTTP请求到后端的API接口,后端处理请求并返回相应的数据。前端可以根据接口的返回结果来更新界面和展示数据。 总的来说,使用Python的Django框架和Vue框架可以很好地实现前后端分离的项目。Django提供了强大的后端支持,可以快速搭建API接口,而Vue框架则提供了便捷的前端开发环境,可以轻松构建用户界面。通过这种搭配,我们可以高效地开发出功能完善、交互流畅的Web应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值