1. 程式人生 > 實用技巧 >vue框架前後端分離專案之跨域問題及首頁搭建等相關內容-117

vue框架前後端分離專案之跨域問題及首頁搭建等相關內容-117

1 跨域問題

1 同源策略:瀏覽器的安全策略,不允許去另一個域載入資料
2 域:ip或者埠都必須一致
3 前後端分離專案會出現跨域
4 不使用第三方,自己處理
5 CORS:後端技術,跨域資源共享,服務端只要做配置,(本身瀏覽器已經支援了),就支援跨域
-access-control-allow-origin: * # 所有的域都可以向我傳送請求,瀏覽器不會禁止
6 瀏覽器將CORS請求分成兩類:
-簡單請求(simple request)
-非簡單請求(not-so-simple request)
7 滿足以下兩大條件就是簡單請求
(1) 請求方法是以下三種方法之一:
HEAD
GET
POST
(2)HTTP的頭資訊不超出以下幾種欄位:
Accept
Accept-Language
Content-Language
Last-Event-ID
Content-Type:只限於三個值application/x-www-form-urlencoded、multipart/form-data、text/plain

8 簡單請求,只發送一次,如果後端寫了CORS,瀏覽器就不禁止了
9 非簡單請求,發兩次,第一次是OPTIONS(預檢請求),看後端是否允許,如果允許再發真正的請求

1.1 後端自己處理跨域問題

# 寫一箇中間件
from django.utils.deprecation import MiddlewareMixin
class CoreMiddle(MiddlewareMixin):
def process_response(self, request, response):
if request.method == 'OPTIONS': # 處理了非簡單請求
response['Access-Control-Allow-Headers'] = 'Content-Type,authorization'
# 處理了簡單請求
response['Access-Control-Allow-Origin'] = '*'
return response

# setting中註冊
MIDDLEWARE = [
...
'middle.CoreMiddle', # 自己寫的處理跨域問題的中介軟體
...
]

1.2 前端處理跨域

vue.config.js

module.exports = {
devServer: {
proxy: {
'/ajax': {
target: 'https://m.maoyan.com/',
changeOrigin: true
},
'/user': {
target: 'http://127.0.0.1:8000/',
changeOrigin: true
},

}
}
};

# axios傳送請求
this.$axios.get('user/test/').then(item=>{
console.log(item.data)
})
# 修改配置要重啟

2 頭部元件,尾部元件

<template>
<div class="header">
<div class="slogan">
<p>老男孩IT教育 | 幫助有志向的年輕人通過努力學習獲得體面的工作和生活</p>
</div>
<div class="nav">
<ul class="left-part">
<li class="logo">
<router-link to="/">
<img src="../assets/img/head-logo.svg" alt="">
</router-link>
</li>
<li class="ele">
<span @click="goPage('/free-course')" :class="{active: url_path === '/free-course'}">免費課</span>
</li>
<li class="ele">
<span @click="goPage('/actual-course')" :class="{active: url_path === '/actual-course'}">實戰課</span>
</li>
<li class="ele">
<span @click="goPage('/light-course')" :class="{active: url_path === '/light-course'}">輕課</span>
</li>
</ul>

<div class="right-part">
<div>
<span>登入</span>
<span class="line">|</span>
<span>註冊</span>
</div>
</div>
</div>
</div>
</template>

<script>
export default {
name: "Header",
data() {
return {
//sessionStorage中有url_path就使用它,沒有就是 /
url_path: sessionStorage.url_path || '/',
}
},
methods: {
goPage(url_path) {
// 已經是當前路由就沒有必要重新跳轉
if (this.url_path !== url_path) {
//js控制路由跳轉
this.$router.push(url_path);
}
//把當前路徑加入到了sessionStorage
sessionStorage.url_path = url_path;
},
},
// created() {
// sessionStorage.url_path = this.$route.path;
// this.url_path = this.$route.path;
// }
}
</script>

<style scoped>
.header {
background-color: white;
box-shadow: 0 0 5px 0 #aaa;
}

