首先是提醒自己的一些嘮嗑:
學會勞逸結合,檔案看累了可以看視頻,動手操作很關鍵,遇到問題先動腦子冷靜地想,不要跟著步驟都不帶腦子,想不出來了再查一查!有時候打出來的代碼很虛,但是實踐不花錢,實踐出真知,還是運行一下!
前后端分離的開發中,后端要做什么:
先明確一下互動程序:只需要后端寫好介面后,前端呼叫后端寫的介面即可,
互動的時候,只需要在同一臺電腦,不同埠同時運行前端,后端,打開前端頁面,前端可使用后端資料,即互動成功,一般不用將前端檔案放到后端的工程檔案下,只要解決好跨域問題就ok了,
那么這時候后端要做什么就很明確了:
1寫介面:建立處理請求的函式,接受前端發送過來的資訊,通過處理后,回傳前端要的資訊,
2設計資料庫,將資料庫和視圖函式聯系起來,使得資料可被處理,
在具體開發中中的步驟:
1和前端一起商量需求分析
2自己設計資料庫,理清各個表之間的關系
3撰寫視圖函式和相關的處理函式
關于一些自己犯過的錯誤:
1 使用了中文的逗號
2 使用了錯誤的縮進
3 區分大小寫
4 注意下劃線(像表名就是雙下劃線)
5 自己用的包裝了嗎,上面from了嗎
6 裝飾器不要漏掉,使用對應的函式一定要用對應的裝飾器
上面說的這些編譯的時候編譯器也會提醒,問題不大,跟著編譯器改就可以了,錯誤處理的方法還可以嘗試一下斷點除錯,
關于一些書本不會講,小白不懂的知識:
1 foo/bar:文化產物,這些詞沒有任何意義,通常被當做占位符來使用,可以代表任何東西,
關于一些小白記不住的命令,開始總喜歡查看:
資料庫操作:在終端進行:打開資料庫 mysql -u root –p
創建資料庫:Create database 資料庫名 charset=utf8;
use 資料庫名;
show tables;
修改運行埠 :在終端運行:flask run -p 8000
生成requirement檔案:pip freeze> requirements.txt
常見的概念
1 路由URL:用來表示從互聯網上得到的資源位置和訪問這些資源的方法
2注冊路由:讓URL與函式建立關聯,
3 視圖函式:處理請求的函式,
4 客戶端:用來給用戶和服務器通信的各種軟體,
服務端:為用戶提供服務的服務器,

