婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 手把手教你使用Django + Vue.js 快速構建項目

手把手教你使用Django + Vue.js 快速構建項目

熱門標簽:ai電銷機器人源碼 長沙高頻外呼系統原理是什么 外呼并發線路 宿遷星美防封電銷卡 百度地圖標注沒有了 湛江智能外呼系統廠家 地圖標注審核表 西藏房產智能外呼系統要多少錢 ai電話機器人哪里好

1. 前言

本篇將基于Django + Vue.js,手把手教大家快速的實現一個前后端分離的Web項目。

2. 環境準備

  1.  Python 3.6.1
  2. Mysql 5.7.23
  3. Pycharm (專業版)
  4. Node

3. 創建 Django 項目

創建完成后,目錄結構如下所示


使用 Navicat 工具創建數據庫 DjangoVue


安裝 mysqlclient 庫


配置 settings.py 文件,配置 Mysql 數據庫引擎

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DjangoVue',
        'USER': 'root',
        'PASSWORD': 'root',
        'HOST': '127.0.0.1',
    }
}

執行同步操作,將數據遷移到 Mysql


啟動 Django Server ,驗證默認配置是否正常

python manage.py runserver 0.0.0.0:8000


打開瀏覽器,訪問 http://localhost:8000


創建一個 app 作為項目后端

python manage.py startapp backend

創建完成后,目錄結構如下所示

把 backend 加入到 settings.py 文件中的 INSTALLED_APPS 列表里

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

在 backend/models.py 里寫一個簡單 model 如下

from django.db import models

# Create your models here.


class Book(models.Model):
	# 如果沒有指定主鍵的話Django會自動新增一個自增id作為主鍵
    bookName = models.CharField(max_length=128, verbose_name='書名')
    createTime = models.DateTimeField(auto_now_add=True, verbose_name='創建時間')

    def __unicode__(self):
        return self.bookName

    def __str__(self):
        return self.bookName

根據修改創建遷移文件,并應用這些修改到數據庫中

# 創建遷移文件
python manage.py makemigrations
# 應用修改到數據庫
python manage.py migrate


Django 生成的表名將以 app 名加上 model 中的類名組合而成,也可以自定義表名,如下

from django.db import models

# Create your models here.


class Book(models.Model):
    bookName = models.CharField(max_length=128, verbose_name='書名')
    createTime = models.DateTimeField(auto_now_add=True, verbose_name='創建時間')

    def __unicode__(self):
        return self.bookName

    def __str__(self):
        return self.bookName

    class Meta:
        db_table = 'backend_book'

在 backend/views 里我們新增兩個接口,一個返回所有的書籍列表,一個往數據庫里添加一條book數據。

import json

from django.core import serializers
from django.http import JsonResponse
from django.shortcuts import render
from django.views.decorators.http import require_http_methods

from backend.models import Book


@require_http_methods(["GET"])
def add_book(request):
    response = {}
    try:
        book_name = request.GET.get('book_name')
        book = Book(bookName=book_name)
        book.save()
        response['respMsg'] = 'success'
        response['respCode'] = '000000'
    except Exception as e:
        response['respMsg'] = str(e)
        response['respCode'] = '999999'
    return JsonResponse(response)


@require_http_methods(["GET"])
def show_books(request):
    response = {}
    try:
        books = Book.objects.filter()
        response['list'] = json.loads(serializers.serialize("json", books))
        response['respMsg'] = 'success'
        response['respCode'] = '000000'
    except Exception as e:
        response['respMsg'] = str(e)
        response['respCode'] = '999999'
    return JsonResponse(response)

在 backend 目錄下,新增一個 urls.py 文件,把我們新增的兩個接口添加到路由里

# -*- coding: utf-8 -*-
"""
-------------------------------------------------
   File Name :     urls.py
   Description :    
   Author :         FHQI
   date :          2021-08-19
-------------------------------------------------
"""
from django.conf.urls import url

from backend.views import add_book, show_books

urlpatterns = [
    url("add_book", add_book, ),
    url("show_books", show_books, ),
]

最后要把backend 下的 urls 添加到項目 djangoVue 下的 urls 中,才算完成路由

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('backend.urls')),
]

重新啟動服務,測試一下剛才寫的兩個接口

python manage.py runserver 0.0.0.0:8000


4. 創建 Vue.js 前端項目

使用 node 自帶的 npm 包管理器安裝 vue 和相關模塊。推薦使用淘寶的 cnpm 命令行工具代替默認的 npm。

npm install -g cnpm --registry=https://registry.npm.taobao.org

安裝 vue.js

cnpm install -g vue

安裝vue-cli腳手架工具(vue-cli是官方腳手架工具,能迅速幫你搭建起vue項目的框架)

cnpm install -g vue-cli

