Python:masonite初體驗TodoList

      網友投稿 1374 2025-04-04

      文檔:https://docs.masoniteproject.com/

      初次體驗框架,感覺里邊提供了豐富的命令行工具可以快速開發,

      主要是ORM很棒,區別于Python生態Django等的ORM,和PHP的laravel很像,簡單高效

      一、環境配置

      環境

      Python 3.4+ masonite 2.2.26 masonite-cli 2.2.2

      1

      2

      3

      安裝

      $ pip install masonite-cli $ craft # 查看幫助

      1

      2

      3

      二、新建一個項目

      # 1、新建項目 craft new project_name cd project_name # 2、安裝依賴 craft install # 3、啟動服務 craft serve

      1

      2

      3

      4

      5

      6

      7

      8

      9

      訪問:http://127.0.0.1:8000/

      出現歡迎界面

      三、示例1:hello world

      1、創建控制器

      $ craft controller Index

      1

      app/http/controllers/IndexController.py

      """A IndexController Module.""" from masonite.request import Request from masonite.view import View from masonite.controllers import Controller class IndexController(Controller): """IndexController Controller Class.""" def __init__(self, request: Request): """IndexController Initializer Arguments: request {masonite.request.Request} -- The Masonite Request class. """ self.request = request def show(self, view: View): return "hello world"

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      2、配置路由

      routes/web.py

      """Web Routes.""" from masonite.routes import Get, Post ROUTES = [ Get('/', 'IndexController@show'), ]

      1

      2

      3

      4

      5

      6

      7

      8

      masonite默認會自動重啟服務

      再次訪問 http://127.0.0.1:8000/

      顯示:Hello world

      示例2:新建TODOLIST項目

      1、配置數據庫,使用sqlite

      .env

      DB_CONNECTION=sqlite DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=data.db DB_USERNAME=root DB_PASSWORD=root DB_LOG=True

      1

      2

      3

      4

      5

      6

      7

      2、創建遷移文件

      $ craft migration create_todolist_table --create todolist

      1

      設置3個字段:id,title,complete_time

      databases/migrations/create_todolist_table.py

      from orator.migrations import Migration class CreateTodolistTable(Migration): def up(self): """ Run the migrations. """ with self.schema.create('todolist') as table: table.increments('id') table.string('title') table.datetime('complete_time').nullable() # 可以為null table.timestamps() def down(self): """ Revert the migrations. """ self.schema.drop('todolist')

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      遷移數據, 建表

      $ craft migrate

      1

      查看建表語句

      CREATE TABLE "todolist" ( "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "title" VARCHAR NOT NULL, "complete_time" DATETIME NULL, "created_at" DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL, "updated_at" DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL );

      1

      2

      3

      4

      5

      6

      7

      可以看到默認多加了2個字段:created_at,updated_at

      3、創建Model

      $ craft model TodoList

      1

      稍作修改

      app/TodoList.py

      """TodoList Model.""" from config.database import Model class TodoList(Model): """TodoList Model.""" # 查詢數據庫的時候會在類名后加s,所以自定義表名 __table__ = "todolist" # 要寫入的字段 __fillable__ = ['title', 'complete_time']

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      4、創建模板

      $ craft view index $ craft view detail

      1

      2

      其中模板引擎使用的是 Jinja2

      resources/templates/index.html

      TODO LIST

      {% for row in rows %} {% if row.complete_time %} {% else %} {% endif %} {% endfor %}
      序號 任務 完成時間 編輯 刪除
      {{ row.id }} {{ row.title }} {{ row.complete_time }}

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      resources/templates/edit.html

      {{ csrf_field }}

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      5、編寫對應的控制器方法

      """A IndexController Module.""" from masonite.request import Request from masonite.view import View from masonite.controllers import Controller from app.TodoList import TodoList from datetime import datetime class IndexController(Controller): """IndexController Controller Class.""" def __init__(self, request: Request, view: View): """IndexController Initializer Arguments: request {masonite.request.Request} -- The Masonite Request class. """ self.request = request self.view = view def index(self): rows = TodoList.all() return self.view.render('index', {"rows": rows}) def save(self): uid = self.request.input("id") title = self.request.input("title") if uid: TodoList.where('id', '=', uid).update({'title': title}) else: TodoList.create(title=title) return self.request.redirect("/") def detail(self): uid = self.request.param("id") row = TodoList.find(uid) return self.view.render('edit', {"row": row}) def delete(self): uid = self.request.param("id") TodoList.find(uid).delete() return self.request.redirect("/") def complete(self): uid = self.request.param("id") current_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S") TodoList.where('id', '=', uid).update({'complete_time': current_time}) return self.request.redirect("/") def truncate(self): TodoList.truncate() return self.request.redirect("/")

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      11

      12

      13

      14

      15

      16

      17

      18

      19

      20

      21

      22

      23

      24

      25

      26

      27

      28

      29

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      6、配置路由文件

      """Web Routes.""" from masonite.routes import Get, Post ROUTES = [ Get('/', 'IndexController@index'), Get('/add', 'IndexController@detail'), Get('/edit/@id', 'IndexController@detail'), Get('/delete/@id', 'IndexController@delete'), Get('/complete/@id', 'IndexController@complete'), Get('/truncate', 'IndexController@truncate'), Post('/save', 'IndexController@save'), ]

      1

      2

      3

      4

      5

      6

      7

      8

      9

      10

      Python:masonite初體驗TodoList

      11

      12

      13

      14

      7、界面展示

      參考文章

      https://docs.masoniteproject.com/creating-a-blog

      Python

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:制造業生產管理培訓(制造業生產管理培訓課題)
      下一篇:第一個這種格式怎么轉化為第二個
      相關文章
      婷婷亚洲综合五月天小说| 久久亚洲国产成人影院| 亚洲国产成人精品无码区花野真一 | 亚洲乱码日产精品BD在线观看| 久久久久久亚洲Av无码精品专口| 亚洲欧洲无码AV不卡在线| 香蕉大伊亚洲人在线观看| 亚洲情A成黄在线观看动漫软件| 亚洲国产成人无码av在线播放| 亚洲国产中文在线视频| 97se亚洲综合在线| 亚洲成aⅴ人片在线影院八| 亚洲美女视频一区| 亚洲最大视频网站| 亚洲乱码在线播放| 亚洲字幕AV一区二区三区四区 | 亚洲一区在线视频| 亚洲一线产品二线产品| 亚洲AV无码一区二区三区牲色| 亚洲精品天堂成人片AV在线播放 | 国产成人无码综合亚洲日韩| 久久夜色精品国产亚洲AV动态图| 亚洲AV无码专区亚洲AV伊甸园| 亚洲av日韩综合一区在线观看| 久久夜色精品国产噜噜亚洲AV| 亚洲精品国产成人中文| 亚洲国产综合在线| 亚洲人成小说网站色| 久久亚洲精品成人无码| 亚洲精品无码专区久久同性男| 久久精品亚洲男人的天堂| 国产精品亚洲аv无码播放| 久久久久久亚洲AV无码专区| 亚洲18在线天美| 亚洲AV无码专区在线观看成人| 亚洲男人的天堂一区二区| 国产亚洲精品a在线观看app| 老司机亚洲精品影院| 日韩亚洲国产综合高清| 亚洲M码 欧洲S码SSS222| 亚洲综合精品香蕉久久网|