手把手教你使用Django + Vue.js 快速构建项目

我来为你讲解"手把手教你使用Django + Vue.js 快速构建项目"的完整攻略。该攻略包括两个示例说明。

简介

Django是一个Python Web框架,Vue.js是一个流行的前端框架。Django+Vue.js的组合可以快速构建一个全栈Web应用程序。攻略主要包括以下步骤:

  1. 创建Django项目
  2. 创建Vue.js项目
  3. 使用Django Rest Framework创建API
  4. 使用Vue.js进行前端开发
  5. 将Django和Vue.js集成到一起

示例一:创建一个简单的Todo List

步骤一:创建Django项目

首先在命令行中输入以下代码来创建一个Django项目:

django-admin startproject todo_list

然后进入todo_list目录:

cd todo_list

接下来,我们需要创建一个Django应用程序。在终端中输入以下命令:

python manage.py startapp todo

现在我们已经有了一个名为todo的Django应用程序,接下来我们需要在todo目录下创建一个models.py文件,该文件将定义我们的Todo项目模型。

from django.db import models

class TodoItem(models.Model):
    title = models.CharField(max_length=200)

接下来,我们需要创建一个serializers.py文件来创建一个关于Todo项目的序列化类。

from rest_framework import serializers
from .models import TodoItem

class TodoItemSerializer(serializers.ModelSerializer):
    class Meta:
        model = TodoItem
        fields = '__all__'

完成序列化器之后,我们可以开始构建API视图。在todo目录下创建views.py文件:

from rest_framework import generics
from .models import TodoItem
from .serializers import TodoItemSerializer

class TodoList(generics.ListCreateAPIView):
    queryset = TodoItem.objects.all()
    serializer_class = TodoItemSerializer

添加一个URL模式到todo应用中的urls.py

from django.urls import path
from .views import TodoList

urlpatterns = [
    path('api/todo', TodoList.as_view())
]

现在我们已经完成了Django的设置,现在便是Vue.js的设置。

步骤二:创建Vue.js项目

为了使用 Vue.js,你需要首先安装 Node.js。在命令行中输入以下命令来确保 Node.js 已经正确安装:

node -v

接下来,我们需要安装 Vue.js。输入以下命令:

npm install vue

接下来,我们需要安装一个CLI命令行工具来创建和管理Vue项目。输入以下命令:

npm install -g vue-cli

现在我们可以创建Vue应用程序了。在终端中,输入以下命令:

vue init webpack todo_list_frontend

在创建过程中,你会被询问一些问题,如项目名称和包的类型。完成之后,在命令行中输入以下命令来安装依赖项:

cd todo_list_frontend
npm install

步骤三:使用Django Rest Framework创建API

我们已经在示例一中为Django项目创建了API视图,现在我们需要在Vue.js项目中使用这个API视图。我们首先需要安装axios库,用于在JavaScript中访问我们的API视图。在命令行中输入以下命令来安装:

npm install axios

在Vue.js项目中创建一个store.js文件,用于管理Todo项目的状态。

import axios from 'axios'

const state = {
  items: []
}

const mutations = {
  setItems(state, items) {
    state.items = items
  },
  addItem(state, item) {
    state.items.push(item)
  }
}

const actions = {
  async loadItems({commit}) {
    const response = await axios.get('/api/todo/')
    const items = response.data
    commit('setItems', items)
  },
  async addItem({commit}, title) {
    const response = await axios.post('/api/todo/', {title})
    const addedItem = response.data
    commit('addItem', addedItem)
  }
}

export default {
  state,
  mutations,
  actions
}

我们现在需要更新App.vue以使用Vuex存储Todo项目状态:

<template>
  <div>
    <h1>Todo List</h1>
    <form @submit.prevent="addItem">
      <input type="text" placeholder="Add a todo item" v-model="newItemTitle">
      <button>Add</button>
    </form>
    <ul>
      <li v-for="item in items" :key="item.id">{{item.title}}</li>
    </ul>
  </div>
</template>

<script>
import { mapActions, mapState } from 'vuex'

