首页 > 其他分享 >解析vue项目、

解析vue项目、

时间:2023-09-21 21:24:37浏览次数:31  
标签:password vue name lqz 项目 组件 import 解析

解析一下vue项目

1 为什么浏览器中访问某个地址,会显示某个页面组件

//-根组件:App.vue  必须是
        <template>
          <div id="app">
            <router-view></router-view>
          </div>
        </template>
    //-1 配置路由
        router----》index.js---》const routes = [
                {
                path: '/lqz',
                name: 'lqz',
                component: Lqz  # 组件,需要导入
            },
        ]
     //-2 放心大胆的写页面组件  -src---->views文件夹

2 在页面组件中使用小组件

-1 写一个小组件,我们写了个Child.vue
-2 在父组件中,导入组件
   # @ 代指src路径
        import Child from "@/components/Child";
-3 父组件中,注册组件
        components: {
            Child
          }
-4 父组件中使用组件
    <Child :msg="msg" @myevent="handleEvent"></Child>
-5 自定义属性,自定义事件,插槽,跟之前一模一样    

 登录小案例

# 1 登录页面:LoginView.vue
    
# 2 访问/login 显示这个页面组件
# 3 在LoginView.vue写html,和js,axios
    -安装 axios
    -cnpm install -S axios  # 把安装的axios放到package.json中
# 4 写ajax,向后端发送请求,给按钮绑定两个一个事件
    #安装axios,导入axios
        handleSubmit() {
          console.log(this.name, this.password)
          axios.post('http://127.0.0.1:8000/login/', {
            name: this.name,
            password: this.password
          }).then(res => {
            // console.log(res.data)
            if (res.data.code == 100) {
              //跳转到百度
              location.href = 'http://www.baidu.com'
            } else {
              alert(res.data.msg)
            }
          })
        }
# 4 写个后端的登录接口,处理好跨域问题,处理跨域如下



####解决后端跨域问题#####
    1 安装
        pip3.8 install django-cors-headers
    2 注册app
        INSTALLED_APPS = (
            ...
            'corsheaders',
            ...
        )
    3 配置中间件
        MIDDLEWARE = [  
            ...
            'corsheaders.middleware.CorsMiddleware',
            ...
        ]
    
    4 配置文件中加入:setting下面添加下面的配置
        CORS_ORIGIN_ALLOW_ALL = True
        CORS_ALLOW_METHODS = (
            'DELETE',
            'GET',
            'OPTIONS',
            'PATCH',
            'POST',
            'PUT',
            'VIEW',
        )

        CORS_ALLOW_HEADERS = (
            'XMLHttpRequest',
            'X_FILENAME',
            'accept-encoding',
            'authorization',
            'content-type',
            'dnt',
            'origin',
            'user-agent',
            'x-csrftoken',
            'x-requested-with',
            'Pragma',
            'token'
        )

后端

# 视图类

from rest_framework.response import Response
from rest_framework.viewsets import GenericViewSet
from rest_framework.decorators import action
from .serializer import UserSerializer


class MyUserView(GenericViewSet):
    serializer_class = UserSerializer

    @action(methods=['POST'], detail=False)
    def login(self, request, *args, **kwargs):
        ser = self.get_serializer(data=request.data)
        if ser.is_valid():

            return Response({'code': 100, 'msg': '登录成功'})
        else:
            return Response({'code': 101, 'msg': '登录失败'})



# 序列化类

from app01.models import User
from rest_framework import serializers
from rest_framework.exceptions import ValidationError


class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

    def _get_user(self, attrs):
        # 用户名从哪里拿?attrs是前端传入,校验过后的数据
        name = attrs.get('name')
        password = attrs.get('password')
        user = User.objects.filter(name=name, password=password).first()
        if user:
            return user
        else:
            raise ValidationError('用户名或密码错误')

    def validate(self, attrs):
        user = self._get_user(attrs)
        return user

前端vue

<template>
  <div>
    <p>用户名:<input type="text" v-model="name"></p>
    <p>密码:<input type="password" v-model="password"></p>
    <button @click="handleSubmit">登录</button>
  </div>
</template>

<script>
import axios from 'axios'

export default {
  name: "LoginView",
  data() {
    return {
      name: '',
      password: '',
    }
  },
  methods: {
    handleSubmit() {
      // console.log(this.name,this.password)
      axios.post('http://127.0.0.1:8000/login/', {
        name: this.name,
        password: this.password
      }).then(res => {
        if (res.data.code === 100) {
          // 跳转到百度
          console.log(res.data)
          // location.href = 'http://www.baidu.com/'
        } else {
          alert(res.data.msg)
        }
      })
    }
  },
}
</script>

<style scoped>

</style>

scoped关键字

新建的组件  加了scoped,表示样式只在当前组件生效,如果不加,子组件都会使用这个样式

<style scoped>
</style>

ref属性

ref属性

  放在普通标签上,通过  this.$refs.名字==》取到的是dom对象,可以直接操作dom

  放到组件上,通过  this.$refs.名字==》取到的是组件对象,这样在父组件中,就拿到了子组件对象,对象属性和方法直接用即可

props其他

