# 做项目:肯定要写模块--导入使用
# 如果包下有个 index.js 直接导到index.js上一次即可
默认导出和导入 :????????
export default name // 只导出变量 export default add // 只导出函数 export default {name,add} // 导出对象 export default { name:"彭于晏", add: (a,b)=>{ return a+b } } import lqz from './lqz/utils' // 相对导入,相对于当前文件 import lqz from '@/lqz/utils' // 绝对导入,src路径,但是需要写个 @
命名导出和导入:
export const age = 99 // 命名导出 export const add = (a, b) => a + b export const showName = name => { console.log(name) } export const obj={ name:'lqz', show(){ alert('show') } // 命名导出对象 } import {showName,obj} from '@/lqz/common.js' //命名导入需加小括号 // 以后可以使用obj 对象 ,又可以点 obj.xx
# 单页面应用是指只有一个html,如果要实现页面跳转的效果,其实就是组件的跳转
# 组件跳转:需要借助于第三方:vue-router?1、需要在?App.vue 写个标签---以后不要再写任何其他东西了
<template> <div id="app"> ? ? <router-view> ? ? ? ? </router-view> ? ? </div> </template>
2、 router / index.js:注册组件
?? ?// 1 导入 ? ? import LoginView from "@/views/LoginView"; ? ? import IndexView from "@/views/IndexView"; ? ? import AboutView from "@/views/AboutView"; // 2 注册路由 ? ? const routes = [? ? ? ? { ? ? ? ? path: '/', ? ? ? ? name: 'home', ? ? ? ? component: IndexView ? ? }, ? ? { ? ? ? ? path: '/login', ? ? ? ? name: 'login', ? ? ? ? component: LoginView ? ? }, ? ? { ? ? ? ? path: '/about', ? ? ? ? name: 'about', ? ? ? ? component: AboutView ? ? }, ]
3、以后再浏览器访问不同路径,就会显示不同组件(页面组件--->views中)
*axios(vue):项目中使用axios ?需要安装? ?
cnpm install -S axios
1、导入:import axios from 'axios'
2、使用:axios.get().then()? ??created() { axios.get('http://127.0.0.1:8000/film/').then(res => { this.filmList = res.data.results }) }
*跨域问题(django):
// 安装 pip3 install django-cors-headers
--setting文件的配置:
INSTALLED_APPS = ( ... ? ? 'corsheaders', ? ? ...) # 注册 MIDDLEWARE = [ ? ? ? ... ? ? 'corsheaders.middleware.CorsMiddleware', ? ? ...] # 添加中间件 # 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' )
* 前端页面组件跳转(vue):? ??
this.$router.push('router/index.js/配置过的路径')
# models.py from django.db import models from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): gender = models.IntegerField(choices=((1, '男'), (2, '女'), (0, '未知')),null=True) age = models.IntegerField(null=True) phone = models.CharField(max_length=11,null=True)
# serializer.py from rest_framework_simplejwt.serializers import TokenObtainPairSerializer class LoginSerializer(TokenObtainPairSerializer): def validate(self, attrs): res = super().validate(attrs) user = self.user data = {'code': 100, 'msg': '登录成功', 'username': user.username, 'gender': user.get_gender_display()} data.update(res) return data
# views.py from django.shortcuts import render import json from rest_framework.views import APIView from rest_framework.response import Response class FilmView(APIView): def get(self, request): with open('./film.json', 'rt', encoding='utf-8') as f: res = json.load(f) return Response(res)
# urls.py from django.contrib import admin from django.urls import pat from rest_framework_simplejwt.views import token_obtain_pair from app01 import views urlpatterns = [ path('admin/', admin.site.urls), path('login/', token_obtain_pair), path('film/', views.FilmView.as_view()), ]
# settings.py # 自定义user表 AUTH_USER_MODEL = 'app01.userinfo' # 使用内置登录 SIMPLE_JWT = { "TOKEN_OBTAIN_SERIALIZER": "app01.serializer.LoginSerializer", } # 全局异常处理 REST_FRAMEWORK = { 'EXCEPTION_HANDLER': 'app01.exceptions.common_exception_handler', } # 解决跨域问题 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' )
// router/index.js import Vue from 'vue' import VueRouter from 'vue-router' import LoginView from "@/views/LoginView"; import IndexView from "@/views/IndexView"; Vue.use(VueRouter) // 注册路由 const routes = [ { path: '/', name: 'home', component: IndexView }, { path: '/login', name: 'login', component: LoginView }, ] const router = new VueRouter({ mode: 'history', base: process.env.BASE_URL, routes }) export default router
// LoginView.vue <template> <div> <h1>登录</h1> <p>用户名:<input type="text" v-model="username"></p> <p>密码:<input type="password" v-model="password"></p> <p> <button @click="handleSubmit">登录</button> </p> </div> </template> <script> import http from 'axios' export default { name: "LoginView", data() { return { username: '', password: '' } }, methods: { handleSubmit() { //发送ajax请求 http.post('http://127.0.0.1:8000/login/', { username: this.username, password: this.password }).then(response => { if (response.data.code == 100) { // 跳转 vue-router支持的 this.$router.push('/') } else { alert(response.data.msg) } }) } } } </script> <style scoped> </style>
// IndexView.vue <template> <div> <h1>首页</h1> <div v-for="film in filmList"> <img :src="film.poster" alt="" height="200px" width="150px"> <div> <h3>{{ film.name }}</h3> <p>主演: <span v-for="item in film.actors"> {{ item.name }} </span> </p> <p>{{ film.nation }}|{{ film.runtime }}</p> </div> </div> </div> </template> <script> import axios from 'axios' export default { name: "IndexView", data() { return { filmList: [] } }, created() { axios.get('http://127.0.0.1:8000/film/').then(res => { this.filmList = res.data.results }) } } </script> <style scoped> </style>
# 以后css样式,都写在vue组件的 <style> 标签中
# style标签上写 scoped 这个样式只在当前组件中生效<style scoped> h1 { ? background-color: aqua; } </style>
# 自己写样式---->copy别人的,使用第三方ui库
? ? ? ? ? ? * Element UI ?2.x ?3.x
? ? ? ? ? ? * Ant Design of Vue:web端
? ? ? ? ? ? * Vant UI ?:移动端ui
# elementui:cnpm i element-ui -S
# main.js中引入:
import ElementUI from 'element-ui'; import 'element-ui/lib/theme-chalk/index.css'; Vue.use(ElementUI);
# 登录--》注册? ?使用emelentui?
# 列出所有用户(自定义过滤器)--->点击关注请求
?? ?????????性别
? ? ????????年龄? ? ?gender=2&age_gt=18&age_lt=30
? ? 加好友申请--->好友申请表
# 另一个人登录进去--->看到你的申请,点同意,你们就可以聊天
? ? 如:id为2的用户? ? ? ? ? 列出所有加我好友的用户
? ? ? ? ? 查询to_user等于当前用户id的from_user的id放到列表中
? ? ??????查用户表:id在 id__in [1,99]
? ?????????User.objects.filter(id__in=[1,99])? ? # 序列化返回给前端
? ? 同意:带着这个人的id,和你的id去好友申请表中改 is_allow
# 进入聊天室:下拉查看所有好友
?? ?跟写所有申请好友接口一样,多了一个限定条件,is_allow=1的
?? ?from_user ?contnet ?to_user:用户id
# 定向聊天
代码:????????...