1. 程式人生 > >自主開發個人部落格經驗總結

自主開發個人部落格經驗總結

而只記錄了他們的id,最大的劣勢:文章經常需要展示作者或者分類的名字,那麼
問題是每次有這種需求就需要到資料庫中查詢,很麻煩,對於這種頻繁訪問的欄位
最好保留在文章中,但同時也需要保留分類id和使用者id以便以後擴充套件

這是設計資料庫需要注意的地方,不是所以表僅僅靠主鍵關聯起來就ok了

2當你要對一個表中新增一個記錄時 思考哪些是從頁面中獲取 哪些是自己在業務層中設定

3 關於session 為什麼我們用同一個欄位user 獲取到了不同的使用者
實際上這背後還有cookie存放了jsessionId(由伺服器產生),這就相當於做單點登入系統中的
token,我猜測所有session存放在這樣有個結構,Map<jsessionid,Session>

使用者訪問該站點都會攜帶cookie。這個標識也是相當於使用者瀏覽器的標識,認為一個瀏覽器就是一個使用者
當傳送過來jsessionid,就可以獲取到session,在由session獲取到user,所以雖然程式碼中都是寫
session.getAtributue("user");但是獲取的資料卻不同

3關於配置檔案存放位置、
在一個maven工程中最後的打包都是以打包方式是war包的模組為主,其他的模組都直接打成jar包,所以配置檔案放哪裡?之前我放到service模組中。但是打包後service模組只是一個jar包,配置檔案也就放到了jar包中
根本不起作用,如何放置?對於一個maven project 所有配置檔案都放在打包方式為war包的web模組中

打包後的目錄:所有webapp下面的東西座位根目錄,控制器的程式碼放在classes目錄下,配置檔案在calsses目錄的下一級,模組為jar包的,放入lib中作為依賴

4 關於路url徑配置問題
最好好不要用相對路徑,稍微改下訪問路徑就會受影響


5寫程式碼時把不可能的情況寫在前面。這樣直接就return,注意程式碼的邏輯順序

6 做使用者註冊時應該注意的幾個問題:重複提交登錄檔單,登陸後不應該訪問到登陸或者註冊的頁面,註冊密碼需要加密,表單校驗

7 請求中的referer可以訪問一個地址之前的地址

8 對於spring中的aop和事務區別
aop只要有切面類,並且配置了切面(通知加切入點),開啟了自動代理。那麼就會執行通知方法

但是對於事務,如果只配置了切面(不用謝切面類),而沒有開啟事務是沒有效果的
怎麼開啟事務?使用註解@transaction  可以在類或者方法上使用該註解,但是隻對public的方法起作用
並且需要開啟燒苗該註解的,在配置檔案中配置

9 事務的處理沒有成功,方法上加了註解還是沒有效果

10 涉及到不止操作一天資料幾乎都要開啟事務(這裡的操作除了查詢以外的操作)

11 再寫方法時,把不確定的引數丟給呼叫的人,比如引數型別Class,因為誰用誰知道什麼型別

12 發現一個問題,使用pageHelper時如果開始分頁,也就是呼叫PageHelper的startPage(num,size);
的時候如果接著下面的程式碼,不是獲取example,那就會出現構造PageInfo的時候
不能把資料封裝到PageInfo中,目前不知道原因

13 在使用foreach標籤的時候也可以通過索引來獲取一個list的一個元素
比如 users[0] 這樣帶來的好處,在一個foreach中可以迴圈很多個個數一樣的集合

14今天解決了一個重大的問題,之前為什麼事務不起作用,以及為什麼aop配置的方法不執行?
首先需要知道容器是spring框架的核心,springmvc的配置檔案生成一個spring容器,而spring父容器也就是,applicationContext相關的各種配置檔案生成一個父容器
對於父容器的bean,子容器可以拿到,但對於子容器的bean,父容器不可拿到,
我們在使用註解@[email protected] @Service @Resposity這些註解來生成bean時候。需要在配置檔案中配置掃描哪些包裡面的註解
由於我之前在springmvc中配置的<component sacn=“”>配置的是com.colin.* 那麼該子容器會掃描所有包裡面的註解,但是由於springmvc配置檔案中並沒有配置事物相關的東西,比如通知以及@Transactional這樣的
註解,所以springmvc生成配置檔案時會生成service的bean,但是對於方法上的@Transactionanl它是不知道的,所以該方法就相當於沒有寫@Transactional的註解一樣,但是service以及dao的bean它都生成了
這就是後面為什麼@Transactional會失效的先兆
當spring父容器生成它的bean時,掃描所有@service以及@Resposity @aspect的註解,並且有效,但是當我們在前端controller呼叫業務層時用的是誰的service的bean(因為子容器和父容器中都有)
我設想的是因為自己容器裡有就不會去父容器個裡面去拿(類似與就近原則),這就造成了@transactional @aspect失效,因為子容器掃描時並掃描不到這些註解,因為springmvc的配置檔案中沒有配置事務,自動代理
所以當然掃描不到
這就是為什麼事務 通知方法不執行的原因?
解決辦法就是在配置springmvc的<componet scan>的時候只讓它掃描controller的包,想要service去父容器拿,因為父容器中的service bean是完整的

