利用 Flask 写一个 todolist (一)

准备工作

开始写todolist之前,必然需要写一个简单的程序流程及相关参数,这里我使用思维导图的方式设计了一个简单的界面以及需要实现的内容,较为粗糙,供各位参考,错漏之处还望各位海涵。
利用 Flask 写一个 todolist (一)_第1张图片
这里主要实现以下几个功能:

  1. 时间显示(主要用于显示服务器时间,为后期番茄钟功能进行开发)
  2. todolist部分(主要由一个勾选框与文本组成,打勾后自动划线,刷新后自动消失)
  3. 新建任务(用于新建todolist任务)
  4. 历史完成情况(用于展示用户完成情况统计)

这几个功能是我个人认为前期比较重要的功能,这里再解释一下任务表字段:

  1. 任务名用于显示用户的任务,这里不计划添加子任务功能,所以只用了一个字段。
  2. 设置时间字段用于显示任务设置时间
  3. 完成日期用于用户历史完成情况的统计计算
  4. 用户名用于保存用户信息

用户字段由用户名、密码、注册日期组成,密码使用salt加密,表内不明文保存用户密码

开始工作

第一步,新建用户名为 todolist 密码为 todolist,本地开发环境为 Windows10,使用 Python3 作为开发语言。首先先新建用户,这里使用Mysql数据库,版本为 5.7.20

#新建用户
create user 'todolist'@'localhost' identified by 'todolist';
#新建 todolist 专用数据库
create database todolist;

第二步,使用 flask 插件 sqlalchemy 进行数据库连接与读写操作

from flask_sqlalchemy import SQLAlchemy
from .extensions import bcrypt

db = SQLAlchemy()

class Tasks(db.Model):
    __tablename__ = 'tasks'
    id = db.Column(db.String(45), primary_key=True)
    setdate = db.Column(db.DateTime)
    overdate = db.Column(db.DateTime)
    username = db.Column(db.String(255), unique=True)
    task = db.Column(db.String(255))
    def __init__(self,id, username, setdate, task):
        self.id = id
        self.username = username
        self.setdate = setdate
        self.task = task
    def get_task(self):
        return str(self.task)
    def set_overdate(self, overdate):
        self.overdate = overdate
    def __repr__(self):
        return "" % self.task

class Users(db.Model):
    __tablename__ = 'users'
    id = db.Column(db.String(45), primary_key=True)
    username =  db.Column(db.String(255))
    password = db.Column(db.String(255))

    def __init__(self, id, username, password):
        self.id = id
        self.username = username
        self.password = self.set_password(password)

    def set_password(self, password):
        """Conver the password """
        return bcrypt.generate_password_hash(password)

    def check_password(self, password):
        """Check the user's password"""
        return bcrypt.check_password_hash(self.password, password)

    def get_id(self):
        """ Return the user's id"""
        return str(self.id)
    def __repr__(self):
        return "" %self.username

model文件用于以对象形式表现数据库数据,在 manager 中进行设置,用于初始化数据库

from app import create_app
from flask_script import Manager, Server
from app import models

import os

#设置开发环境变量
env = os.environ.get('TODOLIST_ENV', 'dev')
#创建app对象
app = create_app('app.config.%sConfig'%env.capitalize())
#初始化manger对象用于控制app
manager = Manager(app)
manager.add_command('server', Server())

@manager.shell
def make_shell_context():
    """Create a python CLI"""
    return dict(app=app,
            db=models.db,
            Users=models.Users,
            Tasks=models.Tasks,
            Server=Server)

if __name__ == '__main__':
    manager.run()

这里贴出配置文件config.py,使用环境变量对程序的配置进行控制,实现开发环境与生产环境的切换

class Config():
    SECRET_KEY='its a secret'
class ProdConfig():
    pass
class DevConfig():
    SECRET_KEY='its a secret'
    DEBUG = True
    SQLALCHEMY_DATABASE_URI = 'mysql+mysqlconnector://todolist:todolist@localhost/todolist'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

第三步,启动 shell 进行数据库初始化与简单数据入库测试

python manage.py shell

input: db  
output: <SQLAlchemy engine=mysql+mysqlconnector://todolist:***@localhost/todolist?charset=utf8>
input: db.create_all()

利用 Flask 写一个 todolist (一)_第2张图片
这里可以看到已经成功创建了 tasks 表与 users 表,接下来我们插入一些测试数据

>>> admin=Users(id=str(uuid4()), username='admin', password='admin') 
>>> db.session.add(admin)
>>> db.session.commit()  

利用 Flask 写一个 todolist (一)_第3张图片
这里可以看到我们成功创建了一个 admin 用户,密码已被 hash 加密,有安全需求的可自行加盐。接下来再创建一个任务进行测试。

>>> task1=Tasks(id=str(uuid4()), username='admin', setdate=datetime.datetime.now(),task='设置的第一个任务')
>>> db.session.add(task1)
>>> db.session.commit()

利用 Flask 写一个 todolist (一)_第4张图片
这里可以看到已经成功创建新任务,至此前期的数据库连接工作已完成,接下来进行主体程序的设计。

你可能感兴趣的:(flask)