django+vue项目搭建,前后端通信打通,

news2024/11/15 18:05:37

文章目录

    • django 环境搭建
      • 1.创建django骨架项目
      • 2.创建应用
      • 3.试着启动项目,验证环境OK
      • 4.基础配置
        • admin.py
        • settings.py
    • 前端项目搭建
      • 1.安装vue-cli
      • 2.创建前端项目
      • 3.创建时候选什么
      • 前端项目结构
      • 页面上呈现的内容是怎么来的?这里只说明vue部分
      • 曲线救国打通vue和django
        • vue适配django
        • django适配vue
        • 第一,想办法把路由配置成从vue项目中的index.html进行关联上
        • 第二,想办法把vue项目内的static文件夹下的静态资源关联上。
      • 打包
      • 通过django服务访问vue的index.html

django 环境搭建

1.创建django骨架项目

django-admin startproject yiyan_webauto

2.创建应用

python manage.py startapp myapp

3.试着启动项目,验证环境OK

python3 manage.py runserver

4.基础配置

admin.py

把数据库的具体表注册到后台来便于管理,改一次后再也不用动

from django.contrib import admin

# Register your models here.
import inspect,sys
from myapp.models import *

cls_members = inspect.getmembers(sys.modules[__name__],inspect.isclass)
for name,cls in cls_members:
    admin.site.register(cls)

settings.py

项目全局配置,初始化配置

**ALLOWED_HOSTS = [‘*’] **

白名单,配置到这里的主机可以访问该服务,*代表所有主机都可以访问我们的django服务

INSTALLED_APPS 应用列表增加自己创建的应用

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp',
]

MIDDLEWARE 中间件列表,添加cors中间件,解决跨域问题

pip install django-cors-headers

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware', #第三方解决跨域头问题的中间件
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
CORS_ORIGIN_ALLOW_ALL = True #加上允许所有跨域

国际化Internationalization

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/shanghai'

前端项目搭建

前后端分离,因为一个人开发,为了方便维护,前端项目直接放在django项目下

1.安装vue-cli

npm install -g @vue/cli@3.12.1

2.创建前端项目

cd django项目的根目录,vue create 项目名

vue create front

以下报错是因为当前目录没有找到package.json ,cd到前端项目根目录front再执行即可

found 23 vulnerabilities (2 low, 16 moderate, 5 high)
  run `npm audit fix` to fix them, or `npm audit` for details
  
D:\myproject\yiyan_webauto
$ npm audit fix
npm ERR! code EAUDITNOPJSON
npm ERR! audit No package.json found: Cannot audit a project without a package.json

npm ERR! A complete log of this run can be found in:
npm ERR!     D:\Program Files\nodejs\node_cache\_logs\2022-03-01T04_21_12_141Z-debug.log

D:\myproject\yiyan_webauto
$ npm audit
npm ERR! code EAUDITNOPJSON
npm ERR! audit No package.json found: Cannot audit a project without a package.json

npm ERR! A complete log of this run can be found in:
npm ERR!     D:\Program Files\nodejs\node_cache\_logs\2022-03-01T04_21_18_162Z-debug.log

3.创建时候选什么

- ? Please pick a preset:  选第二个:自定义生成vue项目。
  default (babel, eslint) 
❯ Manually select features 
- ? Check the features needed for your project: (Press <space> to select, <a> to toggle all, <i> to invert selection) 选择一些插件.
选择bable和router
- Use history mode for router? (Requires proper server setup for index fallback in production) (Y/n) 选n。
- ? Where do you prefer placing config for Babel, PostCSS, ESLint, etc.?  
选package.json
- Save this as a preset for future projects? (y/N)  保存成默认设置
选y,下次创建的时候在第一步会多出这个默认配置的选项,回车直接按照默认配置创建项目,选n,每次创建都会一步步选一遍

前端项目结构

