【Flask】測試平臺開發實戰-第二篇

?概述:

在上一篇我們已經將后端初始化服務后前端的vue框架初始化已經搭建完整,并且可以運行看到界面,服務正常,當然我們看到的前端數據都是mock下的假數據,并不是真實的,這篇我們來開發實現第一個功能,登錄接口的打通開發實現(第一個簡單的登錄接口實現)

前端框架結構

├── build                      // 構建相關  
├── mock                       // 項目mock 模擬數據
├── public                     // 公共資源
├── src                        // 源代碼
│   ├── api                    // 所有接口請求
│   ├── assets                 // 主題 字體等靜態資源
│   ├── components             // 全局公用組件
│   ├── directive              // 全局指令
│   ├── filtres                // 全局 filter
│   ├── icons                  // 項目所有 svg icons
│   ├── router                 // 路由
│   ├── store                  // 全局 store管理
│   ├── styles                 // 全局樣式
│   ├── utils                  // 全局公用方法
│   ├── vendor                 // 公用vendor
│   ├── views                  // view
│   ├── App.vue                // 入口頁面
│   ├── main.js                // 入口 加載組件 初始化等
│   └── permission.js          // 權限管理

api :請求服務端接口的配置都在這里,這里邏輯實現是用到了utils里邊的封裝的request.js,其中在沒有正式服務接口的之前是可以直接調用上邊mock里的地址,得到模擬的數據請求。

views:頁面的布局,樣式,功能實現的地方,一般一個vue代表一個功能頁面,具體根據自身項目邏輯劃分就可以。

獲取登錄接口

終端切換到vue-element-admin目錄,執行npm run dev 編譯并開發者模式運行,這里和依賴環境中啟動方式保持一致即可;

用chrome打開,進入登錄頁面,并依次瀏覽器菜單-更多工具-開發者工具,進入調試模式,切換到查看網絡,來查看在登錄網絡請求

輸入admin,任意密碼,點擊Login,正常進入主頁后我們會分別看到兩個登錄相關接口login 和 info,請求Request URL分別為:

http://172.16.60.60:9527/dev-api/vue-element-admin/user/login 方法post

對應返回結果如下:

{"code":20000,"data":{"token":"admin-token"}}
http://172.16.60.60:9527/dev-api/vue-element-admin/user/info?token=admin-token

get請求如下

返回結果如下:

其實這個如果在/mock/user.js也能通過代碼看到,登錄接口的內容。

實現登錄接口

既然已經知道登錄接口的請求以及重要的返回值,那么我們就可以用flask實現這兩個接口,一個是登錄驗證用戶存在返回token,另一個是登錄成功后獲取用戶信息。

[POST] /user/login

  1. 編寫代碼: app.py 或者你順手的編輯器

# -*- coding: utf-8 -*-from flask import Flaskfrom flask import requestimport jsonapp = Flask(__name__)@app.route("/api/hello")def hello():return "Hello, World!"@app.route("/api/user/login",methods=['POST'])
def login():data = request.get_data() # 獲取post請求body數據js_data = json.loads(data) # 將字符串轉成json# 驗證如果是admin用戶名,即登錄成功,返回admin的token,否則驗證失敗if 'username' in js_data and js_data['username'] == 'admin':result_success = {"code":20000,"data":{"token":"admin-token"}}return result_successelse:result_error = {"code":60204,"message":"賬號密碼錯誤"}return result_errorif __name__ == "__main__":app.run(debug = True)
  1. 測試:運行python app.py 通過后 curl 或者 postman進行請求測試

1)登錄成功

curl -X POST http://127.0.0.1:5000/api/user/login -d '{"username":"admin","password":"123456"}'
  1. 非admin登錄錯誤

curl -X POST http://127.0.0.1:5000/api/user/login -d '{"username":"root","password":"654321"}'

[GET] /user/info

  1. 繼續追加實現代碼