在 djangoVue 項目根目錄下,新建一個前端工程目錄

vue-init webpack frontend

在創建項目的過程中會彈出一些與項目相關的選項需要回答,按照真實情況進行輸入即可,如下:

Project name(工程名):回車
Project description(工程介紹):回車
Author:作者名 :回車
Vue build ==> (是否安裝編譯器)runtime-compiler、 runtime-only 都是打包方式,第二個效率更高;
Install vue-router ==> 是否要安裝 vue-router,項目中肯定要使用到路由,所以Y 回車;
Use ESLint to lint your code ==> 是否需要ESLint檢測代碼,目前我們不需要所以 n 回車;
Set up unit tests ==> 是否安裝 單元測試工具 目前我們不需要 所以 n 回車;
Setup e2e tests with Nightwatch ==>是否需要端到端測試工具目前我們不需要所以n回車;
Should we run npm install for you after the project has been created? (recommended) (Use arrow keys)==> 安裝依賴npm install
回車;


安裝 vue 依賴模塊

cd frontend
cnpm install
cnpm install vue-resource
cnpm install element-ui

現在整個文件目錄結構如下


在 frontend 目錄 src 下包含入口文件 main.js,入口組件 App.vue 等。后綴為 vue 的是 Vue.js 框架定義的單文件組件,一個文件包含且僅包含三塊內容,如下:

1. template>/template > 前端渲染的模板
2. 專為此模板寫渲染邏輯的 script>/script>
3. 專為此模板寫樣式的 style>/style>

在 src/components 文件夾下新建一個名為 Home.vue 的組件,通過調用之前在 Django 上寫好的 api,實現添加書籍和展示書籍信息的功能。在樣式組件上我們使用了餓了么團隊推出的 element-ui,這是一套專門匹配 Vue.js 框架的功能樣式組件。由于組件的編碼涉及到了很多 js、html、css 的知識,并不是本文的重點,因此在此只貼出部分代碼。

template>
div class="home">
el-row display="margin-top:10px">
el-input v-model="input" placeholder="請輸入書名" style="display:inline-table; width: 30%; float:left">/el-input>
el-button type="primary" @click="addBook()" style="float:left; margin: 2px;">新增/el-button>
/el-row>
el-row>
el-table :data="bookList" style="width: 100%" border>
el-table-column prop="id" label="編號" min-width="100">
template slot-scope="scope"> {{ scope.row.pk }} /template>
/el-table-column>
el-table-column prop="bookName" label="書名" min-width="100">
template slot-scope="scope"> {{ scope.row.fields.bookName }} /template>
/el-table-column>
el-table-column prop="createTime" label="添加時間" min-width="100">
template slot-scope="scope"> {{ scope.row.fields.createTime }} /template>
/el-table-column>
/el-table>
    /el-row>
  /div>
/template>

script>
export default {
  name: 'home',
  data () {
    return {
      input: '',
      bookList: []
    }
  },
  mounted: function () {
    this.showBooks()
  },
  methods: {
    addBook () {
      this.$http.get('http://127.0.0.1:8000/api/add_book?book_name=' + this.input)
        .then((response) => {
          var res = JSON.parse(response.bodyText)
          if (res.respCode === '000000') {
            this.showBooks()
          } else {
            this.$message.error('新增書籍失敗,請重試')
            console.log(res['respMsg'])
          }
        })
    },
    showBooks () {
      this.$http.get('http://127.0.0.1:8000/api/show_books')
        .then((response) => {
          var res = JSON.parse(response.bodyText)
          console.log(res)
          if (res.respCode === '000000') {
            this.bookList = res['list']
          } else {
            this.$message.error('查詢書籍失敗')
            console.log(res['respMsg'])
          }
        })
    }
  }
}
/script>

style scoped>
  h1, h2 {
    font-weight: normal;
  }

  ul {
  list-style-type: none;
  padding: 0;
}

li {
  display: inline-block;
  margin: 0 10px;
}

a {
  color: #42b983;
}
/style>

在 src/router 目錄的 index.js 中,把新建的 Home 組件,配置到 vue-router 路由中

import Vue from 'vue'
import Router from 'vue-router'
// import HelloWorld from '@/components/HelloWorld'
import Home from '@/components/Home'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      // name: 'HelloWorld',
      name: 'Home',
      // component: HelloWorld
      component: Home
    }
  ]
})

在 src/main.js 文件中,導入 element-ui、vue-resource 庫。

import Vue from 'vue'
import App from './App'
import router from './router'
import ElementUI from 'element-ui'
import VueResource from 'vue-resource'
import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)
Vue.use(VueResource)

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

在前端工程 frontend 目錄下,輸入 npm run dev 啟動 node 自帶的服務器,自動打開瀏覽器,如下頁面:

5. 解決跨域問題

