Django Vue.js搭建前后端分離項(xiàng)目超詳細(xì)過程

環(huán)境:windows 7霎褐、django1.11合敦、python3.6.3

1. 使用virtualenv創(chuàng)建python虛擬環(huán)境并設(shè)置pycharm

E:\pyvenv>virtualenv utester_env
E:\pyvenv>cd utester_env
E:\pyvenv>Scripts\activate.bat
(utester_env) E:\pyvenv>pip install django
(utester_env) E:\pyvenv\utester_env>pip install django
Requirement already satisfied: django in e:\pyvenv\utester_env\lib\site-packages

Requirement already satisfied: pytz in e:\pyvenv\utester_env\lib\site-packages (
from django)

注意:虛擬環(huán)境的目錄不能帶有中文维费,否則環(huán)境變量識(shí)別不了

2.創(chuàng)建Django項(xiàng)目

(utester_env) E:\projects>django-admin startproject utester
(utester_env) E:\projects>cd utester

#創(chuàng)建表
(utester_env) E:\projects\utester>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying sessions.0001_initial... OK

#創(chuàng)建管理員用戶
(utester_env) E:\projects\utester>python manage.py createsuperuser
Username (leave blank to use 'zengzhihua'):
Email address: 1036181341@qq.com
Password:
Password (again):
This password is too short. It must contain at least 8 characters.
This password is too common.
This password is entirely numeric.
Password:
Password (again):
Superuser created successfully.

(utester_env) E:\projects\utester>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
October 09, 2017 - 14:05:32
Django version 1.11.6, using settings 'utester.settings'
Starting development server at http://127.0.0.1:8000/

訪問http://127.0.0.1:8000/admin/潮梯,輸入剛剛創(chuàng)建的用戶名和密碼蹬昌,如果一切順利,就可以看到django的admin管理后臺(tái)了昧捷。

3.創(chuàng)建vue項(xiàng)目

關(guān)于django、vue前后端分離罐寨,在github上有個(gè)模板hello-vue-django靡挥,源倉庫地址hello-vue-django。但我看不慣python和js文件鸯绿,想把vue項(xiàng)目代碼單獨(dú)放一個(gè)目錄frontend跋破。
在utester項(xiàng)目目錄利用vue-cli新建vue的項(xiàng)目代碼

(utester_env) E:\projects\utester>vue init webpack  frontend

  A newer version of vue-cli is available.

  latest:    2.9.1
  installed: 2.8.2

? Project name utester
? Project description A Vue.js project
? Author zengzhihua
? Vue build standalone
? Install vue-router? Yes
? Use ESLint to lint your code? No
? Setup unit tests with Karma + Mocha? No
? Setup e2e tests with Nightwatch? No

   vue-cli · Generated "frontend".

   To get started:

     cd frontend
     npm install
     npm run dev

   Documentation can be found at https://vuejs-templates.github.io/webpack

最終項(xiàng)目目錄結(jié)構(gòu)如下:

(utester_env) E:\projects\utester>tree /f
卷 NewDisk 的文件夾 PATH 列表
卷序列號(hào)為 6A28-026B
E:.
│  db.sqlite3
│  manage.py
│
├─frontend
│  │  .babelrc
│  │  .editorconfig
│  │  .gitignore
│  │  .postcssrc.js
│  │  index.html
│  │  package.json
│  │  README.md
│  │
│  ├─build
│  │      build.js
│  │      check-versions.js
│  │      dev-client.js
│  │      dev-server.js
│  │      utils.js
│  │      vue-loader.conf.js
│  │      webpack.base.conf.js
│  │      webpack.dev.conf.js
│  │      webpack.prod.conf.js
│  │
│  ├─config
│  │      dev.env.js
│  │      index.js
│  │      prod.env.js
│  │
│  ├─src
│  │  │  App.vue
│  │  │  main.js
│  │  │
│  │  ├─assets
│  │  │      logo.png
│  │  │
│  │  ├─components
│  │  │      HelloWorld.vue
│  │  │
│  │  └─router
│  │          index.js
│  │
│  └─static
│          .gitkeep
│
├─imonitor
│  │  admin.py
│  │  apps.py
│  │  models.py
│  │  tests.py
│  │  views.py
│  │  __init__.py
│  │
│  └─migrations
│          __init__.py
│
└─utester
    │  settings.py
    │  urls.py
    │  wsgi.py
    │  __init__.py
    │
    └─__pycache__
            settings.cpython-36.pyc
            urls.cpython-36.pyc
            wsgi.cpython-36.pyc
            __init__.cpython-36.pyc

4.配置django-webpack-loader