.header:after {
content: "";
display: block;
clear: both;
}

.slogan {
background-color: #eee;
height: 40px;
}

.slogan p {
width: 1200px;
margin: 0 auto;
color: #aaa;
font-size: 13px;
line-height: 40px;
}

.nav {
background-color: white;
user-select: none;
width: 1200px;
margin: 0 auto;

}

.nav ul {
padding: 15px 0;
float: left;
}

.nav ul:after {
clear: both;
content: '';
display: block;
}

.nav ul li {
float: left;
}

.logo {
margin-right: 20px;
}

.ele {
margin: 0 20px;
}

.ele span {
display: block;
font: 15px/36px '微軟雅黑';
border-bottom: 2px solid transparent;
cursor: pointer;
}

.ele span:hover {
border-bottom-color: orange;
}

.ele span.active {
color: orange;
border-bottom-color: orange;
}

.right-part {
float: right;
}

.right-part .line {
margin: 0 10px;
}

.right-part span {
line-height: 68px;
cursor: pointer;
}
</style>
<template>
<div class="footer">
<ul>
<li>關於我們</li>
<li>聯絡我們</li>
<li>商務合作</li>
<li>幫助中心</li>
<li>意見反饋</li>
<li>新手指南</li>
</ul>
<p>Copyright © luffycity.com版權所有 | 京ICP備17072161號-1</p>
</div>
</template>

<script>
export default {
name: "Footer"
}
</script>

<style scoped>
.footer {
width: 100%;
height: 128px;
background: #25292e;
color: #fff;
}

.footer ul {
margin: 0 auto 16px;
padding-top: 38px;
width: 810px;
}

.footer ul li {
float: left;
width: 112px;
margin: 0 10px;
text-align: center;
font-size: 14px;
}

.footer ul::after {
content: "";
display: block;
clear: both;
}

.footer p {
text-align: center;
font-size: 12px;
}
</style>

3 首頁元件,輪播圖元件

<template>
<div>
<el-carousel height="400px">
<el-carousel-item v-for="item in 4" :key="item">
<img src="../assets/img/banner4.png" alt="">
</el-carousel-item>
</el-carousel>
</div>
</template>

<script>
export default {
name: "Banner",

}
</script>

<style scoped>

.el-carousel__item {
height: 400px;
min-width: 1200px;
}
.el-carousel__item img {
height: 400px;
margin-left: calc(50% - 1920px / 2);
}
</style>
<template>
<div id="home">
<Header></Header>
<Banner></Banner>
<br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
內容部分
<br><br><br><br>
<Footer></Footer>
</div>
</template>

<script>

import Header from "../components/Header";
import Footer from "../components/Footer";
import Banner from "../components/Banner";
export default {
name: "Home",
data(){
return {

}
},
components:{
Header,
Footer,
Banner
}
}
</script>

<style scoped>

</style>

4 git入門

1 協同開發:版本管理工具
-svn
-git
2 git能幹什麼
完成 協同開發 專案,幫助程式設計師整合程式碼
i)幫助開發者合併開發的程式碼
ii)如果出現衝突程式碼的合併,會提示後提交合並程式碼的開發者,讓其解決衝突

軟體:SVN GIT(都是同一個人的個人專案)
github、gitee(兩個採用git版本控制器管理程式碼的公共平臺)
github,gitee,gitlab:區別
-github:一般開源的程式碼放再github,程式碼託管平臺(公有倉庫,私有倉庫),公司程式碼不會放 在這上面
-gitee(碼雲):中國的github,開原始碼放在共有倉庫,有一部分公司的公司程式碼託管到gitee 的私有倉庫(你們公司程式碼放在碼雲上)
-gitlab:公司自己的搭建github,公司內部自己訪問(docker拉一個gitlab映象,跑起來即可)

git:叢集化、多分支

3 安裝git客戶端
一路下一步
4 右鍵---》git bash(terminal視窗)
git init :初始化倉庫