5 程式背景關系:程式背景關系存盤了程式運行所必須的資訊
請求背景關系:包含請求的各種資訊
6 requirement檔案:專案包含一個requirement檔案,用于記錄所有的包和版本號,以便在服務器部署操作
7 API:應用程式編程介面,API由服務器(Server)提供(服務器有各種各樣的型別,一般我們瀏覽網頁用到的是web server,即網路服務器),通過API,計算機可以讀取、編輯網站資料,就像人類可以加載網頁、提交資訊等,
RESTFUL API :即滿足RESTful風格設計的API
8 藍本:相當于一個模子,使用它可以將程式模塊化
常用的一些函式裝飾器:
1 @app.route:裝飾器視圖函式
@app.route('/leave_message', methods=['POST', 'GET'])
引數:(1)自定義端點值,獲取對應的URL;
(2)使用methods引數傳入一個包含監聽的HTTP方法的可迭代物件
回傳值:相應主體,狀態碼,首部欄位
關于這里我想特別說一下格式,最好的方式是和前端約定好了,分享一個最常見的格式!
return jsonify({msg:"注冊過了",
status : 400
})
2 jsonify(): 將傳入引數序列化,轉換成JSON字串作為回應的主體,然后生成一個回應物件,并且設定正確的MIME型別.
這個函式基本在回傳值的時候都會用到,
3 @app.cli.command()裝飾器:用于注冊flask命令;引數即命令名稱
4 redirect函式():重定向目標URL
return redirect('http://www.example.com')
return redierct(url_for('hello'),狀態碼) ;使用redirect()函式時,默認的狀態碼為302,即臨時重定向,但是也可以傳入自己設定的狀態碼,
5 abort(404):呼叫的時候自己回傳404錯誤回應,不需要再使用return,abort()函式之后的代碼不會再執行,
6 request.json.get('引數'):從前端獲取引數,
關于資料庫的操作:
資料庫中的概念:
外鍵:通過某鍵,把資料和另一張表關聯起來(一對多的關系)
1 db.drop_all():洗掉表,通常在運行測驗的時候需要這個來保證每次運行的時候都是干凈的表,
db.create_all():創建表
2 db.session.add()遞交資料
3 db.session.commit() 提交會話
關于一些難點:
1 外鍵不一定要用另一張表的主鍵,但是一定要設定:
unique=True
關于保存登錄狀態中的一些概念:
1使用session
cookie技術:通過在請求和相應報文中添加cookie資料來保存客戶端的狀態資訊,
session:安全的cookie,指用戶對話,即服務器和客戶端/游覽器之間或者桌面程式和用戶之間建立的互動活動,
使用:(1)設定密匙:
app.secret_key="自己設定"
(2)登錄的時候把登陸物件的其中一個內容(下面這個事例,把學號作為登錄賬號放到session中了)
# 登入用戶,保存登錄狀態在session中
session["student_number"]=student_numberx
(3)檢查登錄的狀態的時候只需要在session中查詢
student_number=session.get("student_number")
(4)登出的時候只需要清除session: session.clear()
2 使用jwt,JWT(json web token):
定義:主流的token;主要作用就是把客戶端登錄資訊[uid, authority,logintime]加密和解密
flask使用:flask_jwt_extend 即可,在后端配置好相應的密匙,并注冊jwt物件;
app.config['JWT_SECRET_KEY'] = "自己設定"
jwt = JWTManager(app) #注冊jwt
jwt登錄注冊步驟程序:
登錄的時候生成token:
access_token = create_access_token(identity=student_numberx)
檢查狀態的時候得到jwt的身份資訊:
student_id=get_jwt_identity()
登出的時候只需要前端丟掉jwt令牌,
flask-jwt-extended的一些常用函式:
-
cerate_access_token()默認生成的是identity中的內容 -
get_jwt_identity()默認拿到的是create_access_token中的資料,如果有裝飾器@jwt_identity_loader裝飾后,拿到的是回傳的資料,對應上圖中的identity資料關于使用jwt的一些坑:
1 不要漏掉
@jwt_required
關于postman的一些使用:
postman是用于模擬前端向后端發送資料的,基本的使用就是后端用postman除錯之后沒問題就可以和前端進行互動了,
1 直接用游覽器打開的是最原始的,而且默認是get的請求
2關于如何使用postman模擬前端發送資料:

注意自己發送的資料格式,如果格式錯了,會有小叉叉提醒,旁邊還有美化的按鈕,可以幫助美化格式
3 關于使用jwt的用法
首先,在生成token的介面中,獲得介面:
# Identity 引數可以是任何json序列化的資料
access_token = create_access_token(identity=usernamex)#注意這里identity已經設定成主鍵了
#回傳訪問的token
return jsonify(access_token=access_token), 200

在這里,把token給獲取(實際上是復制)下來,
然后在獲取jwt的介面中

token空白輸入處,輸入剛剛復制的token,這樣就成功了
看關于加密問題!
開發程序中會涉及到很多加密問題,
(1)加密密碼:使用哈希演算法,創建資料庫物件的時候就是是用,將密碼的哈希值保存在資料庫中,
(2)token加密:token實際上就是一個身份令牌,對令牌加密就是token設定密匙 ,
session加密:session就是對cookie加密,所以設定session密碼保護會話不被他人盜用,
(3)對前端回傳的報文和后端回傳的回應加密:可規定一個演算法,前端加密,后端解密,可采用對稱加密和非對稱加密,
關于回傳資料格式問題
前后端分離一般回傳的資料格式是 json格式,json即key-value的格式:
return jsonify({"msg":"注冊成功",
"status" : 200
})
回傳類物件的話,也應通過處理,變成這種格式,否則將會報:”非序列化“的錯:
messages = Message.query.order_by(func.rand()).first()
return jsonify({"body":messages.body,
"time":messages.timestamp,
"user_name":messages.user_id
})
這是我回傳一個留言物件耍的小聰明,
注意的是,與前端互動的時候應規定好回傳的格式,
關于開發中注意事項以及改進提高:
1 分清出模塊,區分功能,一個視圖函式做一個功能
(比如一個留言板,提交新留言就提交新留言,展示留言就展示留言)
2 攔截器:即把多余的請求,無用的請求在進到服務器之前就攔截,
3 開發時的一些注意事項,前端如果回傳錯誤資訊,后端要可以處理,而防止服務器崩掉,
參考:《Flask Web開發實戰:入門、進階與原理決議 - 李輝》
本文持續更新,如有錯處請多指教~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/150699.html
標籤:Python
上一篇:pyqt5,pycharm,Process finished with exit code -1073741819 (0xC0000005)