@app.route("/api/user/info",methods=['GET'])def info():# 獲取GET中請求token參數值token = request.args.get('token')if token == 'admin-token':result_success = {"code":20000,"data":{"roles":["admin"],"introduction":"I am a super administrator","avatar":"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif","name":"Super Admin"}}return result_successelse:result_error = {"code": 60204, "message": "用戶信息獲取錯誤"}return result_error
  1. 繼續測試

curl 'http://127.0.0.1:5000/api/user/info?token=admin-token'

到此后端代碼用戶登錄邏輯接口實現完了,我們可以保持后端服務運行,然后讓我們將前端的請求從mock切換成我們自己的服務,在原有代碼中補充我們寫的代碼

完整代碼如下:

# -*- coding: utf-8 -*-from flask import Flaskfrom flask import requestimport jsonapp = Flask(__name__)@app.route("/api/hello")def hello():return "Hello, World!"@app.route("/api/user/login",methods=['POST'])
def login():data = request.get_data() # 獲取post請求body數據js_data = json.loads(data) # 將字符串轉成json# 驗證如果是admin用戶名,即登錄成功,返回admin的token,否則驗證失敗if 'username' in js_data and js_data['username'] == 'admin':result_success = {"code":20000,"data":{"token":"admin-token"}}return result_successelse:result_error = {"code":60204,"message":"賬號密碼錯誤"}return result_error@app.route("/api/user/info",methods=['GET'])def info():# 獲取GET中請求token參數值token = request.args.get('token')if token == 'admin-token':result_success = {"code":20000,"data":{"roles":["admin"],"introduction":"I am a super administrator","avatar":"https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif","name":"Super Admin"}}return result_successelse:result_error = {"code": 60204, "message": "用戶信息獲取錯誤"}return result_errorif __name__ == "__main__":app.run(debug = True)

請求正式服務接口

  1. 修改接口請求地址

路徑 vue-element-admin/src/api/user.js ,進行打開編輯, 配置成自己寫的請求的api地址( 注釋掉的就是原來mock地址)