對於框架的底層原理還是要知道的,不然發生這種情況就傻逼,打死找不到錯

測試了一遍 確實如我猜想 改了後事物和aop都起作用了

15 如何用springaop來獲取被增強方法的一些東西,比如獲取被增強方法的引數?
在通知方法中的引數上加入JoinPoint 改類中就有獲取引數等一些方法

16 為什麼一個請求被執行多次??目前還不知道確切的原因,但是我在父容器和子容器都掃描了controller 不知道和這個有不有關
果然和這個有關係,剛修改了父容器的掃描範圍 排除了controller 再搜尋時就沒有出現多次搜尋的情況了
再一次警告,springmvc之負責controller 父容器掃描其他的

17 component配置檔案 標籤的使用
<!-- 掃描帶有@service或者其他dao層註解的類 -->
<context:component-scan base-package="com.colin.*" use-default-filter="false">
<!-- 不掃描某些註解 -->
<context:exclude-filter type="annotation" expression=""/>
<!-- 指定只掃描某些 -->
<context:include-filter type="annotation" expression="com.colin.web.controller"/>
</context:component-scan>


18 對於查詢 如果返回的是list 需要判斷 是否為空,再去獲取元素,否則丟擲空指標異常

資料的校驗十分重要

相關推薦

自主開發個人部落經驗總結

而只記錄了他們的id,最大的劣勢:文章經常需要展示作者或者分類的名字,那麼問題是每次有這種需求就需要到資料庫中查詢,很麻煩,對於這種頻繁訪問的欄位最好保留在文章中,但同時也需要保留分類id和使用者id以便以後擴充套件這是設計資料庫需要注意的地方,不是所以表僅僅靠主鍵關聯起來就ok了2當你要對一個表中新增一個記

用flask開發個人部落(28)—— 利用unittest進行單元測試

下面分析下這個webapp的單元測試模組test,請先看下目前test下的檔案結構:        目前__init__.py檔案還是空,請檢視test_basic.py的程式碼: import unittest from flask impor

部落經驗總結

