Python:masonite初体验TodoList

简介: Python:masonite初体验TodoList

一、环境配置

环境


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 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"

2、配置路由


routes/web.py
"""Web Routes."""
from masonite.routes import Get, Post
ROUTES = [
    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 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')

迁移数据, 建表

$ 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 Model
class TodoList(Model):
    """TodoList Model."""
    # 查询数据库的时候会在类名后加s,所以自定义表名
    __table__ = "todolist"
    # 要写入的字段
    __fillable__ = ['title', 'complete_time']

4、创建模板


$ craft view index
$ craft view detail

其中模板引擎使用的是 Jinja2


resources/templates/index.html


 
         

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 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("/")

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'),
]

7、界面展示

image.png

相关文章
|
10月前
|
存储 索引 Python
【Python】—— Pandas 初体验(二)
【Python】—— Pandas 初体验(二)
87 1
|
10月前
|
存储 数据处理 索引
【Python】—— Pandas 初体验(一)
【Python】—— Pandas 初体验(一)
64 1
|
10月前
|
索引 Python
【Python】—— Numpy 初体验
【Python】—— Numpy 初体验
66 0
|
10月前
|
数据可视化 数据挖掘 Linux
Seaborn入门:数据可视化利器初体验
【4月更文挑战第17天】Seaborn是Python的数据可视化库,基于matplotlib提供更高级别的接口。本文介绍了Seaborn的安装、基本绘图功能,如散点图、直方图和箱线图,以及主题和样式的设置。Seaborn自带数据集便于练习,且支持复杂的数据分析任务,如成对关系图和热力图。它是数据可视化的强大工具,适用于科研和数据分析报告。
|
10月前
|
SQL 算法 API
NiceGui:Python中的轻量级GUI框架初体验
NiceGui:Python中的轻量级GUI框架初体验
981 0
|
数据采集 机器人 Python
Python爬虫|反爬初体验
几种简单高效的反爬虫方法总结。
Python爬虫|反爬初体验
|
自然语言处理 Java 程序员
初体验HanLP---Python自然语言处理(1)
初体验HanLP---Python自然语言处理(1)
277 0
初体验HanLP---Python自然语言处理(1)
|
Web App开发 数据库 数据安全/隐私保护
|
数据可视化 Unix Linux
wxPython界面设计初体验-值得学习的 Python GUI 库 (2)
前两篇文章写了关于Python GUI库Tkinter和pyqt5的使用体验,但是Python GUI怎么能少得了wxpython呢?不能偏心,必须安排全了,一家人必须整整齐齐(哈哈哈~) Python GUI作为桌面软件设计重要部分,是开发桌软中不可或缺,也是不可避免的一环,灵活掌握GUI库的使用,才能让自己不惧任何GUI相关的需求,设计出的界面更加符合需求,更加精美. 给用户的第一印象是界面设计,毕竟大家大多都是外貌协会,简洁且好看的页面,是一个软件或者程序吸引人的最大亮点,所以掌握各种GUI的使用是我们桌面软件开发程序猿的必备技能,就算工作不需要,平时搞个辅助小软件也是不错,总不能要
654 0
|
存储 搜索推荐 数据挖掘
Python数据分析之Numpy初体验
NumPy是一个用于科学计算的Python库,主要用于快速操作数组和矩阵。NumPy提供了许多实用的函数和方法,可以大大简化科学计算的代码。
232 0

热门文章

最新文章