Replit.web:具有內(nèi)置數(shù)據(jù)庫和身份驗(yàn)證支持的 Python 框架
Replit 使編碼人員能夠快速構(gòu)建應(yīng)用程序。除了瀏覽器,開發(fā)人員可以啟動(dòng)服務(wù)器,將數(shù)據(jù)存儲(chǔ)在 Repl DB 中,并使用 Repl Auth 對(duì)用戶進(jìn)行身份驗(yàn)證。然而,直到今天,用戶還必須將所有這些組件串在一起來構(gòu)建應(yīng)用程序。這就是為什么我們很高興宣布 replit.web,這是一個(gè)專注于快速制作應(yīng)用程序的 Python 框架。構(gòu)建具有用戶身份驗(yàn)證和持久性的應(yīng)用程序從未如此簡(jiǎn)單:
- import flask
- from replit import db, web
- app = flask.Flask(__name__)
- users = web.UserStore()
- @app.route("/")
- @web.authenticated
- def index():
- hits = users.current.get("hits", 0) + 1
- users.current["hits"] = hits
- return f"You have visited this page {hits} times"
- web.run(app)
Repl Auth
Repl Auth 是每個(gè) Replit 應(yīng)用程序附帶的內(nèi)置身份驗(yàn)證系統(tǒng)。雖然 Auth 非常簡(jiǎn)單,但仍需要編寫一些代碼才能將其集成到您的應(yīng)用程序中。由于 replit.web 擴(kuò)展了流行的 Flask web 框架,現(xiàn)在驗(yàn)證路由就像使用 web.authenticated 裝飾器要求驗(yàn)證一樣簡(jiǎn)單。然后可以在 web.auth.name 下訪問當(dāng)前用戶:
- @app.route("/")
- @web.authenticated
- def index():
- return f"Hello, {web.auth.name}"
Repl DB
如果沒有 Repl DB(每個(gè) repl 隨附的完全托管的云數(shù)據(jù)庫)提供毫不費(fèi)力的持久性,新框架的神奇體驗(yàn)就不可能實(shí)現(xiàn)。DB 可以像普通 Python 字典一樣使用,它甚至支持嵌套設(shè)置功能:
- db["bob"] = {"score": 0}
- db["bob"]["score"] += 100
- db["bob"].get("friends", []).append("Alice")
- print(db["bob"]) # => ObservedDict(value={'score': 100, 'friends': ObservedList(value=['Alice'])})
replit.web 結(jié)合了 DB 和 Auth 來提供 web.UserStore,這是一個(gè)由已認(rèn)證用戶的用戶名鍵控的 db 實(shí)例,這使得存儲(chǔ)用戶數(shù)據(jù)變得簡(jiǎn)單:
- users = web.UserStore() # optionally, pass a prefix
- users.current # shorthand for users[web.auth.name]
最快的構(gòu)筑體驗(yàn)
除了 DB 和 Auth 之外, replit.web 還嘗試使 Web 應(yīng)用程序開發(fā)的各個(gè)方面變得更容易,包括諸如速率限制和要求參數(shù)之類的實(shí)用程序。為了測(cè)試該框架,團(tuán)隊(duì)還構(gòu)建 了ReplTweet,這是一個(gè)為 Replit 用戶設(shè)計(jì)的有趣的仿Twitter功能 。用戶可以登錄,閱讀推文,like他們,并發(fā)布自己的想法。整個(gè)應(yīng)用程序有 150 行代碼。
我們的目標(biāo)是讓這個(gè)框架成為制作 Python 應(yīng)用程序的最快方式。現(xiàn)在,它專注于小型應(yīng)用程序和原型設(shè)計(jì)。與我們?cè)?Replit 所做的一切一樣,這是一個(gè)早期版本,我們希望您就如何改進(jìn)它向我們提供反饋。