django+vue項目搭建實現(xiàn)前后端通信
django 環(huán)境搭建
1.創(chuàng)建django骨架項目
django-admin startproject yiyan_webauto
2.創(chuàng)建應(yīng)用
python manage.py startapp myapp
3.試著啟動項目,驗證環(huán)境OK
python3 manage.py runserver
4.基礎(chǔ)配置
admin.py
把數(shù)據(jù)庫的具體表注冊到后臺來便于管理,改一次后再也不用動
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 = [‘*’] **
白名單,配置到這里的主機可以訪問該服務(wù),*代表所有主機都可以訪問我們的django服務(wù)
INSTALLED_APPS 應(yīng)用列表增加自己創(chuàng)建的應(yīng)用
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'
前端項目搭建
前后端分離,因為一個人開發(fā),為了方便維護(hù),前端項目直接放在django項目下
1.安裝vue-cli
npm install -g @vue/cli@3.12.1
2.創(chuàng)建前端項目
cd django項目的根目錄,vue create 項目名
vue create front
以下報錯是因為當(dāng)前目錄沒有找到package.json ,cd到前端項目根目錄front再執(zhí)行即可
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.jsonnpm 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.logD:\myproject\yiyan_webauto
$ npm audit
npm ERR! code EAUDITNOPJSON
npm ERR! audit No package.json found: Cannot audit a project without a package.jsonnpm 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.創(chuàng)建時候選什么
- ? 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) 保存成默認(rèn)設(shè)置
選y,下次創(chuàng)建的時候在第一步會多出這個默認(rèn)配置的選項,回車直接按照默認(rèn)配置創(chuàng)建項目,選n,每次創(chuàng)建都會一步步選一遍
前端項目結(jié)構(gòu)
front dist 打包生成目錄 static 來自public/static,static是項目創(chuàng)建后手工創(chuàng)建的文件夾 css 手工創(chuàng)建 app.xxx.css 來自/src/App.vue里面的style標(biāo)簽的內(nèi)容 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 靜態(tài)資源,這里有一個index.html 模板,作為合成最終dist/index.html的骨架存在 src assets 存放一些靜態(tài)文件,現(xiàn)在我們不用這個,之后全部存到public/static下 components 小型組件存放位置 HelloWorld.vue 子組件 views 大型組件,母體組件存放位置 About.vue 母組件 Home.vue 母組件,里面引入了子組件HelloWorld.vue,所以在訪問Home頁面的時候會看到HelloWorld頁面的內(nèi)容 App.vue 作為所有的.vue的一個主管存在,存放uri(/和/about),里面的樣式會影響全局(id=app的div) main.js : 作為打包過程必要的主腳本,負(fù)責(zé)把id=app的div進(jìn)行填充,里面的代碼會影響全局 router.js: 路由管理器,根據(jù)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')
頁面上呈現(xiàn)的內(nèi)容是怎么來的?這里只說明vue部分
0 dist是從public復(fù)制來的,里面的index有個id=app
1 main.js負(fù)責(zé)把App.vue掛載到index頁面id=app的div里面
2 App.vue里面有<router-view/>,路由/在router.js里映射到Home.vue
3 假如Home里面又加載了components的子組件,那再找到子組件
4 最終看到頁面上呈現(xiàn)的內(nèi)容
曲線救國打通vue和django
vue適配django
public底下手動創(chuàng)建static ,用來存放js/css/圖片等資源,讓vue打包的時候會把靜態(tài)文件統(tǒng)一存到這里,然后讓django的靜態(tài)文件從這里取,怎么實現(xiàn)說讓vue打包的時候在dist生成static文件夾,在front目錄下創(chuàng)建文件vue.config.js,內(nèi)容為:
module.exports = { assetsDir:'static' }
這里需要特別特別說明:舊版本會有vue.config.js,新版本已經(jīng)沒有了
dist vue打包生成的包,django要從dist里面拿到index.html和static的所有靜態(tài)資源,實際上django就是跟dist里面的index.js交互,而不會管沒vue項目的其他內(nèi)容,
vue項目就沒用了么?
當(dāng)然不是,vue在和后端聯(lián)調(diào)還是用的打包前的,而在django項目,只用打包后的dist
django適配vue
django和vue前后端分離項目,交互流程就是這樣:
用戶-電腦瀏覽器-django-dist包 -> vue-cli前端開發(fā)用的
打通這個流程要做兩個事情
第一,想辦法把路由配置成從vue項目中的index.html進(jìn)行關(guān)聯(lián)上
從前:urls -> views.py -> .html的
現(xiàn)在: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的打通,后續(xù)開發(fā),前端直接請求后端域名接口就好了 settings.py中,修改TEMPLATES的DIRS,其他不變: TEMPLATES = [ ? ? { ? ? ? ? ... ? ? ? ? 'DIRS': ['front/dist'], # 指定django模板路徑,讓django在讀取html時從前端項目front的打包目錄dist取index.html ? ? ? ? ... ? ? }
第二,想辦法把vue項目內(nèi)的static文件夾下的靜態(tài)資源關(guān)聯(lián)上。
settings.py中:
STATICFILES_DIRS=[ os.path.join(BASE_DIR,"front/dist/static"), ]
打包
進(jìn)入前端項目根目錄front下,執(zhí)行npm run build
打包完,可以啟動django服務(wù),訪問看下是不是能訪問到vue的頁面index.html
通過django服務(wù)訪問vue的index.html
http://127.0.0.1:8000/index/#/about
左邊的是django的路由,右邊的是vue的路由,自動拼接
到此這篇關(guān)于django+vue項目搭建實現(xiàn)前后端通信的文章就介紹到這了,更多相關(guān)django vue項目搭建內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Vue3嵌套路由中使用keep-alive緩存多層的實現(xiàn)
本文介紹了Vue3 嵌套路由中使用?keep-alive緩存多層的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04vue vantUI實現(xiàn)文件(圖片、文檔、視頻、音頻)上傳(多文件)
這篇文章主要介紹了vue vantUI實現(xiàn)文件(圖片、文檔、視頻、音頻)上傳(多文件),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10atom-design(Vue.js移動端組件庫)手勢組件使用教程
這篇文章主要介紹了atom-design(Vue.js移動端組件庫)手勢組件使用教程,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05