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

初次体验框架,感觉里边提供了丰富的命令行工具可以快速开发,
主要是ORM很棒,区别于Python生态Django等的ORM,和PHP的laravel很像,简单高效

一、环境配置

环境

Python 3.4+
masonite 2.2.26
masonite-cli 2.2.2

安装

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

二、新建一个项目

# 1、新建项目
craft new project_name
cd project_name# 2、安装依赖
craft install  # 3、启动服务
craft serve

访问:http://127.0.0.1:8000/
出现欢迎界面

三、示例1:Hello World

1、创建控制器

$ craft controller Index

app/http/controllers/IndexController.py

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

2、配置路由

routes/web.py

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

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

2、创建迁移文件

$ craft migration create_todolist_table --create todolist

设置3个字段:id,title,complete_time
databases/migrations/create_todolist_table.py

from orator.migrations import Migrationclass 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()  # 可以为nulltable.timestamps()def down(self):"""Revert the migrations."""self.schema.drop('todolist')

迁移数据, 建表

$ craft migrate

查看建表语句

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
);

可以看到默认多加了2个字段:created_at,updated_at

3、创建Model

$ craft model TodoList

稍作修改
app/TodoList.py

"""TodoList Model."""from config.database import Modelclass TodoList(Model):"""TodoList Model."""# 查询数据库的时候会在类名后加s,所以自定义表名__table__ = "todolist"# 要写入的字段__fillable__ = ['title', 'complete_time']

4、创建模板

$ craft view index
$ craft view detail

其中模板引擎使用的是 Jinja2

resources/templates/index.html


<h1>TODO LIST</h1><a href="/add"><button>添加</button></a>
<a href="/truncate"><button>清空</button></a><table border="1"><thead><tr><td>序号</td><td>任务</td><td>完成时间</td><td>编辑</td><td>删除</td></tr></thead><tbody>{% for row in rows %}<tr><td>{{ row.id }} </td><td>{{ row.title }} </td>{% if row.complete_time %}<td>{{ row.complete_time }}</td>{% else %}<td><a href="/complete/{{ row.id }}"><button>完成</button></a></td>{% endif %}<td><a href="/edit/{{ row.id }}"><button>修改</button></a></td><td><a href="/delete/{{ row.id }}"><button>删除</button></a></td></tr>{% endfor %}</tbody>
</table>

resources/templates/edit.html

<form action="/save" method="post">{{ csrf_field }}<input type="hidden" name="id" id="title" value="{{ row.id }}"><label for="title"></label><input type="text" name="title" id="title" value="{{ row.title }}"><input type="submit" value="提交">
</form>

5、编写对应的控制器方法

"""A IndexController Module."""from masonite.request import Request
from masonite.view import View
from masonite.controllers import Controllerfrom app.TodoList import TodoList
from datetime import datetimeclass IndexController(Controller):"""IndexController Controller Class."""def __init__(self, request: Request, view: View):"""IndexController InitializerArguments:request {masonite.request.Request} -- The Masonite Request class."""self.request = requestself.view = viewdef 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("/")

6、配置路由文件

"""Web Routes."""from masonite.routes import Get, PostROUTES = [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'),
]

7、界面展示

参考文章
https://docs.masoniteproject.com/creating-a-blog