參考文章:用django-webpack-loader實(shí)現(xiàn)Django和Webpack的綁定django-webpack配置

  • 安裝django-webpack-loader
    安裝遇到個(gè)報(bào)錯(cuò)簸淀,大致意思是ssl驗(yàn)證失敗了,如下:
(utester_env) E:\pyvenv\utester_env>Scripts\pip.exe  install django-webpack-load
er
Collecting django-webpack-loader
  Could not fetch URL https://pypi.python.org/simple/django-webpack-loader/: The
re was a problem confirming the ssl certificate: [SSL: CERTIFICATE_VERIFY_FAILED
] certificate verify failed (_ssl.c:749) - skipping
  Could not find a version that satisfies the requirement django-webpack-loader
(from versions: )

這個(gè)錯(cuò)誤毒返,時(shí)有時(shí)無的租幕,也不清楚是怎么回事,import ssl是沒有問題的拧簸。所以只能跳過ssl驗(yàn)證劲绪,命令如下:

pip install --index-url=http://pypi.python.org/simple/ --trusted-host pypi.python.org  django-webpack-loader

然后設(shè)置Django( settings.py ),把 webpack_loader 加到INSTALLED_APPS中狡恬,指定templates和static目錄珠叔,新增WEBPACK_LOADER:

INSTALLED_APPS = [
    ...
    'webpack_loader',
]

STATIC_URL = '/static/'

#靜態(tài)文件主目錄
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'frontend/dist/static'),  
)
 
#針對(duì)Webpack的設(shè)置
WEBPACK_LOADER = {
    'DEFAULT': {
        'BUNDLE_DIR_NAME': 'dist/'
    }
}

很奇怪1.11版本為什么沒有STATICFILES_DIRS 變量了蝎宇。我自己加上去的弟劲,不知道會(huì)不會(huì)有問題

  • 配置templates相關(guān)
    更改settings里templates,DIRS里增加os.path.join(BASE_DIR, 'templates'),這樣django在尋找模板文件的時(shí)候姥芥,就會(huì)從這個(gè)列表目錄按順序查找兔乞,直到匹配為止
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
        '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',
            ],
        },
    },
]

新建templates目錄以及index.html文件,文件內(nèi)容如下:

<!DOCTYPE html>
{% load render_bundle from webpack_loader %}
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>hello-vue</title>
</head>
<body>
<div id="app"></div>
{% render_bundle 'app' %}
</body>
</html>
  • 配置webpack 的dev環(huán)境
  1. 安裝webpack-bundle-tracker
    安裝前記得npm install一下凉唐,將其他vue的依賴都安裝完庸追,安裝完后node_modules目錄非常大,pycharm一直pycharm scanning files to index台囱,導(dǎo)致電腦非车荩卡,一不小心就內(nèi)存崩潰了簿训≡廴ⅲ可以將該目錄標(biāo)記為不掃描,右鍵node_modules强品,mark directory as Exclude膘侮,這樣
(utester_env) E:\projects\utester>npm install --save-dev webpack-bundle-tracker
npm WARN saveError ENOENT: no such file or directory, open 'E:\projects\utester\
package.json'
E:\projects\utester
`-- webpack-bundle-tracker@0.2.0
  +-- deep-extend@0.4.2
  +-- mkdirp@0.5.1
  | `-- minimist@0.0.8
  `-- strip-ansi@2.0.1
    `-- ansi-regex@1.1.1
  1. 更改webpack.dev.conf.js文件
    引入webpack-bundle-tracker
var BundleTracker = require('webpack-bundle-tracker');
#plugins數(shù)組增加如下,filename于settings里的WEBPACK_LOADER一致
new BundleTracker({filename: '../webpack-stats.json'}),

3.更改webpack的config/index.js

#增加兩個(gè)變量
const dev_server_addr = 'localhost';
const dev_server_port = process.env.PORT || 8080
#修改以下兩個(gè)變量
port: dev_server_port,
assetsPublicPath: 'http://' + dev_server_addr + ':' + dev_server_port + '/static/dist' + '/',

5.啟動(dòng)dev環(huán)境

  • 啟動(dòng)django項(xiàng)目
(utester_env) E:\projects\utester>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
October 09, 2017 - 21:13:05
Django version 1.11.6, using settings 'utester.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

  • 啟動(dòng)vue項(xiàng)目
(utester_env) E:\projects\utester\frontend>npm run dev

> frontend@1.0.0 dev E:\projects\utester\frontend
> node build/dev-server.js
> Starting dev server...
 DONE  Compiled successfully in 3188ms                                  20:54:11
