pycharm 创建vue并实现简易路由功能

使用pycharm创建vue项目时,选择vite来创建vue。为什么使用vite?因为vite是专门针对vue开发的打包框架,以前使用vue-cli来创建vue项目,就是使用的webpack来进行打包的,现在有了vite,就尽量使用vite来创建vue项目。

在pycharm中新建项目,选择vite,再在右边模板里,选择vue,这样就是使用最新的vite版本,来创建vue项目了。

默认的启动配置,自动填上了运行命令。

点击启动,项目就开始运行了。

vue官网上有简易的路由代码。先在components文件夹下生成两个简单的组件。

<script setup>

</script>

<template>
<h1>aaaaaa</h1>
</template>

<style scoped>

</style>

 然后修改App.vue里面的代码为:

<script setup>
import {ref, computed} from 'vue'
import HelloWorld from './components/HelloWorld.vue'
import A from './components/a.vue'
import B from './components/b.vue'

const routes = {
  '/': A,
  '/about': B
}
const currentPath = ref(window.location.hash)
window.addEventListener('hashchange', () => {
  currentPath.value = window.location.hash
})
const currentView = computed(() => {
  return routes[currentPath.value.slice(1) || '/'] || HelloWorld
})
</script>

<template>
  <div>
    <a href="https://vitejs.dev" target="_blank">
      <img src="/vite.svg" class="logo" alt="Vite logo"/>
    </a>
    <a href="https://vuejs.org/" target="_blank">
      <img src="./assets/vue.svg" class="logo vue" alt="Vue logo"/>
    </a>
  </div>


  <a href="#/">Home</a> |
  <a href="#/about">About</a> |
  <a href="#/HelloWorld">HelloWorld</a>
  <component :is="currentView"/>

</template>

<style scoped>
.logo {
  height: 6em;
  padding: 1.5em;
  will-change: filter;
  transition: filter 300ms;
}