# 父传子之自定义属性

  # 1 基本使用
    props: ['msg'],
  # 2 限制类型:
    props: {'msg': Boolean},
  # 3 限制类型,必填,默认值
     props: {
        msg: {
          type: String, //类型
          required: true, //必要性
          default: '老王' //默认值
        }
      }

混入mixin

# 包下的 index.js  有特殊函数,
    -之前导入 
    import xx from './mixin/index.js'
    -可以写成
    import xx from './mixin'

# mixin(混入)
    功能:可以把多个组件共用的配置提取成一个混入对象

# 使用步骤
    1 定义混入对象:mixin---》index.js中写
        export const lqz = {
            data() {
                return {
                    name: 'lqz'
                }
            },
            methods: {
                handleName() {
                    alert(this.name)
                }
            }
        }
    2 使用混入:局部使用,组件中使用
        import {lqz} from '@/mixin'
         mixins: [lqz]
    3 全局使用混入:每个组件都有效main.js中
        import {lqz} from '@/mixin'
        Vue.mixin(lqz)

插件

插件功能:用于增强Vue,有很多第三方插件

  (vue、router、elemetui)

定义自己的插件

本职:包含 install 方法的一个对象,install的第一个参数是Vue,第二个以后的参数是插件使用者传递的数据

使用步骤:

1 定义插件:plugins---》index.js---》
        export default {
            install() {
            # 1 在vue实例中放属性
            # 2 定义混入,全局都可以使用混入
            # 3 自定义指令(不讲了)---》以后我们可能使用了一个第三方插件,它提供了一些指令  v-lq
            # 4 定义全局组件---》全局
        }
    }
    2 在main.js中 使用插件
        import lqz from '@/plugins'
        Vue.use(lqz)  # 这句话,就会执行lqz中得install,并且把vue传入

Elementui

ui 库,控制样式的,它就是vue的一个插件

 

在vue项目中引入  elementui

1 在项目中安装:

  cnpm install element-ui -S

2 main.js配置

import ElementUI from 'element-ui'; ==》把对象引入

 

import 'element-ui/lib/theme-chalk/index.css'; ==》把样式引入

Vue.use(ElementUI)

3 看到好看的,直接复制

  -html

  -css

  -js

 

标签:password,vue,name,lqz,项目,组件,import,解析
From: https://www.cnblogs.com/zfq132/p/17720972.html

相关文章

  • 个人项目互评
    个人项目互评1前言本文是应要求对结对编程队友韩成玉同学的个人项目评价的分析与评价。个人看法可能不全面,理解有偏差,还望理解2个人项目需求本次个人项目的需求如下:用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设......
  • react的todolist拆分项目
    React的todolist的拆分项目TodoList.jsximportTodofrom"./Todo"exportdefaultfunctionTodoList({todos,toggleTodo,deleteTodo}){return<><ul>{todos.map(todo=><......
  • zookeeper中zoo.cfg参数解析
    ticktime=20002000为通信心跳inilimit=10lf(leadersandfollow)初始通信时限10*2000添加配置server.A=B:C:DA是一个数字表示第几号服务器B是这个服务器的地址C是这个服务器follow和leader交换信息的端口D是万一服务器挂了需要一个端口重新来进行选举,选出一个新的leader,这......
  • 如何修改vue-cli3预设的terser-webpack-plugin?
    要修改VueCLI3预设的terser-webpack-plugin插件配置,您可以使用VueCLI提供的配置文件和插件配置选项。以下是一些步骤来实现这个目标:创建配置文件:在您的VueCLI3项目根目录下,可以创建一个名为vue.config.js的文件,如果项目中还没有这个文件。这个文件将用于配置webpack......
  • Vue执行和开发流程、登录小案例、混入、插件、elementui
    一、Vue执行流程1、vue的执行流程#1为什么浏览器中访问某个地址,会显示某个页面组件 -根组件:App.vue必须是<template><divid="app"><router-view></router-view></div> </template> -1配置路由 router--......
  • 个人项目互评——中小学数学卷子自动生成程序
    项目需求用户小学、初中和高中数学老师。功能1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请输入正确的用户名......
  • HNU个人项目评测
    HNU个人项目评测——中小学数学试卷自动生成程序简介本博客是对于结对编程队友周润荣个人项目代码的评价与总结,代码使用Java语言编写。项目要求1.命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示......
  • 湖南大学个人项目互评-中小徐数学卷子自动生成程序
    个人项目互评一、简介项目名称:中小学数学卷子自动生成程序编程语言:Java代码作者:李令博评价人:刘洋二、功能完成情况及测试代码基本实现了要求中的功能代码运行测试:输出结果测试:产生题目的文件按照当前时间命名:每一位教师拥有单独的文件夹:功能不足:题目产生后,没有实......
  • 湖南大学个人项目互评
    代码作者:吕镇鑫项目需求:用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高中各三个账号,具体见附表),如果用户名和密码都正确,将根据账户类型显示“当前选择为XX出题”,XX为小学、初中和高中三个选项中的一个。否则提示“请......
  • 湖南大学个人项目C++互评
    优点模块化设计:代码有一个良好的模块化设计,其中每个类和函数都有一个特定的目的。可扩展性:由于使用了继承和多态,该设计易于扩展。例如,添加新类型的问题生成器相对简单。用户交互:代码包含用户交互,允许用户登录并选择问题类型和数量。文件操作:代码成功地将生成......