export default {
  name: 'app',
  data() {
    return {
      newItemTitle: ''
    }
  },
  mounted() {
    this.loadItems()
  },
  methods: {
    ...mapActions(['loadItems', 'addItem']),
  },
  computed: {
    ...mapState(['items'])
  }
}
</script>

现在,我们已经完成了Todo List项目的配置。接下来,我们将学习如何将Django和Vue.js集成到一起。

步骤四:将Django和Vue.js集成到一起

我们需要使用Django来运行Vue.js应用程序。我们可以通过在Django中创建一个视图来完成这一操作。

todo应用程序的views.py文件中,添加以下代码:

from django.views.generic import TemplateView

class Home(TemplateView):
    template_name = 'home.html'

然后,创建一个home.html文件,该文件将通过Django提供的URL路由将Vue.js项目呈现在页面上。

<!DOCTYPE html>
<html>

<head>
  <title>Todo List</title>
</head>

<body>
  <div id="app"></div>
  <script src="{% static 'js/app.js' %}"></script>
</body>

</html>

urls.py文件中添加以下代码来指定一个URL路由:

from django.urls import path
from .views import TodoList, Home

urlpatterns = [
    path('api/todo/', TodoList.as_view()),
    path('', Home.as_view(), name='home')
]

现在你可以运行Django服务器并访问Vue.js应用程序了。

python manage.py runserver

示例一创建的Todo List项目完成。

示例二:创建一个单页面应用程序

步骤一:创建Django项目

同样,我们需要使用Django创建一个Web应用程序。输入以下命令:

django-admin startproject single_page_app

CD进入应用程序目录:

cd single_page_app

创建一个应用程序:

python manage.py startapp api

在应用程序的目录下,创建一个serializers.py文件:

from rest_framework import serializers
from .models import Post

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

api应用中创建views.py,并添加以下代码:

from rest_framework import generics
from .models import Post
from .serializers import PostSerializer

class PostList(generics.ListCreateAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

class PostDetail(generics.RetrieveUpdateDestroyAPIView):
    queryset = Post.objects.all()
    serializer_class = PostSerializer

我们需要在api/urls.py中添加路由:

from django.urls import path
from .views import PostList, PostDetail

urlpatterns = [
    path('api/posts', PostList.as_view()),
    path('api/posts/<int:pk>', PostDetail.as_view())
]

定义模型,我们可以在models.py文件中定义Post模型:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)
    content = models.CharField(max_length=500)

为了支持Vue.js的前端部分,我们还需要为Django设置Cors头。我们将安装django-cors-headers

pip install django-cors-headers

settings.py文件中,添加以下代码:

INSTALLED_APPS = [
    # ...
    'corsheaders',
    # ...
]

MIDDLEWARE = [
    # ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    # ...
]

CORS_ORIGIN_ALLOW_ALL = True

完成所有设置后,我们将创建Vue.js前端部分。

步骤二:创建Vue.js项目

在命令行中,通过以下命令安装Vue.js:

npm install vue

创建一个Vue.js项目:

vue init webpack single_page_app_frontend

安装所有依赖项:

cd single_page_app_frontend
npm install

App.vue中输入以下代码:

<template>
  <div>
    <h1>Single Page App</h1>
    <ul>
      <li v-for="post in posts" :key="post.id">{{post.title}}</li>
    </ul>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: 'app',
  data() {
    return {
      posts: []
    }
  },
  mounted() {
    axios.get('/api/posts/')
      .then(response => this.posts = response.data)
      .catch(error => console.log(error))
  }
}
</script>

src/router/index.js中添加以下代码:

import Vue from 'vue'
import Router from 'vue-router'
import Posts from '@/components/Posts'
import PostDetail from '@/components/PostDetail'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'Posts',
      component: Posts
    },
    {
      path: '/post/:id',
      name: 'PostDetail',
      component: PostDetail
    }
  ]
})

然后在src/store.js中添加以下代码:

const state = {
  posts: []
}

const mutations = {
  setPosts(state, posts) {
    state.posts = posts
  }
}

const actions = {
  async loadPosts({commit}) {
    const response = await axios.get('/api/posts/')
    const posts = response.data
    commit('setPosts', posts)
  }
}