hhhhhhhhh突然就開始寫人生第二篇部落格了  因為剛才寫了第一篇,存在一些問題,這裡記錄一下以後好改進啊! 1.最好邊做邊寫部落格,這樣截圖啊什麼的第一手資料比較好取得 2.詳細,去了哪兒下了什麼東西能不能共享,能的話就一定共享。我是一個傻瓜,我的部落格也是寫給傻瓜看的(

用flask開發個人部落(24)—— flask中使用Flask_Mail傳送電子郵件

        flask中使用Flask-Mail提供對電子郵件的支援,下面將分步驟測試flask中傳送電子郵件的功能: 1 配置SMTP伺服器的資訊         我們需要藉助flask程式例項app的config屬性來配置電子郵件的SMTP伺服器資訊,其中主要的配置

用flask開發個人部落(10)—— Jinja2模板中的控制結構

一 引言         模板,就是認為建立的一套用來管理資料的規則.其實從程式設計的角度來說,我們所使用的程式語言也可以理解成為一種模板的語言,而對應的程式語言檔案就是模板檔案,如cpp,py,cs檔案等等.最近我們做專案,用word做了一套模板,也是類似.既然類似程式語

用flask開發個人部落(8)—— flask中的模板

        一般而言,檢視函式中存在兩種邏輯,業務邏輯和表現邏輯。業務邏輯諸如我們在登入頁面時輸入使用者名稱和密碼後,點選確定按鈕時,在資料庫驗證該使用者名稱和密碼是否正確. 表現邏輯就是返回正確

用flask開發個人部落(4)—— flask中4種全域性變數

一  current_app         current_app代表當前的flask程式例項,使用時需要flask的程式上下文啟用,我們以本專欄第一篇文章中寫的test.py為例介紹下它的用法: 1.1 啟用程式上下文 >>> from test i

用flask開發個人部落(5)——flask中的四種響應型別

        在之前的程式碼中,檢視函式都返回了一個字串,在實際的開發中其返回的html檔案內容,本質其實也是字串。下面總結下flask中可以作為響應的幾種方法。 1、響應字串。         這個在前面已經說明過,但是需要指出的是,其實每次檢視函式在響應時還可以附帶狀

Django開發個人部落網站——5、建立第一個app

1、建立app django中的一個app就是一個小的專案,我們通過startapp命令即可建立。可以進入虛擬環境myblog中執行: python manage.py startapp myblog 也可以直接在pycharm中的Tools下的run

Django開發個人部落網站——22、部落的最後完善

至此,我們已經基本完成了部落格的所有功能。最後在對部落格的一些細節進行完善下就可以了。 搜尋頁面內容的新增 搜尋頁面的檢視函式是在haystack中寫好的,如果我們想要給頁面傳遞資料,需要將內容寫到檢視函式的extra_context函式中: clas

用flask開發個人部落(6)—— 為flask程式新增命令列直譯器

一 引入Manager         使用flask的方便之處在於可以使用大量的擴充套件功能,如資料庫和使用者認證都是通過擴充套件功能實現。打算開啟flask時支援命令列選項,我們需要引入flask-script擴充套件。 from flask_script import

ThinkPHP5 經典實錄開發個人部落系統實戰

1、1-使用composer下載2、2-名稱空間3、3-多級名稱空間及三種訪問方式4、4-公共空間及名稱空間在tp5裡的用法5、5-域名重定向及tp5的訪問工作機制詳解6、6-名稱空間的引入機制7、7-前臺模板引入及分離8、8-後臺介面引入及分離9、9-資料表建立10、10-

Django開發個人部落網站——7、通過admin管理後臺

Django中一個最強大的部分是自動管理介面,在模型中讀取元資料來提供一個強大的、生產就緒的介面,使內容提供者能立即用它向站點中新增內容,在這篇文件中,我們討論如何去啟用,使用和自定義Django的站點管理介面。 建立管理員: 此時我們還沒有建立管理

用flask開發個人部落(40)—— Flask中三種測試方法

一、單元測試並統計測試的覆蓋率 1.1 Flask中的單元測試         在之前的文章中介紹過在flask中進行單元測試的方法,目前我們的程式碼中存在下面的單元測試: classBasicTestCase(unittest.TestCase): def Set

用flask開發個人部落(36)—— 使用SQLAlchemy對部落文章進行分頁

        我們在瀏覽某個部落格網站時,如果部落格文章過多,往往都進行了分頁顯示,比如CSDN中個人部落格的首頁顯示。在flask中SQLAlchemy不但可以進行資料建模和資料查詢等等,由於其支援分頁查詢,我們還可以利用其對我們的文章進行分頁。 一、建立部落格資料模型

用flask開發個人部落(1)—— 一個簡單的flask程式

1、建立flask程式例項 from flask import Flask app=Flask(__name__)         Flask接受一個字串作為引數,這個引數決定程式的根目錄,以便於能找到相對於程式根目錄的資原始檔的位置,通常這種情況下都使用  __nam

使用Vue、React和Koa開發個人部落

前言 實習了大半年,又臨近畢業,一直想做一個屬於自己的部落格。於是就用Vue、React和Koa開發了一個服務端渲染的部落格系統。其中: - 後端管理使用Vue開發 - 前端頁面使用React服務端渲染框架nextjs - 介面服務使用Koa

Django開發個人部落網站——18、實現部落的分類

我們在設計部落格的資料庫時,分別定義了部落格的分類和標籤,規定部落格與部落格的分類為一對多關係,也就是一個部落格只能有一個分類,而部落格的標籤則為多對多的關係,一個部落格可以有多個標籤。按照功能來劃分的話,也就是部落格的標籤是對部落格分類的一個補充。 考慮到我

Django2.0筆記(5)-開發個人部落系統(三)

開發環境PyCharm 2017.3.2 (Professional Edition)Python 3.6.3windows 10Sqlite3本文目標後臺admin頁面美化富文字輸入框配置優化 無圖無

用flask開發個人部落(32)—— 進行表單欄位的驗證

一、引言         本文主要討論FlaskForm中各個表單欄位的限制方法。我們在定義表單物件時,往往需要處理很多細節功能,諸如限制欄位的長度,填寫的email要符合格式等等。FlaskForm中提供了很多限制表單欄位的方法。下面,我們將提供幾種常用的方法進行討論。