Django和Vue.js构建的SPA示例

1. 正文

在本文中,我们将讨论使用Django和Vue.js构建单页应用程序(SPA)的示例。Django是一种基于Python的Web框架,而Vue.js是一种JavaScript框架,专注于构建用户界面(UI)。

1.1 Djang

我们将从Django开始。Django是一种MVC框架,这意味着它将应用程序分为Model(模型)、View(视图)和Controller(控制器)。 它还具有内置的ORM(对象关系映射),使得将应用程序与数据库进行交互变得更加容易。 ORM还将使得在我们代码中进行数据库更改变得很容易,因为它们更像是使用Python编写的代码而不是SQL语句。

我们将使用Django来构建我们的后端,并将它连接到前端Vue.js框架。 我们将使用Django REST框架,它是将Django转化为RESTful API的扩展。尽管不一定需要使用Django REST框架构建我们的API,但它是一种流行的选择,因为它可以快速生成模型(以及模型之间的关系),并为我们的API自动生成文档。

我们可以使用命令行安装Django REST框架,它会自动下载Django和其他必要的依赖项。在命令行输入以下命令,启动Django项目:

pip install djangorestframework

现在,我们已经成功安装了Django REST框架,我们可以创建一个新的Django项目并添加REST框架。我们将创建一个名为mysite的新Django项目:

django-admin startproject mysite

在安装完成后,我们将在settings.py文件中添加REST框架。 我们将首先添加'rest_framework'到INSTALLED_APPS列表中。 然后,我们将设置REST框架的默认配置:

INSTALLED_APPS = [

# ...

'rest_framework',

]

REST_FRAMEWORK = {

'DEFAULT_PERMISSION_CLASSES': [

'rest_framework.permissions.AllowAny',

],

'DEFAULT_AUTHENTICATION_CLASSES': [

'rest_framework.authentication.SessionAuthentication',

],

}

尝试运行服务器,确保一切都可以正常工作:

python manage.py runserver

现在,我们已经成功安装了Django REST框架,并已经创建了一个新的Django项目,我们可以开始将前端Vue.js框架与后端Django项目连接起来。

1.2 Vue.js

Vue.js是一种专注于UI的JavaScript框架。 Vue.js被设计为可以轻松与其他框架和库协同工作,包括React和Angular等框架。 Vue.js的主要目标是提供一种简单的方式来将UI组件化,并将这些组件与其他组件组合在一起。

我们将使用Vue.js来构建我们的前端,并将它连接到我们的Django后端。我们将使用Vue.js CLI来快速生成Vue.js应用程序。在命令行输入以下命令,安装Vue.js CLI工具:

npm install -g vue-cli

创建一个新的Vue.js项目,并链接到我们的Django后端:

vue create myproject

cd myproject

npm install axios --save

使用编辑器打开src / main.js文件,我们将关键的部分添加到Vue.js项目中。 我们将添加以下代码:

import Vue from 'vue'

import App from './App.vue'

import router from './router'

import axios from 'axios'

Vue.config.productionTip = false

new Vue({

router,

render: h => h(App),

created() {

const token = localStorage.getItem('token')

if (token) {

axios.defaults.headers.common['Authorization'] = `Token ${token}`

}

}

}).$mount('#app')

我们还需要在src / router.js文件中添加路由器。 我们将添加以下代码:

import Vue from 'vue'

import Router from 'vue-router'

import Home from './views/Home.vue'

import Login from './views/Login.vue'

import Register from './views/Register.vue'

Vue.use(Router)

export default new Router({

mode: 'history',

routes: [

{

path: '/',

name: 'home',

component: Home

},

{

path: '/login',

name: 'login',

component: Login

},

{

path: '/register',

name: 'register',

component: Register

}

]

})

现在,我们已经成功建立了Django后端和Vue.js前端之间的连接。

1.3 示例应用程序

现在我们将创建一个示例应用程序,它将显示所有用户并允许注册新用户。 我们将使用DRF的Serializers和Views构建我们的API,并使用Vue.js构建我们的前端。

首先,让我们创建一个Django应用程序,该应用程序将处理我们的用户数据:

python manage.py startapp users

现在,我们将在users(新建应用程序) / models.py文件中定义用户模型。 我们将添加以下代码:

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):

pass

现在,我们将在users(新建应用程序) / serializers.py文件中定义该用户模型的序列化器。 我们将添加以下代码:

from rest_framework import serializers

from .models import User

class UserSerializer(serializers.ModelSerializer):

class Meta:

model = User

fields = ('id', 'username', 'email')

现在,我们将在users(新建应用程序) / views.py文件中定义我们的用户视图。 视图将处理所有关于用户的请求。 我们将添加以下代码:

from django.shortcuts import render

from rest_framework import generics

from .models import User

from .serializers import UserSerializer

class UserList(generics.ListCreateAPIView):

queryset = User.objects.all()

serializer_class = UserSerializer

class UserDetail(generics.RetrieveUpdateDestroyAPIView):

queryset = User.objects.all()

serializer_class = UserSerializer

接下来我们需要在mysite(Django项目) / urls.py文件中将该视图添加到我们的路由中。 我们将添加以下代码:

from django.contrib import admin

from django.urls import path, include

from rest_framework.authtoken.views import obtain_auth_token

from users.views import UserList, UserDetail

urlpatterns = [

path('admin/', admin.site.urls),

path('api/', include('rest_framework.urls')),

path('api-token-auth/', obtain_auth_token, name='api_token_auth'),

path('users/', UserList.as_view(), name='user_list'),

path('users//', UserDetail.as_view(), name='user_detail')

]

使用命令行创建Vue.js相关组件。我们将创建视图组件,它们将显示所有用户并允许用户注册:

vue generate view UserList

vue generate view UserDetail

vue generate view Register

接下来,让我们在src / components目录下创建一个名为Api.js的文件。它将包含所有与Django后端通信的功能。 在文件中添加以下JavaScript代码:

import axios from 'axios'

export default () => {

return axios.create({

baseURL: 'http://localhost:8000'

})

}

现在,我们将在src / views / Register.vue组件中添加以下代码。 它将启动用户注册UI:

现在,我们将在src / views / UserList.vue组件中添加以下代码。 它将显示所有用户:

最后,我们将在src / App.vue文件中添加以下代码。 它将展示我们的用户UI,并将所有的Vue.js路由与我们的应用连接起来:

现在,我们已经成功构建了一个单页应用程序(SPA)示例,使用Django和Vue.js连接。

后端开发标签