此時出現了一個問題,數據是空的,打開開發者工具,發現有錯誤。因為我們使用 VueJS 的開發環境脫離了 Django 環境,訪問 Django 寫的 API,出現了跨域問題,有兩種方法解決,一種是在 VueJS 層上做轉發(proxyTable),另一種是在 Django 層注入 header,這里使用后者,用 Django 的第三方包 django-cors-headers 來解決跨域問題。

pip install django-cors-headers

修改 settings.py

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',    # 添加1,注意中間件的添加順序
    '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        # 添加2

至此,頁面上有數據了,如下:

新增書籍,如填入:“Django從入門到放棄”,新增的書籍信息會實時反映到頁面的列表中,這得益于Vue.js的數據雙向綁定特性。

6. 整合 Django 和 Vue.js 前端

目前我們已經分別完成了 Django 后端和 Vue.js 前端工程的創建和編寫,但實際上它們是運行在各自的服務器上,和我們的要求是不一致的。

在前端工程 frontend 目錄下,輸入 npm run build,如果項目沒有錯誤的話,就能夠看到所有的組件、css、圖片等都被 webpack 自動打包到 dist 目錄下了,里面有一個 index.html 和一個文件夾 static。

修改 djangoVue 下的 urls ,使用通用視圖創建最簡單的模板控制器,訪問 『/』時直接返回 index.html

from django.contrib import admin
from django.urls import path, include
from django.views.generic import TemplateView

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/', include('backend.urls')),
    path(r'', TemplateView.as_view(template_name="index.html")),
]

配置 Django 項目的模板搜索路徑。上一步使用了 Django 的模板系統,所以需要配置一下模板使 Django 知道從哪里找到 index.html。修改 settings.py 文件,如下:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'DIRS': [os.path.join(BASE_DIR, '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 vuejs
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "frontend/dist/static"),
]

配置完成,啟動 Django 服務 python manage.py runserver,就能夠看到我們的前端頁面在瀏覽器上展現:


此時服務的端口已經是 Django 服務的 8000 而不是 node 服務的 8080 了,說明我們已經成功通過 Django 集成了 Vue 前端工程。

到此這篇關于手把手教你使用Django + Vue.js 快速構建項目的文章就介紹到這了,更多相關Django Vue.js構建項目內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解django模板與vue.js沖突問題
  • django中使用vue.js的要點總結
  • Django+Vue.js搭建前后端分離項目的示例

標簽:盤錦 大同 漯河 寧夏 南平 林芝 海南 普洱