export default {
  state,
  mutations,
  actions
}

完整的示例二已经准备好了,我们可以将Django和Vue.js集成起来。

步骤三:将Django和Vue.js集成到一起

首先,在Vue.js项目中,创建一个新的入口文件index.html,并将其放到根目录下:

{% load static %}
<!DOCTYPE html>
<html>
<head>
    <title>Single Page App</title>
    <link rel="stylesheet" href="https://unpkg.com/element-ui/lib/theme-chalk/index.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
    <div id="app"></div>
    <script src="{% static 'js/manifest.js' %}"></script>
    <script src="{% static 'js/vendor.js' %}"></script>
    <script src="{% static 'js/app.js' %}"></script>
</body>
</html>

我们还需要创建一个Django视图来向前端传递静态HTML:

from django.views.generic import TemplateView

class Home(TemplateView):
    template_name = 'index.html'

urls.py文件中,我们需要添加以下路由:

from django.urls import path
from .views import Home, PostList, PostDetail

urlpatterns = [
    path('api/posts/', PostList.as_view()),
    path('api/posts/<int:pk>/', PostDetail.as_view()),
    path('', Home.as_view(), name='home'),
]

再次运行Django服务器:

python manage.py runserver

现在打开浏览器并前往http://localhost:8000。您应该能够看到示例二的Single Page App项目。

以上便是“手把手教你使用Django + Vue.js 快速构建项目”的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:手把手教你使用Django + Vue.js 快速构建项目 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • django实现api跨域请求访问

    第一步:安装 django-cors-headers pip install django-cors-headers   第二步:配置settings.py文件 ———————–和前端配合指定可以跨域的用户—————————- from corsheaders.defaults import …

    Django 2023年4月11日
    00
  • Python的开发环境安装(MySQL、Django、PyCharm)

    技术 版本 查看命令 官方文档 API文档 下载地址 MySql 8.0.18 D:\mysql-8.0.18-winx64\bin>mysql -u root -p https://www.mysqlzh.com/doc/24.html https://www.mysqlzh.com/doc/194.html https://dev.mysql.co…

    Django 2023年4月11日
    00
  • django-admin.py创建项目失败解决方法

    环境:Ubuntu、python2.7、django1.9.5 当用django-admin.py startproject projectName创建对应的django项目时出现command not found: django-admin.py情况的解决方案: 找到对应的文件django-admin.py的路径:            如图运行相关命令:…

    Django 2023年4月10日
    00
  • 【Django】接收照片,储存文件 前端代码

    后端: from rest_framework.views import APIView from car import settings from django.shortcuts import render, redirect, HttpResponse from dal import models from django.http import Jso…

    Django 2023年4月12日
    00
  • Django分页设置

      1.  “”” 分页组件使用示例: obj = Pagination(request.GET.get(‘page’,1),len(USER_LIST),request.path_info) page_user_list = USER_LIST[obj.start:obj.end] page_html = obj.page_html() return re…

    Django 2023年4月16日
    00
  • django 分页出现 UnorderedObjectListWarning 错误

    django 分页出现此错误: UnorderedObjectListWarning: Pagination may yield inconsistent results with an unordered object_list: <class ‘monitor.models.HostBind’> QuerySet. allow_empty_f…

    Django 2023年4月16日
    00
  • 搭建python django虚拟环境完整步骤详解

    下面我将详细讲解“搭建python django虚拟环境完整步骤详解”的完整攻略,包含两条示例说明。 搭建Python Django虚拟环境完整步骤详解 什么是Python Django虚拟环境 Python是一门非常流行的编程语言,而Django则是Python下的一种Web开发框架。在开发Django项目时,我们需要保证环境的稳定性,避免不同项目之间互相…

    Django 2023年5月16日
    00
  • django 执行 python manage.py makemigrations 报错

    RuntimeError: Model class app_anme.models.xxx doesn’t declare an explicit app_label and isn’t in an application in INSTALLED_APPS.  将app加入settings的INSTALLED_APPS 中

    Django 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部