目标:
- 实现任务的添加,修改状态与删除
- 任务只能在登陆状态下实现上面的功能
- 添加任务时:显示发布任务的时间与部门等
将此次目标新建一个Flask项目,项目名为(Todo)
Todo项目包含上图所示文件(migrations:数据库扩展;static:静态文件;templates:html文件;forms:表单处理;manager:数据库扩展;models:连接数据库;run:主函数;views:主函数的路径与视图函数)
主函数(run.py)
from models import app
from views import *
if __name__ == '__main__':
app.run()
主函数的路径与视图函数(views.py)
from flask import render_template, redirect, url_for, request, session
from models import app, Todo, db, Department, User, Userlog
from forms import LoginForm,RegisterForm
import functools
def is_login(f):
"""判断用户是否登陆的装饰器"""
@functools.wraps(f)
def wrapper(*args, **kwargs):
if 'user' not in session:
return redirect('/login/')
return f(*args, **kwargs)
return wrapper
@app.route('/')
def index():
todos=Todo.query.all()
parts=Department.query.all()
return render_template('index.html',
todos=todos,
parts=parts
)
@app.route('/login/',methods=['GET','POST'])
def login():
form = LoginForm()
if form.validate_on_submit():
user = form.data['user']
passwd = form.data['passwd']
u = User.query.filter_by(name=user).first()
if u.pwd==passwd:
session['user']=u.name
session['user_id']=u.id
# session['user_id']=u.id
userlog=Userlog(
user_id=u.id
)
db.session.add(userlog)
db.session.commit()
return redirect(url_for('todo_list'))
else:
return render_template('login.html', form=form, message='用户名或密码错误')
return render_template('login.html', form=form)
@app.route('/register/',methods=['GET','POST'])
def register():
form=RegisterForm()
if form.validate_on_submit():
user=form.data['user']
passwd=form.data['passwd']
u = User(name=user, pwd=passwd, department_id=1)
db.session.add(u)
db.session.commit()
return redirect(url_for('login'))
return render_template('register.html',form=form)
@app.route('/logout/')
def logout():
return redirect(url_for('index'))
# 任务的增删改查
@app.route('/todo/add/',methods=['POST'])
@is_login
def todo_add():
name=request.form['todo_name']
part=request.form['part']
todo=Todo(name=name,department_id=part,user_id=1)
db.session.add(todo)
db.session.commit()
return redirect(url_for('todo_list'))
@app.route('/todo/delete/<int:id>/')
@is_login
def todo_delete(id):
todo=Todo.query.filter_by(id=id).first()
db.session.delete(todo)
db.session.commit()
return redirect(url_for('todo_list'))
@app.route('/list/')
def todo_list():
#从数据库中查询
todos=Todo.query.all()
parts=Department.query.all()
return render_template('list.html',
todos=todos,
parts=parts
)
# 修改任务状态
@app.route('/todo/undo/<int:id>/')
@is_login
def undo(id):
todo=Todo.query.filter_by(id=id).first()
todo.status=False
db.session.commit()
return redirect(url_for('todo_list'))
@app.route('/todo/done/<int:id>/')
@is_login
def done(id):
todo = Todo.query.filter_by(id=id).first()
todo.status = True
db.sessi