front
  dist 打包生成目录
  	static	来自public/static,static是项目创建后手工创建的文件夹
  		css	手工创建
  			app.xxx.css	来自/src/App.vue里面的style标签的内容
        js
        	about.xxx.js	/src/views/About.vue被webpack打包后的js文件
        		about.xxx.js.map	webpack打包信息
            app.xxx.js		/src/views/Home.vue被webpack打包后的js文件
            	app.xxx.js.map		webpack打包信息
            chunk-vendors.xxx.js
            	chunk-vendors.xxx.js.map	
        	
  node_modules  vue框架需要的依赖包
  public  静态资源,这里有一个index.html 模板,作为合成最终dist/index.html的骨架存在
  src
	assets 存放一些静态文件,现在我们不用这个,之后全部存到public/static下
    components 小型组件存放位置
    	HelloWorld.vue	子组件
    views 大型组件,母体组件存放位置
    	About.vue 母组件
    	Home.vue 母组件,里面引入了子组件HelloWorld.vue,所以在访问Home页面的时候会看到HelloWorld页面的内容
    App.vue 作为所有的.vue的一个主管存在,存放uri(/和/about),里面的样式会影响全局(id=app的div)
    main.js : 作为打包过程必要的主脚本,负责把id=app的div进行填充,里面的代码会影响全局
    router.js: 路由管理器,根据path(App.vue里面的uri)映射具体页面(component:Home),Home就是views文件夹里面的vue母组件Home.vue
  vue.config.js

main.js

import Vue from 'vue'
import App from './App.vue'   # 引入App.vue,取名为App
import router from './router'

Vue.config.productionTip = false

# 把App.vue填充到public/index.html的id=app的div里面
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

页面上呈现的内容是怎么来的?这里只说明vue部分

0 dist是从public复制来的,里面的index有个id=app

1 main.js负责把App.vue挂载到index页面id=app的div里面

2 App.vue里面有<router-view/>,路由/在router.js里映射到Home.vue

3 假如Home里面又加载了components的子组件,那再找到子组件

4 最终看到页面上呈现的内容

曲线救国打通vue和django

vue适配django

public底下手动创建static ,用来存放js/css/图片等资源,让vue打包的时候会把静态文件统一存到这里,然后让django的静态文件从这里取,怎么实现说让vue打包的时候在dist生成static文件夹,在front目录下创建文件vue.config.js,内容为:

module.exports = {
assetsDir:'static'
}

这里需要特别特别说明:旧版本会有vue.config.js,新版本已经没有了

dist vue打包生成的包,django要从dist里面拿到index.html和static的所有静态资源,实际上django就是跟dist里面的index.js交互,而不会管没vue项目的其他内容,
vue项目就没用了么?
当然不是,vue在和后端联调还是用的打包前的,而在django项目,只用打包后的dist

django适配vue

django和vue前后端分离项目,交互流程就是这样:
用户-电脑浏览器-django-dist包 -> vue-cli前端开发用的

打通这个流程要做两个事情

第一,想办法把路由配置成从vue项目中的index.html进行关联上

从前:urls -> views.py -> .html的

现在:urls -> .html

具体操作:

urls.py中:
from django.views.generic import TemplateView
path('index/',TemplateView.as_view(template_name='index.html'))    # 加了这一行,就是把django的index这个uri指向front/dist/index.html页面,而不是再去django的views里面  这一步只是项目搭建阶段,验证django和vue的打通,后续开发,前端直接请求后端域名接口就好了