.logo:hover {
  filter: drop-shadow(0 0 2em #646cffaa);
}

.logo.vue:hover {
  filter: drop-shadow(0 0 2em #42b883aa);
}
</style>

这样不适用路由插件,就实现了路由功能。

还有关于ts的使用,有教程里的老师说,90%以上的项目,根本用不上ts的功能,还增加了复杂程度。要使用ts,首先是要用在大项目上,大厂里的大项目,才算大项目。其次,立志于进大厂,学习研究之用,学学ts可以。其他的非大厂的,也不会进大厂的,ts与你无关……,这话虽然诛心,但就是事实啊。没有必要为了用不到的功能项目,为自己增加至少20%以上的无用功啊。ts至少让项目增加20%的无用功,既是ts增加的无效时间,对项目没有啥用的修修补补规则上的。

<think>好的,我需要帮助用户了解如何使用Python Django和Vue3搭建一个支持用户登录注册及画作上传存储的测试平台。首先,我应该回顾用户提供的引用内容,确保回答符合他们的参考资料。 根据引用[1],系统使用的是Django框架,Python 3.7.7,MySQL 5.7,Navicat11和PyCharm。这些信息需要整合到教程中,确保环境配置正确。引用[2]提到了菜鸟教程的Python资源,可能对用户学习有帮助,可以适当推荐。引用[3]详细描述了邮箱注册流程,这部分内容需要融入用户注册功能实现步骤中。 接下来,我需要规划整个教程的结构。通常,搭建一个全栈平台需要分后端和前端两部分。后端使用Django处理用户认证和文件存储,前端Vue3构建用户界面,通过API与后端交互。同时,需要配置数据库,这里使用MySQL 5.7,按照引用[1]的要求。 首先,环境准备部分需要确认Python版本、Django安装、Node.jsVue CLI的安装。然后,创建Django项目和应用,设置数据库连接。用户模型可能需要扩展,但Django自带的User模型已经足够处理登录注册,可以暂时使用内置的,之后有需要再扩展。 关于用户认证,Django有内置的auth模块,可以处理用户注册和登录。但可能需要使用DRF(Django REST Framework)来创建API端点,供Vue3前端调用。因此,需要安装DRF配置序列化器和视图。 文件上传部分,Django处理文件上传需要配置MEDIA_ROOT和MEDIA_URL,创建模型来存储画作信息,比如画作的标题、描述、上传时间和文件路径。视图需要处理POST请求,保存上传的文件,关联当前用户。 前端部分,使用Vue3创建项目,配置axios进行HTTP请求。需要创建注册、登录和上传表单页面,通过路由管理不同页面。在Vue组件中,处理表单提交,调用后端API,管理用户状态,比如使用Vuex或Pinia来存储登录状态。 跨域问题需要注意,因为前端和后端可能运行在不同端口,需在Django中配置CORS中间件。 测试环节需要确保各个功能正常,比如用户注册后能登录,上传的画作能正确存储显示。可能还需要处理文件类型和大小的限制,以及错误提示。 最后,部署方面可以简要提及,但用户目前可能只需要开发环境,所以可能不需要详细说明。 现在需要检查是否有遗漏的步骤,比如数据库迁移、静态文件配置、安全设置(如密码哈希)、API端点设计等。确保每个步骤都清晰,参考用户提供的引用内容,特别是数据库版本和开发工具。 可能的问题点:用户认证使用JWT还是session?考虑到教程的简易性,可能先使用session,但前后端分离通常用JWT。不过Django和DRF可以支持TokenAuthentication,或者使用JWT库,比如djangorestframework-simplejwt。需要根据用户情况选择,但教程中可能需要简化,使用DRF的token认证或session。 文件上传的API设计需要处理multipart/form-data,确保DRF能正确解析上传的文件,在视图中关联当前用户。 前端部分,如何处理用户状态,比如登录后保存token或session ID,在后续请求中携带。Vue3中可以使用vue-router进行导航守卫,保护需要认证的路由。 需要确保所有步骤代码正确,比如Django的settings.py配置,Vue的环境变量设置,API请求的URL正确。可能还需要提供示例代码片段,如Django的模型、视图、序列化器,以及Vue的组件和API调用方法。 总结:整个教程需要分步骤,从环境搭建到后端开发,再到前端集成,最后测试功能。确保引用中的数据库版本和工具被正确使用,指导用户如何处理用户注册、登录和文件上传的各个环节。</think>### 使用 Python Django 和 Vue3 搭建测试平台教程 本教程将分步骤指导搭建支持用户登录注册及画作上传功能简易测试平台,结合引用内容中的技术栈(Python 3.7.7 + Django + MySQL 5.7 + Vue3)[^1]。 --- #### **一、环境准备** 1. **安装Python 3.7.7** 从[Python官网](https://www.python.org/)下载指定版本,配置环境变量。 2. **安装Django** ```bash pip install django==3.2 ``` 3. **安装MySQL 5.7** 使用Navicat 11管理数据库(引用[1]要求)[^1]。 4. **安装Node.jsVue CLI** 前端使用Vue3: ```bash npm install -g @vue/cli ``` --- #### **二、Django后端开发** 1. **创建Django项目** ```bash django-admin startproject ArtPlatform cd ArtPlatform python manage.py startapp api ``` 2. **配置MySQL数据库** 修改`settings.py`: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'art_db', 'USER': 'root', 'PASSWORD': 'your_password', 'HOST': 'localhost', 'PORT': '3306', } } ``` 3. **创建用户模型(使用Django内置)** 无需额外定义,直接使用`django.contrib.auth.models.User`[^2]。 4. **实现用户注册/登录API** - 安装DRF(Django REST Framework): ```bash pip install djangorestframework ``` - 创建序列化器`api/serializers.py`: ```python from rest_framework import serializers from django.contrib.auth.models import User class UserSerializer(serializers.ModelSerializer): class Meta: model = User fields = ('id', 'username', 'email', 'password') extra_kwargs = {'password': {'write_only': True}} ``` - 编写注册视图`api/views.py`: ```python from rest_framework import status from rest_framework.response import Response from rest_framework.decorators import api_view from django.contrib.auth import authenticate from .serializers import UserSerializer @api_view(['POST']) def register(request): serializer = UserSerializer(data=request.data) if serializer.is_valid(): user = serializer.save() return Response({'message': '注册成功'}, status=status.HTTP_201_CREATED) return Response(serializer.errors, status=400) ``` 5. **画作上传功能** - 创建模型`api/models.py`: ```python from django.db import models from django.contrib.auth.models import User class Artwork(models.Model): user = models.ForeignKey(User, on_delete=models.CASCADE) title = models.CharField(max_length=100) image = models.ImageField(upload_to='artworks/') uploaded_at = models.DateTimeField(auto_now_add=True) ``` - 配置文件存储(`settings.py`): ```python MEDIA_ROOT = os.path.join(BASE_DIR, 'media') MEDIA_URL = '/media/' ``` - 添加上传视图: ```python from rest_framework.parsers import MultiPartParser from rest_framework.decorators import api_view, parser_classes @api_view(['POST']) @parser_classes([MultiPartParser]) def upload_artwork(request): if not request.user.is_authenticated: return Response({'error': '未登录'}, status=401) Artwork.objects.create( user=request.user, title=request.data['title'], image=request.data['image'] ) return Response({'message': '上传成功'}, status=201) ``` --- #### **三、Vue3前端开发** 1. **初始化Vue项目** ```bash vue create frontend cd frontend npm install axios vue-router ``` 2. **实现用户注册页面** ```vue <!-- src/views/Register.vue --> <template> <form @submit.prevent="handleRegister"> <input v-model="form.username" placeholder="用户名"> <input v-model="form.email" type="email" placeholder="邮箱"> <input v-model="form.password" type="password" placeholder="密码"> <button type="submit">注册</button> </form> </template> <script setup> import axios from 'axios'; const form = reactive({ username: '', email: '', password: '' }); const handleRegister = async () => { await axios.post('http://localhost:8000/api/register/', form); }; </script> ``` 3. **配置路由和状态管理** - 路由配置`src/router/index.js`: ```javascript import { createRouter, createWebHistory } from 'vue-router'; import Register from '../views/Register.vue'; const routes = [{ path: '/register', component: Register }]; const router = createRouter({ history: createWebHistory(), routes }); export default router; ``` --- #### **四、前后端联调** 1. **解决跨域问题** 安装Django CORS中间件: ```bash pip install django-cors-headers ``` 修改`settings.py`: ```python INSTALLED_APPS = ['corsheaders', ...] MIDDLEWARE = ['corsheaders.middleware.CorsMiddleware', ...] CORS_ALLOW_ALL_ORIGINS = True # 开发环境临时允许所有域名 ``` 2. **启动服务** - 后端:`python manage.py runserver` - 前端:`npm run serve` --- #### **五、功能测试** 1. **用户注册** 访问`http://localhost:8080/register`,填写表单提交后检查数据库`auth_user`表是否新增记录[^3]。 2. **画作上传** 在前端添加文件上传表单,调用`/api/upload/`接口,检查`media/artworks/`目录是否生成文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值