Python:masonite初体验TodoList相关推荐

  1. 读《Hands-On Transfer Learning with Python》初体验

    读<Hands-On Transfer Learning with Python>初体验 最近由于工作原因及个人兴趣,对迁移学习兴趣盎然,很想深入了解该领域知识,偶得该领域最新力作,现分享 ...

  2. python android开发_Android与Python爱之初体验

    独家授权码个蛋转载 * 前言 看到这个标题,大家可能会认为就是Android运行python脚本,或者用python写app,这些用QPython和P4A就可以实现了.我在想既然C可以调用Python ...

  3. Python数据分析初体验

    一.数据分析三大神器 1.NumPy - Numerical Python - 提供了名为ndarray的数据类型,基于该类型我们可以实现对数据的存储和批量处理. 2.Pandas - Panel D ...

  4. python:爬虫初体验

    最近帮老妈在58上找保姆的工作,无奈58上的中介服务太多 了,我想找一些私人发布的保姆招聘信息,所以倒腾了一个python的爬虫,将数据爬出来之后通过Excel进行过滤中介,因为代码实在是太简单,这里 ...

  5. python之初体验(一)

    背景:又要做狗血的数据迁移.数据清洗,每次面对此类需求,心里都会把pm祖宗老老小小都问候个遍.解决办法,要么用java写一大堆支撑代码,要么在vm上写蹩脚的shell,都很不爽.最近尝试了下pytho ...

  6. python发红包问题_一个关于红包的问题引发的python算法初体验

    有个初学python的小伙伴,在群里问我关于实现抢红包的算法的问题,于是就有了以下对话 这里,这位同学的思路是这样的: 每次抢到的金额 = 随机区间 ( 0.01, 剩余金额 ) 为什么我这样说呢?我 ...

  7. 学Python的初体验——模块简述

    Python的模块有很多很多,就像纷乱繁杂的API,都分别归属于这些模块,假如我们明白了哪个模块干什么事,能干什么,能做到什么,或者说 -- 理论上作为大众应用如此广泛的它应该能做到什么,那即使我们不 ...

  8. python hdfs初体验

    新建目录 chr 新建文件hdfstest1.txt并写入内容 复制hdfstest1.txt的内容到hdfstest2.txt 转载于:https://www.cnblogs.com/chrran/ ...

  9. python函数初体验

    函数的定义: def 函数名(传入参数):函数体return 返回值 练习案例:自动查核酸 定义一个函数,函数名任意,要求调用函数后可以输出如下内容: 念兮欢迎您! 请出示您的健康码以及72小时核酸证 ...

最新文章

  1. 设置android启动器,教程:在任意 Android 设备上安装 HTC 专属桌面启动器
  2. SAP MM 物料主数据的Document Data
  3. Python-EEG工具库MNE-Python详细安装与使用
  4. 李宏毅线性代数笔记5:线性方程组
  5. 【1】生产者-消费者模型的三种实现方式
  6. Jenkins(Pipeline)
  7. java heap space 解决方法_内存溢出错误:java堆空间
  8. 凸优化学习笔记(五):凸优化算法、无约束优化算法、有约束优化算法
  9. 《数据库实验》实验一:建立数据库和基本表结构
  10. 阿里云Ubuntu系统部署K8s集群
  11. TOM企业邮箱,为你打造企业专属邮箱
  12. C++:构造函数中调用虚函数
  13. 中科院各大计算所详细介绍
  14. android http下载限速,安卓手机端两种让网盘不限速下载方法介绍
  15. 分支语句与循环语句(二)
  16. iframe例子 (
  17. 宝塔linux如何防护,使用宝塔面板的CC***防护策略
  18. 谈谈我个人对WEB3.0对一些看法
  19. 温度补偿计算公式_热力管道补偿器补偿量计算公式
  20. 纯CSS3绘制的猫咪老师——献给喜欢CSS3及《夏目友人帐》的你

热门文章

  1. 汇编(一):基础知识
  2. 小户型复式装修里的大学问-我爱我家装修网
  3. 联想ideapad300s重置电脑出现初始化失败的问题
  4. JFrame布局讲解
  5. html加密文档如何打开,如何打开docx文件 在弹出窗口中选择加密的文件
  6. 如何快速的搭建自己的云盘
  7. 手机号码、身份证号验证
  8. go爬虫框架-colly实战(三)--全景卡通图片抓取下载
  9. 【Android】01---界面布局
  10. 使用Java爬虫爬取蓝调口琴网 口琴曲谱与伴奏资源