settings.py中,修改TEMPLATES的DIRS,其他不变:
TEMPLATES = [
    {
        ...
        'DIRS': ['front/dist'], # 指定django模板路径,让django在读取html时从前端项目front的打包目录dist取index.html
        ...
    }

第二,想办法把vue项目内的static文件夹下的静态资源关联上。

settings.py中:
STATICFILES_DIRS=[
    os.path.join(BASE_DIR,"front/dist/static"),
]

打包

进入前端项目根目录front下,执行npm run build

打包完,可以启动django服务,访问看下是不是能访问到vue的页面index.html

通过django服务访问vue的index.html

http://127.0.0.1:8000/index/#/about
在这里插入图片描述

#左边的是django的路由,右边的是vue的路由,自动拼接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/351838.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux软件管理YUM

目录 yum配置文件 创建仓库 yum查询功能 yum安装与升级功能 yum删除功能 yum仓库产生的问题和解决之道 yum与dnf 网络源 YUM就是通过分析RPM的标头数据后&#xff0c;根据各软件的相关性制作出属性依赖时的解决方案&#xff0c;然后可以自动处理软件的依赖属性问题&…

1.1 什么是并发

1.1 什么是并发 并发&#xff1a;指两个或更多独立的活动同时发生。并发在生活中随处可见。我们可以一边走路一边说话&#xff0c;也可以两只手同时做不同的动作。 1.1.1 计算机系统中的并发 当我们提到计算机术语的“并发”&#xff0c;指的是在单个系统里同时执行多个独立…

零入门kubernetes网络实战-15->基于golang编程实现给ns网络命名空间添加额外的网卡

《零入门kubernetes网络实战》视频专栏地址 https://www.ixigua.com/7193641905282875942 本篇文章视频地址(稍后上传) 本篇文章主要是想通过golang编程来实现&#xff0c;为veth pair链接的网络命名空间添加网卡&#xff0c;配置veth pair的IP 即&#xff0c;使用代码创建一…

002 常见量化交易平台使用

常见的量化交易平台&#xff1a;米筐&#xff0c;BigQuant&#xff0c;优矿&#xff0c;聚宽&#xff0c;掘金。 本文简单介绍其中的米筐量化交易平台。米筐支持Python&#xff0c;Java编写交易策略进行回测。 一、平台使用 1. 注册账号 平台网址&#xff1a;米筐量化平台 平…

linux内存申请

一、基本概念 1、页&#xff1a;struct page &#xff0c;如下图所示&#xff0c;x86架构下一般为4K为大小 2、分区&#xff1a;struct zone &#xff0c;如下图所示&#xff0c;x86架构下分为三个区ZONE_DMA,ZONE_NORMAL,ZONE_HIGHMEM 3、ZONE_DMA&#xff0c;一般由于内存…

代码随想录算法训练营第二天 | 977.有序数组的平方 、209.长度最小的子数组 、59.螺旋矩阵II、总结

打卡第二天&#xff0c;认真做了两道题目&#xff0c;顶不住了好困&#xff0c;明天早上练完车回来再重新看看。 今日任务 第一章数组 977.有序数组的平方209.长度最小的子数组59.螺旋矩阵II 977.有序数组的平方 给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每…

知识图谱构建技术综述

摘要 *知识图谱为实现语义化智能搜索以及知识互联打下了基础&#xff0c;。&#xff0c; *随着知识的发展&#xff0c;传统的基于模板和规则构建的知识图谱已经被深度学习所替代。 知识组织得原则中&#xff1a;知识的充分性、有序性和标准化规则。深度学习的效果在很大程度上…

线性神经网络(线性回归)

线性回归 目录线性回归导包生成数据集观察散点图读取数据集初始化模型参数定义模型定义损失函数定义优化算法训练简易实现(pytorch)生成数据集读取数据集定义模型初始化模型参数定义损失函数定义优化算法训练导包 import random import torch from d2l import torch as d2l生成…

微服务相关概念

一、谈谈你对微服务的理解&#xff0c;微服务有哪些优缺点&#xff1f;微服务是由Martin Fowler大师提出的。微服务是一种架构风格&#xff0c;通过将大型的单体应用划分为比较小的服务单元&#xff0c;从而降低整个系统的复杂度。优点&#xff1a;1、服务部署更灵活&#xff1…

Python pickle模块:实现Python对象的持久化存储

Python 中有个序列化过程叫作 pickle&#xff0c;它能够实现任意对象与文本之间的相互转化&#xff0c;也可以实现任意对象与二进制之间的相互转化。也就是说&#xff0c;pickle 可以实现 Python 对象的存储及恢复。值得一提的是&#xff0c;pickle 是 python 语言的一个标准模…

2023美赛A题:受旱灾影响的植物群落

文章目录背景要求服务词汇表背景 不同的植物对压力有不同的反应。例如&#xff0c;草原对干旱非常敏感。干旱以不同的频率和严重程度发生。大量的观察表明&#xff0c;不同物种的数量对植物群落如何在连续多代干旱周期中适应起到了重要作用。在一些仅有一种植物的群落中&#…

Vue基础13之浏览器本地存储、TodoList本地存储、组件自定义事件

Vue基础13浏览器本地存储localStorage 本地存储sessionStorage 会话存储总结TodoList本地存储App.vue组件自定义事件子组件给父组件传值使用props方法App.vueSchool.vue子组件给父组件传值使用组件自定义事件——绑定第一种写法&#xff1a;使用v-on或App.vueStudent.vue第二种…

idea快捷编码:生成for循环、主函数、判空非空、生成单例方法、输出;自定义快捷表达式

前言 idea可根据输入的简单表达式进行识别&#xff0c;快速生成语句 常用的快捷编码&#xff1a;生成for循环、主函数、判空非空、生成单例方法、输出 自定义快捷表达式 博客地址&#xff1a;芒果橙的个人博客 【http://mangocheng.com】 一、idea默认的快捷表达式查看 Editor…

String对象的创建和比较

String类的概述 String类&#xff1a;代表字符串。 Java 程序中的所有字符串字面值&#xff08;如 “abc” &#xff09;都作 为此类的实例实现。 String是JDK中内置的一个类&#xff1a;java.lang.string 。 String表示字符串类型&#xff0c;属于引用数据类型&#xff0c;不…

饲养员喂养动物-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-2】饲养员喂养动物 记得 关注&#xff0c;收藏&#xff0c;评论哦&#xff0c;作者将持续更新。。。。 【案例目标】 案例描述 饲养员在给动物喂食时&#xff0c;给不同的动物喂不同的食物&#xff0c;而且在每次喂食时&#xff0c;动物都会发出欢快的叫声。例如&…

Native扩展开发的一般流程(类似开发一个插件)

文章目录大致开发流程1、编写对应的java类服务2、将jar包放到对应位置3、配置文件中进行服务配置4、在代码中调用5、如何查看服务调用成功大致开发流程 1、编写服务&#xff0c;打包为jar包2、将jar包放到指定的位置3、在配置文件中进行配置&#xff0c;调用对应的服务 1、编…

linux 之 ps命令介绍

哈喽&#xff0c;大家好&#xff0c;我是有勇气的牛排&#xff08;全网同名&#xff09;&#x1f42e; 有问题的小伙伴欢迎在文末评论&#xff0c;点赞、收藏是对我最大的支持&#xff01;&#xff01;&#xff01;。 前言 如过想实现对进程监控&#xff0c;就需要使用到ps命…

macOS 13.3 Beta (22E5219e)发布

系统介绍2 月 17 日消息&#xff0c;苹果今日向 Mac 电脑用户推送了 macOS 13.3 开发者预览版 Beta 更新&#xff08;内部版本号&#xff1a;22E5219e&#xff09;&#xff0c;本次更新距离上次发布隔了 37 天。macOS Ventura 带来了台前调度、连续互通相机、FaceTime 通话接力…

Vue3+Lodash:2023年了,我依然在使用Lodash

目录 前言&#xff1a; 为什么选择lodash? 看看lodash的地位 如何使用lodash&#xff1f; 1.安装lodash 2.引入lodash 我们到底还需不需要lodash&#xff1f; 再举一些例子 前言&#xff1a; 前两天&#xff0c;在水群的时候&#xff0c;发现居然有人不知lodash&#…

OpenCV-PyQT项目实战(6)项目案例02:滚动条应用

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …