Python:masonite初体验TodoList
文档: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相关推荐
- 读《Hands-On Transfer Learning with Python》初体验
读<Hands-On Transfer Learning with Python>初体验 最近由于工作原因及个人兴趣,对迁移学习兴趣盎然,很想深入了解该领域知识,偶得该领域最新力作,现分享 ...
- python android开发_Android与Python爱之初体验
独家授权码个蛋转载 * 前言 看到这个标题,大家可能会认为就是Android运行python脚本,或者用python写app,这些用QPython和P4A就可以实现了.我在想既然C可以调用Python ...
- Python数据分析初体验
一.数据分析三大神器 1.NumPy - Numerical Python - 提供了名为ndarray的数据类型,基于该类型我们可以实现对数据的存储和批量处理. 2.Pandas - Panel D ...
- python:爬虫初体验
最近帮老妈在58上找保姆的工作,无奈58上的中介服务太多 了,我想找一些私人发布的保姆招聘信息,所以倒腾了一个python的爬虫,将数据爬出来之后通过Excel进行过滤中介,因为代码实在是太简单,这里 ...
- python之初体验(一)
背景:又要做狗血的数据迁移.数据清洗,每次面对此类需求,心里都会把pm祖宗老老小小都问候个遍.解决办法,要么用java写一大堆支撑代码,要么在vm上写蹩脚的shell,都很不爽.最近尝试了下pytho ...
- python发红包问题_一个关于红包的问题引发的python算法初体验
有个初学python的小伙伴,在群里问我关于实现抢红包的算法的问题,于是就有了以下对话 这里,这位同学的思路是这样的: 每次抢到的金额 = 随机区间 ( 0.01, 剩余金额 ) 为什么我这样说呢?我 ...
- 学Python的初体验——模块简述
Python的模块有很多很多,就像纷乱繁杂的API,都分别归属于这些模块,假如我们明白了哪个模块干什么事,能干什么,能做到什么,或者说 -- 理论上作为大众应用如此广泛的它应该能做到什么,那即使我们不 ...
- python hdfs初体验
新建目录 chr 新建文件hdfstest1.txt并写入内容 复制hdfstest1.txt的内容到hdfstest2.txt 转载于:https://www.cnblogs.com/chrran/ ...
- python函数初体验
函数的定义: def 函数名(传入参数):函数体return 返回值 练习案例:自动查核酸 定义一个函数,函数名任意,要求调用函数后可以输出如下内容: 念兮欢迎您! 请出示您的健康码以及72小时核酸证 ...
最新文章
- 设置android启动器,教程:在任意 Android 设备上安装 HTC 专属桌面启动器
- SAP MM 物料主数据的Document Data
- Python-EEG工具库MNE-Python详细安装与使用
- 李宏毅线性代数笔记5:线性方程组
- 【1】生产者-消费者模型的三种实现方式
- Jenkins(Pipeline)
- java heap space 解决方法_内存溢出错误:java堆空间
- 凸优化学习笔记(五):凸优化算法、无约束优化算法、有约束优化算法
- 《数据库实验》实验一:建立数据库和基本表结构
- 阿里云Ubuntu系统部署K8s集群
- TOM企业邮箱,为你打造企业专属邮箱
- C++:构造函数中调用虚函数
- 中科院各大计算所详细介绍
- android http下载限速,安卓手机端两种让网盘不限速下载方法介绍
- 分支语句与循环语句(二)
- iframe例子 (
- 宝塔linux如何防护,使用宝塔面板的CC***防护策略
- 谈谈我个人对WEB3.0对一些看法
- 温度补偿计算公式_热力管道补偿器补偿量计算公式
- 纯CSS3绘制的猫咪老师——献给喜欢CSS3及《夏目友人帐》的你