Django入門之開發環境搭建1.1
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
序號 | 任務 | 完成時間 | 編輯 | 刪除 | |
{{ row.id }} | {{ row.title }} | {% if row.complete_time %}{{ row.complete_time }} | {% else %}{% endif %} |
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
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
11
12
13
14
7、界面展示
參考文章
https://docs.masoniteproject.com/creating-a-blog
Python
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。