巨人網絡通訊聲明:本文標題《手把手教你使用Django + Vue.js 快速構建項目》,本文關鍵詞  手把手,教你,使用,Django,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《手把手教你使用Django + Vue.js 快速構建項目》相關的同類信息!
  • 本頁收集關于手把手教你使用Django + Vue.js 快速構建項目的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    色悠久久久久综合欧美99| 欧美极品aⅴ影院| 极品销魂美女一区二区三区| 日韩国产欧美三级| 免费成人在线网站| 国产精品女人毛片| 久久99精品久久久久久国产越南| 日韩欧美高清一区| 一区二区视频免费在线观看| 亚洲超碰97人人做人人爱| 中文字幕第一页久久| 欧美吻胸吃奶大尺度电影| 日韩欧美国产三级电影视频| 亚洲高清在线精品| 国产精品欧美久久久久一区二区| 欧美一区二区免费视频| 丁香桃色午夜亚洲一区二区三区 | 99re热视频精品| 暴力调教一区二区三区| 国产成人午夜电影网| 久久男人中文字幕资源站| 乱一区二区av| 欧美精品一区二区不卡 | 国产精品女同一区二区三区| 色天天综合久久久久综合片| 日韩精品一区二区三区在线 | 一区二区三区中文免费| 欧美电影在哪看比较好| 国产一区二区三区久久久| 亚洲精品高清视频在线观看| 欧美亚洲国产一区二区三区va| 欧美国产成人精品| 亚洲国产精品精华液网站| 国产成人综合自拍| 天天色 色综合| 亚洲伊人伊色伊影伊综合网| 天堂久久一区二区三区| 国产乱码精品一区二区三区忘忧草| 另类小说综合欧美亚洲| 国产露脸91国语对白| 日韩免费性生活视频播放| 国产精品嫩草99a| 亚洲国产成人高清精品| 免费看精品久久片| 久久亚区不卡日本| 国产一区二区三区精品欧美日韩一区二区三区 | 亚洲欧洲日韩综合一区二区| 99精品桃花视频在线观看| 成人的网站免费观看| 日韩极品在线观看| 自拍偷拍国产亚洲| 中文字幕乱码久久午夜不卡| 欧美一级夜夜爽| 99精品久久只有精品| 成人av在线一区二区三区| 99久久综合国产精品| 韩国精品久久久| 日本一区二区在线不卡| 欧美大片一区二区| 精品国产污网站| 精品国产一区二区三区四区四 | 欧美日韩你懂的| 色婷婷久久久亚洲一区二区三区 | 国产制服丝袜一区| 日韩av在线播放中文字幕| 亚洲精品成人精品456| www.亚洲精品| 亚洲一二三区视频在线观看| 亚洲国产成人tv| 激情综合网av| 日本一区二区动态图| 国产精品美女久久久久久| 欧美韩国日本综合| 亚洲一区二区三区在线看| 久久精品久久综合| 亚洲视频1区2区| 日韩精品视频网| 97se亚洲国产综合自在线观| eeuss鲁片一区二区三区在线观看| 精品一区二区三区的国产在线播放| 久久99精品国产| 成人黄色av电影| 精品美女在线观看| 国产精品免费观看视频| 亚洲私人黄色宅男| 青青草97国产精品免费观看无弹窗版 | 日本一区二区成人| 亚洲电影一级黄| 成人三级伦理片| 国产片一区二区| 亚洲综合另类小说| 成人av一区二区三区| 欧美xfplay| 国内精品久久久久影院薰衣草| 久久影院午夜片一区| 日本vs亚洲vs韩国一区三区| 色婷婷久久一区二区三区麻豆| 欧美丰满嫩嫩电影| 亚洲综合色网站| 欧美亚洲动漫另类| 欧美日韩三级视频| 亚洲成人tv网| 欧美tickling网站挠脚心| 国产日韩欧美亚洲| 丁香婷婷综合色啪| 久久精品人人爽人人爽| 日韩精品一卡二卡三卡四卡无卡| 亚洲第一福利视频在线| 972aa.com艺术欧美| 亚洲综合免费观看高清完整版 | 久久国产三级精品| a级精品国产片在线观看| 这里是久久伊人| 国产美女精品人人做人人爽| 久久久五月婷婷| 亚洲乱码一区二区三区在线观看| 亚洲婷婷综合久久一本伊一区| 亚洲一区二区三区三| 91精品国产全国免费观看| 国产日韩欧美精品电影三级在线| 欧美国产1区2区| 成人av在线网| 精品一区二区影视| 中文字幕在线一区| 婷婷亚洲久悠悠色悠在线播放 | 美女高潮久久久| 最新成人av在线| 久久色.com| 精品欧美一区二区在线观看 | 亚洲精品国产高清久久伦理二区| 精品在线你懂的| 一区二区三区久久久| 久久精品视频一区| 欧美成人精品福利| 制服丝袜在线91| 久久婷婷色综合| 欧美男人的天堂一二区| 欧美国产一区在线| 日韩精品专区在线| 欧美综合亚洲图片综合区| 91亚洲大成网污www| 成人激情文学综合网| 懂色av一区二区三区免费看| 不卡视频在线观看| 成人免费毛片a| 国产成人精品aa毛片| aaa亚洲精品一二三区| 99re这里都是精品| 在线欧美日韩国产| 欧美精品久久久久久久多人混战| 国产精品久久久久久一区二区三区| 日本一区二区视频在线| 老司机一区二区| 国产999精品久久久久久| www成人在线观看| 欧美在线视频全部完| 欧美精品电影在线播放| 91精品国产综合久久久蜜臀粉嫩 | 一区二区三区四区不卡在线| 2023国产一二三区日本精品2022| 欧美又粗又大又爽| 免费成人在线播放| 国产一区二区三区综合| 丝袜亚洲另类丝袜在线| 久久免费午夜影院| 中文字幕乱码久久午夜不卡 | 成人的网站免费观看| 在线观看成人免费视频| 4438x亚洲最大成人网| 日韩欧美区一区二| 国产精品美女久久久久高潮| 国产美女一区二区三区| 国产乱色国产精品免费视频| 亚洲视频狠狠干| 另类成人小视频在线| 成人动漫一区二区三区| 欧美老年两性高潮| 狠狠v欧美v日韩v亚洲ⅴ| 亚洲美女少妇撒尿| 国产成人啪午夜精品网站男同| 亚洲男人的天堂一区二区| 国产女人18毛片水真多成人如厕 | 国产农村妇女精品| 中文字幕中文在线不卡住| 91女人视频在线观看| 欧美成人一区二区三区片免费| 大陆成人av片| 欧美男生操女生| 经典三级视频一区| 日韩一区二区在线观看视频播放| 国产精品一级黄| 精彩视频一区二区| 成人国产精品免费网站| www久久精品| 国产一区二区三区高清播放| 亚洲精品乱码久久久久久日本蜜臀| 日本一区二区电影| 国产精品久久久久一区二区三区| 日韩亚洲欧美成人一区| 精品噜噜噜噜久久久久久久久试看|