> Listening at http://localhost:8080
  • 訪問http://127.0.0.1:8000/
    如果一切順利的榛,應(yīng)該可以看到熟悉的vue頁面了
image.png

到這里琼了,留下一個(gè)問題,就是更改frontend里的內(nèi)容夫晌,不會(huì)同步刷新頁面雕薪,只能手動(dòng)刷新才能看到效果,熱加載功能失效了晓淀∷看瀏覽器的network里,有一個(gè)404的資源http://127.0.0.1:8000/__webpack_hmr要糊,看樣子是端口錯(cuò)了纲熏,應(yīng)該是訪問vue開啟的8080端口妆丘。還沒找到解決方法

本文所有代碼:django-vue-helloworld

參考文獻(xiàn):

github:https://github.com/zaxlct/hello-vue-django

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市局劲,隨后出現(xiàn)的幾起案子勺拣,更是在濱河造成了極大的恐慌,老刑警劉巖鱼填,帶你破解...
    沈念sama閱讀 217,734評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件药有,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡苹丸,警方通過查閱死者的電腦和手機(jī)愤惰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來赘理,“玉大人宦言,你說我怎么就攤上這事∩棠#” “怎么了奠旺?”我有些...
    開封第一講書人閱讀 164,133評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長施流。 經(jīng)常有香客問我响疚,道長,這世上最難降的妖魔是什么瞪醋? 我笑而不...
    開封第一講書人閱讀 58,532評(píng)論 1 293
  • 正文 為了忘掉前任忿晕,我火速辦了婚禮,結(jié)果婚禮上银受,老公的妹妹穿的比我還像新娘践盼。我一直安慰自己,他們只是感情好蚓土,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評(píng)論 6 392
  • 文/花漫 我一把揭開白布宏侍。 她就那樣靜靜地躺著,像睡著了一般蜀漆。 火紅的嫁衣襯著肌膚如雪谅河。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,462評(píng)論 1 302
  • 那天确丢,我揣著相機(jī)與錄音绷耍,去河邊找鬼。 笑死鲜侥,一個(gè)胖子當(dāng)著我的面吹牛褂始,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播描函,決...
    沈念sama閱讀 40,262評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼崎苗,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼狐粱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起胆数,我...
    開封第一講書人閱讀 39,153評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤肌蜻,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后必尼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒋搜,經(jīng)...
    沈念sama閱讀 45,587評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評(píng)論 3 336
  • 正文 我和宋清朗相戀三年判莉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了豆挽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,919評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡券盅,死狀恐怖帮哈,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情渗饮,我是刑警寧澤但汞,帶...
    沈念sama閱讀 35,635評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站互站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏僵缺。R本人自食惡果不足惜胡桃,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望磕潮。 院中可真熱鬧翠胰,春花似錦、人聲如沸自脯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽膏潮。三九已至锻狗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間焕参,已是汗流浹背轻纪。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留叠纷,地道東北人刻帚。 一個(gè)月前我還...
    沈念sama閱讀 48,048評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像涩嚣,于是被迫代替她去往敵國和親崇众。 傳聞我的和親對(duì)象是個(gè)殘疾皇子掂僵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 前言 webpack2和vue2已經(jīng)不是新鮮東西了,滿大街的文章在講解webpack和vue顷歌,但是很多內(nèi)容寫的不是...
    技術(shù)宅小青年閱讀 6,536評(píng)論 4 43
  • 在寫這篇文章的時(shí)候看峻,順帶學(xué)習(xí)了一下關(guān)于Markdown的使用方法。筆者是個(gè)渣渣衙吩,一切都是自己在摸索的學(xué)著互妓,所以也談...
    Royal_KinM閱讀 13,737評(píng)論 4 5
  • 開學(xué)將近兩個(gè)月冯勉,年近20的我踏在大學(xué)的林蔭路上,看著大樹抖下半黃半綠的小葉摹芙,又是一季的更迭灼狰,樹粗了一圈,又高...
    安笙U閱讀 510評(píng)論 4 3
  • 一座舊城一往事 一段相識(shí)一回憶 一句傾訴無人明 一詞謊言欺人心 青春路上滿荊棘 獨(dú)建心城鎖心事 待到白發(fā)無人依
    行于訫閱讀 200評(píng)論 0 0
  • 當(dāng)風(fēng)不再吹門前的梔子花 當(dāng)海不再泛起浪花 當(dāng)月不撩人 我還有你 當(dāng)喜鵲不再飛回來 當(dāng)云朵都散開 當(dāng)日月不再旋轉(zhuǎn) 我...
    禮雪晶閱讀 224評(píng)論 3 18