# web項目開發(fā)需要注意的問題---> web項目的起點[重要]
1. web項目的主要定位[業(yè)務方向]->明確正在開發(fā)的項目的核心功能
2. web項目的技術選型->Django>Tornado>Flask>WebPy
3. web項目的創(chuàng)建和文件結構的構造 * 模塊化開發(fā)的模塊劃分 * 數(shù)據(jù)庫是否分庫---> web項目中的具體流程[重要]
4. 網(wǎng)頁中的數(shù)據(jù)提交方式[表單|鏈接|Ajax] * 前端網(wǎng)頁中進行數(shù)據(jù)的初步驗證[JS驗證(不可靠的集币,只是為了提升正常用戶體驗)] * 提交的數(shù)據(jù)室谚,是否需要加密操作[JS加密|JS插件加密]
5. 數(shù)據(jù)提交后瓶堕,在服務器端進行提交數(shù)據(jù)的驗證
6. 路由中的URL請求和對應視圖處理函數(shù)/類綁定關系
7. 在視圖處理函數(shù)/類中年堆,進行數(shù)據(jù)的封裝[類的對象]
8. 類的對象持久化到數(shù)據(jù)庫的操作方式[ORM:pymysql|pymongo|sqlalchemy...] * 面向對象的增刪改方式:直接調(diào)用對應的函數(shù)操作:save()/delete()/update() * 通過SQL語句執(zhí)行增刪改操作,拆分對象的數(shù)據(jù)~insert/update/delete.. * 事務管理[事務的四大特性以及事務的隔離級別]
9. 數(shù)據(jù)庫中的數(shù)據(jù)記錄肾胯,查詢到程序中的操作[ORM] * 面向對象的查詢方式:調(diào)用方法獲取數(shù)據(jù) * 通過SQL語句查詢方式腺劣,直接查詢獲取到指定的數(shù)據(jù)
10. 查詢數(shù)據(jù)設計到的緩存處理[ecache|memcache||數(shù)據(jù)庫緩存|文件緩存]
? ? * 緩存處理時,存在的問題和解決方案
11. 數(shù)據(jù)類型轉換->數(shù)據(jù)庫查詢的記錄->類的對象[一般自動轉換拾并、手工轉換]
12. 類的對象數(shù)據(jù),傳遞給前端網(wǎng)頁進行展示
? ? * 傳遞過程中鹏浅,是否需要加密操作,如果加密操作~前端網(wǎng)頁中怎么進行解密操作
? ? * 前端網(wǎng)頁中的模板語法[DTL|JINJA|JINJA2]展示數(shù)據(jù)
? ? * 前端網(wǎng)頁中屏歹,可以通過DOM操作渲染展示數(shù)據(jù)
---
> web項目擴展[非常重要]
13. B/S結構的軟件開發(fā)架構模式
? ? * 耦合架構:前端網(wǎng)頁中使用了非HTML代碼隐砸,這樣的代碼嚴重依賴后端的運行環(huán)境,如{%if%}{%endif%}
? ? ? ? 一個完整的流程蝙眶,[網(wǎng)頁->后端->數(shù)據(jù)庫->后端->網(wǎng)頁] 綁定的[高耦合的季希!]
? ? * 分離架構:前端網(wǎng)頁和后端項目都屬于獨立的項目,數(shù)據(jù)交互通過Ajax直接交互
? ? ? ? 一個完整的流程:[前端網(wǎng)頁] --Ajax-- [后端程序-數(shù)據(jù)庫]
14. 表單操作
? ? * 某些web框架幽纷,會封裝表單的高級操作式塌,如Django[django.forms.Form/ModelForm]
? ? * 某些web框架,不會對表單進行封裝友浸,如tornado\Flask
? ? * 表單的操作峰尝,由于要和用戶直接進行數(shù)據(jù)交互,涉及到很多安全問題
? ? ? ? * XSS:跨域腳本注入攻擊收恢,如~用戶通過發(fā)表文章武学,發(fā)表了一段包含代碼的文章,服務器在
? ? ? ? ? ? 解釋文章的過程中伦意,將用戶輸入的腳本代碼執(zhí)行了火窒,造成了安全漏洞!
? ? ? ? * XSRF:跨域請求偽造攻擊驮肉,如~用戶在自己的電腦上熏矿,訪問了A網(wǎng)站[得到了A網(wǎng)站寫入cookie的數(shù)據(jù)]
? ? ? ? ? ? 此時用戶訪問B網(wǎng)站~【B網(wǎng)站中存在攻擊用戶訪問A網(wǎng)站的鏈接】,如果用戶在B網(wǎng)站訪問了這個鏈接
? ? ? ? ? ? 就會攜帶用戶在A網(wǎng)站的cookie數(shù)據(jù)到達A網(wǎng)站執(zhí)行操作离钝。相當于B網(wǎng)站偽造了A網(wǎng)站的請求[鏈接]
16. 文件上傳:文件上傳過程中票编,文件名也存在攻擊漏洞,任何從瀏覽器發(fā)起的請求都是可以偽造的
? ? ? ? ? ? 此時~如果用戶偽造了上傳的文件和文件名稱奈辰,如~用戶自定義了一個.bashrc文件栏妖,然后提交了
? ? ? ? ? ? 一個保存文件的路徑../../../root/,如果文件正常上傳奖恰,就有可能造成系統(tǒng)的.bashrc文件被覆蓋
? ? ? ? ? ? 如果這個覆蓋的文件中存在創(chuàng)建超級管理員吊趾、創(chuàng)建允許遠程操作的腳本代碼宛裕,就會造成遠程提權漏洞,你的服務器~宣告淪陷论泛!揩尸、
17. 驗證碼:工具類的操作方式,驗證碼的實現(xiàn)方式千變?nèi)f化屁奏,但是原理始終保持一致岩榆。
? ? 都是為了防止用戶惡意多次訪問出現(xiàn)的操作,尤其是~在表單提交時會出現(xiàn)的一種防范手段坟瓢!
? ? 要了解常規(guī)驗證碼的實現(xiàn)方式[字母數(shù)字驗證碼勇边、運算驗證碼、位置驗證碼...]
18. 第三方賬號共享:通過已經(jīng)存在并且比較流行的第三方應用的賬號折联,來快速構建當前項目的賬號
? ? * 通過第三方賬號提供的接口粒褒,直接訪問第三方賬號的數(shù)據(jù),通過該賬號的信息诚镰,來直接創(chuàng)建當前
? ? 項目的賬號奕坟,并提供給用戶直接操作
? ? * 通過第三方賬號提供的接口,讓用戶可以偽登錄當前項目清笨,但是需要重新創(chuàng)建一個當前項目的賬號
? ? 綁定第三方應用的賬號[如果用戶以后忘記密碼月杉,可以通過第三方賬號進行恢復等操作]
? ? * 所有可用的第三方賬號,肯定是第三方應用提供了可以訪問并且需要二次確認的接口
19. 會話跟蹤操作
? ? 核心通過session和cookie兩個獨立的對象進行的操作
? ? * 會話跟蹤:主要是記錄用戶操作網(wǎng)站的過程中的重要信息抠艾,跟蹤用戶的信息提供人性化的后續(xù)服務達到提升用戶體驗的目的
? ? * 狀態(tài)保持:是會話跟蹤的基礎苛萎,主要是保存用戶在網(wǎng)站瀏覽過程中的重要信息!是對HTTP無狀態(tài)短連接的一種補充跌帐!
20. 分布式集群操作
? ? * 分布式[軟件]:將應用程序以【分布】在多個進程或者多個線程的【處理方式】進行部署首懈,達到提升功能處理性能的目的
? ? * 集群[硬件]:集合多臺服務器共同提供服務的功能,提升功能處理性能谨敛,一般情況會設計到負載均衡和集群服務器
? ? * 分布式集群[軟件和硬件結合一種部署操作方式]
? ? * 分布式集群:提升處理性能
? ? * 分布式集群:容災和容錯功能
? ? * 問題分析1:數(shù)據(jù)同步究履,用戶在A主機上執(zhí)行了登錄操作,下次請求被B主機處理了~B主機怎么知道用戶A是否登錄
? ? * 問題分析2:緩存數(shù)據(jù)同步
? ? * 解決方案1:負載均衡可以通過ip hash的方式進行處理脸狸,每個接入的ip地址~只會被同一臺后臺服務器處理
? ? * 解決方案2:可以將數(shù)據(jù)存儲在一個保存數(shù)據(jù)的緩存服務器中最仑,所有的后臺服務器緩存數(shù)據(jù)都在同一臺緩存服務器
21. 數(shù)據(jù)庫相關
? ? * 數(shù)據(jù)庫為什么分庫?
? ? * 數(shù)據(jù)庫為什么分表炊甲?