https://www.cnblogs.com/zhixi/p/9996832.html
以前一直是做基於PHP或JAVA的前后端分離開發,最近跟着python風搭建了一個基於django的前后端分享項目
准備工作:IDE,【JetBrains PyCharm2018】【webpack 3.3.0】【python3.7.0】【npm5.8.0】【vue-cli2.9.6】,這是我當前的版本,基本python不低於2.0,本例子都可以運行成功
1,打開PyCharm創建一個創建Django項目
django-admin startproject pc_admin
創建成功后目錄如下
. ├── manage.py └── pc_admin ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
2,進入項目根目錄,創建一個 App 作為項目后端
cd pc_admin python manage.py startapp backend //backend就是app名稱
創建成功后目錄如下
. ├── backend │ ├── __init__.py │ ├── admin.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── manage.py └── pc_admin ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
3, 使用vue-cli在根目錄創建一個名稱叫【frontend】的Vue.js項目作為項目前端
vue-init webpack frontend
創建成功后目錄如下
. ├── backend │ ├── __init__.py │ ├── admin.py │ ├── migrations │ │ └── __init__.py │ ├── models.py │ ├── tests.py │ └── views.py ├── frontend │ ├── README.md │ ├── build │ │ └── .... │ ├── config │ │ ├── dev.env.js │ │ ├── index.js │ │ ├── prod.env.js │ │ └── test.env.js │ ├── index.html │ ├── package.json │ ├── src │ │ ├── App.vue │ │ ├── assets │ │ │ └── logo.png │ │ ├── components │ │ │ └── HelloWorld.vue │ │ └── main.js │ ├── static │ └── test │ └── ... ├── manage.py └── pc_admin ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py
我們可以在vue中加入一些常用組件,如element-ui等,再隨便添加倆個例子
frontend/src/HelloWorld.vue文件
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<h2>Essential Links</h2>
<el-select v-model="value" placeholder="請選擇">
<el-option
v-for="item in options"
:key="item.value"
:label="item.label"
:value="item.value">
</el-option>
</el-select>
<el-row>
<el-button>默認按鈕</el-button>
<el-button type="primary">主要按鈕</el-button>
<el-button type="success">成功按鈕</el-button>
<el-button type="info">信息按鈕</el-button>
<el-button type="warning">警告按鈕</el-button>
<el-button type="danger">危險按鈕</el-button>
</el-row>
</div>
</template>
<script>
export default {
name: 'HelloWorld',
data() {
return {
msg: 'Welcome to Your Vue.js App',
options: [{
value: '選項1',
label: '黃金糕'
}, {
value: '選項2',
label: '雙皮奶'
}, {
value: '選項3',
label: '蚵仔煎'
}, {
value: '選項4',
label: '龍須面'
}, {
value: '選項5',
label: '北京烤鴨'
}],
value: ''
}
}
}
</script>
<!-- Add "scoped" attribute to limit CSS to this component only -->
<style scoped>
</style>
4,使用 webpack 打包vue項目
cd frontend npm install npm run build
此時直接運行npm run dev也可以直接查看前端 vue界面
構建完成會生成一個文件夾,名字叫dist,里面有一個 index.html 和一個 文件夾static。
5, 使用Django的通用視圖 TemplateView修改靜態指向路徑(就是讓Django訪問目錄指向我們剛才打包的dist/index.html)
找到項目根 ulb_manager/urls.py文件作出如下修改
from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView //注意加上這句
urlpatterns = [
# path('admin/', admin.site.urls),
path('admin/', admin.site.urls),
path(r'', TemplateView.as_view(template_name="index.html")),
]
6. 配置Django項目的模板搜索路徑和靜態文件搜索路徑 找到根目錄下 ulb_manager/settings.py文件並打開,找到TEMPLATES配置項,修改如下:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
# 'DIRS': [],
'DIRS':['frontend/dist'],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
# Add for vue.js
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "frontend/dist/static"),
]
7,到此基本就配置完成了,運行命令就可以直接查看效果
python manage.py runserver

后續:前端vue到此還沒有實現修改文件后動態打包更新,所以,以python命令運行起vue文件,都不能刷新查看更改,留待下次更新此功能