export function login(data) {return request({// url: '/vue-element-admin/user/login',url: '/api/user/login',method: 'post',data})}export function getInfo(token) {return request({// url: '/vue-element-admin/user/info',url: '/api/user/info',method: 'get',params: { token }})
}

  1. 修改一個請求域名

另外還需要修改一下默認的域名地址,文件位于根目錄.env.development 里邊一項改成,這里只暫時dev配置環境的。

VUE_APP_BASE_API = 'http://127.0.0.1:5000/'

  1. 運行測試

重新啟動運行前端,嘗試登錄,查看登錄狀態和chrome調試模式的請求返回,你會發現并沒有成功,看flask日志輸出顯示類似 "OPTIONS /api/user/login HTTP/1.1" 200 提示,這是由于跨域問題,簡單說就是瀏覽器一種安全機制,至于詳細的后續單獨再說,這里先一個通用解決辦法就是在python flask中允許跨域就好了。

跨域解決

  1. 安裝python依賴包flask-cors

pip install flask-cors
  1. 頭部引用

 from flask_cors import CORS  
  1. 允許代碼

app = Flask(__name__)
CORS(app, supports_credentials=True)

最終聯調

重新運行后端服務 python run.py

重新運行前端服務 npm run dev

輸入 admin / 123456 進行登錄

OK 前后端聯調成功

好了,到此我們一個簡單的登錄流程就實現了,當然這只是一個很簡單的登錄接口流程,目的是為了讓你掌握如何實現前端和后端接口登錄的一個實現過程,后期我們會將登錄這里進行重構使用更加保密的方式,密碼通過Md5或者哈希的方式進行加密,這種方式才是我們目前所有市面上使用的通過登錄功能,當然不著急,還是那句話,勛勛漸進,慢慢一步一步走。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/94818.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/94818.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/94818.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聊一聊 .NET 的 AssemblyLoadContext 可插拔程序集

一:背景 1. 講故事 最近在分析一個崩潰dump時,發現禍首和AssemblyLoadContext有關,說實話這東西我也比較陌生,后來查了下大模型,它主要奔著替代 .NetFrameWork 時代的 AppDomain 的,都是用來做晚期加卸載&a…

Java中使用Spring Boot+Ollama實現本地AI的MCP接入

目錄結構完善spring bootpom.xml添加依賴application.ymlMCP 工具配置 mcp-servers.json配置類編寫API在我的上一篇文章搭建好本地的聊天機器人后,準備接入MCP進一步增強AI的能力,以實現類似手機AI的功能 參考的是第二篇文章鏈接其內容比較精煉&#x…

C#正則表達式與用法

🌟 C# 常用正則表達式與用法C# 使用正則需要引用命名空間:using System.Text.RegularExpressions; 常用方法:Regex.IsMatch(input, pattern) → 返回 bool,用于驗證Regex.Match(input, pattern) → 返回 Match 對象,可…

從0開始學習Java+AI知識點總結-27.web實戰(Maven高級)

一、分模塊設計與開發:讓項目結構更清晰1.1 為什么需要分模塊?單模塊開發的痛點在小型項目中,單模塊(所有代碼放在一個工程)或許能滿足需求,但項目規模擴大后會出現兩大核心問題:維護成本高&…

Ferris Wheel (貪心 | 雙指針)

題目:思路:本題注意題目的條件即可,題意說一個摩天輪可以坐一個人或者兩個人,那么顯然我們就可以貪心一下具體的,我們可以讓最小的去匹配最大的,如果此時大于 x,那么顯然我們根本無法使得 最大的…

課程視頻怎么加密?在線教育機構常用的6個課程加密方法

知識付費時代,課程視頻是教育機構的核心資產。但是不難發現,課程視頻的安全卻得不到保障。各大購物平臺搜索課程名稱,便出現了許多盜版課程。如何有效防止課程被翻錄和二次傳播,成為急需解決的關鍵問題。今天這期分享點干貨&#…

SOME/IP-SD中”服務器服務組播端點”、“客戶端服務組播端點”與“IPv4組播選項的區分

<摘要> AUTOSIP-SD協議中組播端點&#xff08;Multicast Endpoint&#xff09;在不同上下文中的角色與表述差異。準確理解“服務器服務組播端點”、“客戶端服務組播端點”與“IPv4組播選項”中配置的端點之間的關系&#xff0c;是正確實現組播事件分發機制的關鍵。這涉及…

計算機是如何運行的

目錄 一&#xff0c;計算機是如何組成的 1.1&#xff0c;CPU中央處理單元 1.1.1&#xff0c;CPU的構成和屬性 1.1.2&#xff0c;如何判斷cpu的好壞 1.1.3&#xff0c;指令 1.1.4&#xff0c;CPU的緩存 1.2&#xff0c;操作系統 1.2.1&#xff0c;進程 1.2.2&#xff0…

JavaScript性能優化:實戰技巧與高效策略

JavaScript性能優化實戰技術文章大綱性能優化的重要性解釋為什么性能優化對用戶體驗和業務指標至關重要列舉常見性能問題的影響&#xff08;如跳出率、轉化率下降&#xff09;代碼層面的優化減少全局變量使用&#xff0c;避免內存泄漏使用事件委托減少事件監聽器的數量避免頻繁…

解決.env.production 寫死 IP 的問題:Vue + config.json 運行時加載方案

背景&#xff1a;前端常用 .env.production 在構建時寫死 API 地址 場景&#xff1a;運維部署時經常不知道目標主機 IP/域名 問題&#xff1a;每次 IP 變動都要重新編譯 → 增加運維成本 引出需求&#xff1a;只修改 IP 就能完成部署&#xff0c;不需要重新打包 目錄一、解決方…

如何從三星手機轉移到另一部三星手機

三星Galaxy S系列因其出色的設計、令人驚嘆的顯示屏、驚艷的攝像頭、更好的揚聲器以及創新的指紋傳感器而受到大多數用戶的歡迎&#xff0c;獲得了良好的聲譽。讓用戶感到滿意的是&#xff0c;三星Galaxy S10擁有更美觀的設計、令人驚嘆的顯示屏、令人驚嘆的攝像頭、更好的揚聲…

聚焦建筑能源革新!安科瑞 “光儲直柔” 方案護航碳中和目標實現

1、背景在 “雙碳” 目標引領下&#xff0c;能源結構轉型與建筑能效提升成為重要課題。清華大學江億院士提出的 “光儲直柔” 新型配電系統&#xff0c;為建筑領域綠色發展提供了創新方向。光儲直柔得到了業界廣泛認同和積極響應&#xff0c;國家、各部委、地區陸續出臺相關政策…

Shell 中 ()、(())、[]、{} 的用法詳解

文章目錄Shell 中 ()、(())、[]、{} 的用法詳解一、先明確&#xff1a;四類符號的核心功能定位二、逐個拆解&#xff1a;用法、示例與避坑點1. ()&#xff1a;子 Shell 執行&#xff0c;隔離環境核心用法1&#xff1a;子 Shell 執行命令&#xff0c;隔離變量核心用法2&#xff…

開發避坑指南(41):Vue3 提示框proxy.$modal.msgSuccess()提示文本換行解決方案

需求 由于接口返回的提示信息過長&#xff0c;接口已經在返回提示中加入換行標簽了&#xff0c;但是使用proxy.modal.msgSuccess(res.msg)提示沒有換行&#xff0c;那么Vue3中proxy.modal.msgSuccess(res.msg)提示沒有換行&#xff0c;那么Vue3 中 proxy.modal.msgSuccess(res.…

[Sync_ai_vid] 唇形同步推理流程 | Whisper架構

鏈接&#xff1a;https://github.com/bytedance/LatentSync/blob/main/docs/syncnet_arch.md docs&#xff1a;LatentSync LatentSync是一個端到端唇語同步項目&#xff0c;能夠生成語音與唇形完美匹配的逼真視頻。 該項目通過使用*音頻條件化3D U-Net*&#xff08;一種生成式…

uniapp中 ios端 scroll-view 組件內部子元素z-index失效問題

發現子組件中的彈窗在ios手機上會被限制在scroll-view里面&#xff0c;安卓手機上不受限制&#xff0c;網上找了好久原因 scroll-view組件內部設置了 -webkit-overflow-scrolling: touch 樣式&#xff0c;導致z-index失效&#xff08;safari 3D變換會忽略z-index的層級問題&…

PyTorch圖像預處理完全指南:從基礎操作到GPU加速實戰

引言 圖像預處理是模型性能的"隱形基石"&#xff0c;在計算機視覺任務中直接決定模型能否提取有效特征。科學的預處理流程能讓基礎模型性能提升15%以上&#xff0c;而GPU加速預處理可使數據準備階段耗時降低60%以上。本文將聚焦PyTorch預處理核心技術&#xff0c;從基…

【前端教程】 CSS浮動布局解析與優化:從基礎實現到工程化改進

浮動(float)是CSS中實現頁面布局的經典技術,雖然現代布局更多使用Flexbox和Grid,但理解浮動的工作原理仍是前端開發者的基礎素養。本文以一個三欄浮動布局的代碼為例,從布局原理解析、潛在問題診斷、工程化優化三個維度,帶你深入理解浮動布局的精髓與優化思路。 一、原代…

DVWA靶場通關筆記-暴力破解(Impossible級別)

目錄 一、查看源碼 二、功能分析 三、SQL注入分析 1、使用PDO預處理語句和參數綁定 2、mysqli_real_escape_string轉義 3、stripslashes去除反斜杠 四、暴力破解分析 1、token防止暴力破解機制 2、登錄失敗隨機延遲機制 3、登陸失敗報錯信息相同 4、登陸失敗的賬戶…

IAR工程如何生成compile_commands.json文件(能生成但是clangd不能生成“.cache文件”)

最近一直在使用vscodeclangd的方式編寫代碼&#xff0c;感覺使用clangd查找函數調用、函數聲明、類型定義等等都比使用vscode自帶的c/c插件好用太多了。現在我有一個功能是IAR版本的&#xff0c;那么有沒有辦法生成clangd使用的compile_commands.json文件呢&#xff1f;答案是&…