第三章 API設計篇

2021-10-06 10:42:48 字數 2864 閱讀 6265

以普通使用者為例,實現使用者註冊、登入、密碼修改等介面:

__version__ =

'/v1'

__bp__ =

'/user'

api = blueprint(__bp__, __name__, url_prefix=__version__ + __bp__)

@api.route(

'/register'

, methods=

['post'])

@swag_from(

'api_docs/user/register.yml'

)def

register()

: form = registerform(

).validate_for_api(

) user = user.query.filter_by(name=form.name.data)

.first(

)if user:

raise userexistexception(

)# 使用者中註冊時不能自己新增角色

form.role_ids.data =

none

user.create(form)

return response(0,

'ok'

)@api.route(

'/login'

, methods=

['post'])

@swag_from(

'api_docs/user/login.yml'

)def

login()

: form = loginform(

).validate_for_api(

) user = user.verify(form.name.data, form.password.data)

access_token = get_token(user)

return response(0,

'ok'

, data=access_token)

@api.route(

'password'

, methods=

['put'])

@login_required

@swag_from(

'api_docs/user/modify_password.yml'

)def

modify_password()

: form = modifypasswordform(

).validate_for_api(

) user = get_current_user(

) user.modify_password(form.old_password.data, form.new_password.data)

return response(0,

'ok'

)@api.route(

'/auths'

, methods=

['get'])

@login_required

@swag_from(

'api_docs/user/get_auths.yml'

)def

get_auths()

: current_user = get_current_user(

)if current_user.is_admin:

auths = auth.query.

all(

)else

: roles = current_user.roles.

all(

) auths =

[auth for role in roles for auth in role.auths.

all()]

data =

for auth in auths:

auth_data = auth.data(

) module = auth_data[

'module']if

not data.get(module)

: data[module]=[

] data[module]

else

: data[module]

return response(0,

'ok'

, data=data)

使用@swag_from裝飾器來給每乙個介面新增swagger文件,下面給出乙個示例:

使用者登入

使用使用者名稱和密碼登入

---br#- v1/user

parameters:-

name

: name

in: formdata

type

: string

required

:true

description

: 使用者名稱

-name

: password

in: formdata

type

: string

required

:true

description

: 密碼

responses

:500

:description

: 服務端錯誤

200:description

: 成功

實現效果:

第三章 網頁基礎篇

建立乙個顯示當前日期和時間的網頁。這是乙個不錯的 動態 網頁範例,因為該頁面的內容不是靜態的。相反,其內容是隨著計算 本例中是對當前時間的計算 的結果而變化的。這個簡單的範例既不涉及資料庫,也不需要任何使用者輸入,僅輸出伺服器的內部時鐘。實現 1 描述 urlconf 就像是 django 所支撐 ...

第三章 web設計原則

程式設計師的修煉從優秀帶卓越 第三章 web設計原則 的評判標準 載入的速度要快 這到底是什麼東西 給我看乙個例子 清清楚楚的告訴我要做什麼,並且掃除障礙 擁抱你的受眾,即使意味著要把其他受眾排除在外,你不可能滿足所有的使用者 追求簡單 不要設計太多按鈕,不要堆砌無效的需求,少即使多,像谷歌瀏覽器 ...

第三章 堆疊

1.基礎知識 堆疊可以實現很多的應用,遞迴的問題轉化成非遞迴形式,在本質上也是堆疊的問題.它是一種 filo 操作的資料結構,一般也有兩種儲存方式 陣列跟鍊錶實現形式,這裡我給出了鍊錶形式的堆疊模板,裡面包括了基本的堆疊所有的操作,還有兩個比較著名的應用例子,時間倉促,精力比較有限,關於迷宮老鼠還沒...