python 實現(xiàn)任務管理清單案例
更新時間:2020年04月25日 15:48:46 作者:zcx1203
這篇文章主要介紹了python 實現(xiàn)任務管理清單案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
base.html:
{% extends "bootstrap/base.html" %} {% block styles %} {{ super() }} <link rel="stylesheet" href="../static/css/main.css" rel="external nofollow" > {% endblock %} {% block navbar %} <nav class="navbar navbar-default"> <div class="container-fluid"> <!-- Brand and toggle get grouped for better mobile display --> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1" aria-expanded="false"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="index.html" rel="external nofollow" ></a> </div> <!-- Collect the nav links, forms, and other content for toggling --> <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> <ul class="nav navbar-nav"> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ></a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >首頁<span class="sr-only">(current)</span></a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >新聞</a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >國際</a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >國內(nèi)</a></li> <li><a href="/sysinfo/" rel="external nofollow" >系統(tǒng)信息</a></li> <li><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >登陸用戶</a></li> </ul> <ul class="nav navbar-nav navbar-right"> {% if 'user' in session %} <li><a href="login.html" rel="external nofollow" ><span class="glyphicon glyphicon-user"></span> {{ session.user }}</a></li> <li><a href="/logout/" rel="external nofollow" ><span class="glyphicon glyphicon-log-in"></span> 注銷 </a></li> {% else %} <li><a href="/login/" rel="external nofollow" ><span class="glyphicon glyphicon-log-in"></span> 登陸</a></li> <li><a href="/register/" rel="external nofollow" ><span class="glyphicon glyphicon-log-out"></span> 注冊</a></li> {% endif %} </ul> </div><!-- /.navbar-collapse --> </div><!-- /.container-fluid --> </nav> {% endblock %} {% block content %} {#定義屬于自己的block#} {% block newcontent %} {% endblock %} {% block footer %} <div class="footer"> 京ICP備11008151號京公網(wǎng)安備11010802014853 </div> {% endblock %} {% endblock %}
list.html:
{% extends 'base.html' %} {% block newcontent %} <div class="row"> <div class="col-md-6 col-md-offset-3"> /*添加任務*/ <form class="form-horizontal" action="/todo/add/" method="post"> <div class="form-group"> {# 添加框 #} <div class="col-sm-9"> <input type="text" class="form-control" placeholder="請?zhí)砑尤蝿? required="required" name="todo_name"> </div> {# 選擇框 #} <div class="col-sm-2"> <select class="form-control" name="part"> {% for part in parts %} <option value="{{ part.id }}">{{ part.name }}</option> {% endfor %} </select> </div> {# 添加的按鈕 #} <div class="col-sm-1"> <input type="submit" class="btn btn-success" value="添加任務"> </div> </div> </form> /*任務顯示*/ <h1>添加任務</h1> <table class="table table-bordered"> <tr> <td>任務內(nèi)容</td> <td>創(chuàng)建時間</td> <td>狀態(tài)</td> <td>所屬部門</td> <td>操作</td> </tr> {% for todo in todos %} <tr> <td>{{ todo.name }}</td> <td>{{ todo.add_time }}</td> {# #} <td> {% if todo.status %} <a href="/todo/undo/{{ todo.id }}/" rel="external nofollow" class="btn btn-sm btn-success" role="button"><span class="glyphicon glyphicon-ok"></span> 已完成</a> {% else %} <a href="/todo/done/{{ todo.id }}/" rel="external nofollow" class="btn btn-sm btn-warning" role="button"><span class="glyphicon glyphicon-remove"></span> 未完成</a> {% endif %} </td> <td>{{ todo.department.name }}</td> <td><a href="/todo/delete/{{ todo.id }}/" rel="external nofollow" class="btn btn-sm btn-danger" role="button"><span class="glyphicon glyphicon-remove"></span> 刪除</a></td> </tr> {% endfor %} </table> </div> </div> {% endblock %}
models.py:
from datetime import datetime from flask import Flask from flask_sqlalchemy import SQLAlchemy from flask_bootstrap import Bootstrap app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:971203@localhost/Todo' # SQLAlchemy 將會追蹤對象的修改并且發(fā)送信號。 app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True db = SQLAlchemy(app) bootstrap = Bootstrap(app) app.config['SECRET_KEY'] = 'westos' # 1). 面向?qū)ο蠓绞絼?chuàng)建表 # 2). 分析關系: # 部門和用戶: 一對多 # 用戶和任務: 一對多的關系 # 用戶和用戶登錄日志: 一對多的關系 # 實現(xiàn)一對多(Role(1): User(n))的關系 # - 多的一端寫外鍵 # - 少的一端寫反向引用 class User(db.Model): id = db.Column(db.Integer, autoincrement=True, primary_key=True) # unique:用戶名唯一, nullable=False指用戶名不能為空; name = db.Column(db.String(50), unique=True, nullable=False) pwd = db.Column(db.String(100)) email = db.Column(db.String(30), unique=True) phone = db.Column(db.String(30), unique=True) info = db.Column(db.Text) # 個人簡介 add_time = db.Column(db.DateTime, default=datetime.now()) # 創(chuàng)建時間 department_id = db.Column(db.Integer, db.ForeignKey('department.id')) todos = db.relationship('Todo', backref='user') userlogs = db.relationship('Userlog', backref='user') # 部門id與其他表關聯(lián),不能隨便寫 def __repr__(self): return '<User: %s>' %(self.name) # 部門 class Department(db.Model): id = db.Column(db.Integer, autoincrement=True, primary_key=True) name = db.Column(db.String(50), unique=True, nullable=False) # 反向引用: user就包含一個屬性, department users = db.relationship('User', backref='department') todos = db.relationship('Todo', backref='department') def __repr__(self): return '<Department: %s>' %(self.name) class Todo(db.Model): id = db.Column(db.Integer, autoincrement=True, primary_key=True) name = db.Column(db.String(200), nullable=False) add_time = db.Column(db.DateTime, default=datetime.now()) # 創(chuàng)建時間 status = db.Column(db.Boolean, default=False) # 任務狀態(tài), 默認為Flase(未完成) department_id = db.Column(db.Integer, db.ForeignKey('department.id')) user_id = db.Column(db.Integer,db.ForeignKey('user.id') ) def __repr__(self): return '<Todo: %s>' % (self.id) # 用戶登錄日志 class Userlog(db.Model): id = db.Column(db.Integer, autoincrement=True, primary_key=True) add_time = db.Column(db.DateTime, default=datetime.now()) # 創(chuàng)建時間 ip = db.Column(db.String(200), nullable=False) # 登錄ip area = db.Column(db.String(200)) # 用戶登錄地點 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 外鍵 def __repr__(self): return '<Userlog: %s>' % (self.ip)
views.py:
from flask import render_template, request, redirect, url_for, session from models import app, Todo, db, Department,User from mDB import isPasswdOk,isUserExist,addUser from forms import LoginForm,RegisterForm @app.route('/') def index(): return render_template('base.html') @app.route('/register/') def register(): form = RegisterForm() if form.validate_on_submit(): user = request.form('user') passwd = request.form('passwd') return render_template('register.html') @app.route('/login/',methods=['GET','POST']) def login(): form = LoginForm() # 如果是post方法并且表單驗證通過的話, 返回True; if form.validate_on_submit(): # 1). 獲取用戶提交的表單信息 # print(form.data) 是字典類型, 內(nèi)容如下: # {'user': 'westos', 'passwd': 'westos', 'submit': True } user = form.data['user'] passwd = form.data['passwd'] # 2. 判斷用戶名和密碼是否正確 if isPasswdOk(user, passwd): # 將用戶名和密碼信息存儲到session中; session['user'] = user session['passwd'] = passwd # 如果登陸成功, 跳轉(zhuǎn)到主頁; return redirect(url_for('todo_list')) else: # 如果登陸失敗, 重新登陸; return render_template('login.html',form=form, message="用戶名或者密碼錯誤") return render_template('login.html', form=form) @app.route('/logout/') def logout(): session.pop('user',None) session.pop('passwd',None) return redirect(url_for('todo_list')) # 任務的增刪改查 @app.route('/todo/add/', methods=['POST']) def todo_add(): # 獲取提交的任務信息 name = request.form['todo_name'] part = request.form['part'] # 添加完成之后, 返回任務列表顯示頁面 u = User.query.filter_by(name=session['user']).first() id = u.id todo = Todo(name=name, department_id=part, user_id=id) db.session.add(todo) db.session.commit() return redirect(url_for('todo_list')) @app.route('/todo/delete/<int:id>/') def todo_delete(id): u = Todo.query.filter_by(id=id).first() db.session.delete(u) db.session.commit() return redirect(url_for('todo_list')) @app.route('/list/') def todo_list(): # 1). 從數(shù)據(jù)庫中查詢 todos = Todo.query.all() parts = Department.query.all() return render_template('list.html', todos = todos, parts=parts) # 修改任務的狀態(tài)(變成已完成狀態(tài)/變成未完成狀態(tài)) @app.route('/todo/undo/<int:id>/') def undo(id): todo = Todo.query.filter_by(id=id).first() todo.status = False db.session.commit() # 更新狀態(tài)后, 返回任務列表頁 return redirect(url_for('todo_list')) @app.route('/todo/done/<int:id>/') def done(id): todo = Todo.query.filter_by(id=id).first() todo.status = True db.session.commit() # 更新狀態(tài)后, 返回任務列表頁 return redirect(url_for('todo_list'))
run.py:
# 項目真實運行腳本 from models import app,db # 導入編寫的視圖函數(shù)和路由 from views import * app.run()
以上這篇python 實現(xiàn)任務管理清單案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
從源碼解析Python的Flask框架中request對象的用法
Flask中的request對象發(fā)送請求使用起來十分方便,但也有一些需要注意的地方,這里我們來從源碼解析Python的Flask框架中request對象的用法,需要的朋友可以參考下.2016-06-06python中numpy.empty()函數(shù)實例講解
在本篇文章里小編給大家分享的是一篇關于python中numpy.empty()函數(shù)實例講解內(nèi)容,對此有興趣的朋友們可以學習下。2021-02-02Python灰度變換中的分段線性函數(shù)專項分析實現(xiàn)
灰度變換是指根據(jù)某種目標條件按一定變換關系逐點改變源圖像中每個像素灰度值的方法。目的是改善畫質(zhì),使圖像顯示效果更加清晰。圖像的灰度變換處理是圖像增強處理技術中的一種非常基礎、直接的空間域圖像處理方法,也是圖像數(shù)字化軟件和圖像顯示軟件的一個重要組成部分2022-10-10Python數(shù)學建模學習模擬退火算法整數(shù)規(guī)劃問題示例解析
整數(shù)規(guī)劃問題在工業(yè)、經(jīng)濟、國防、醫(yī)療等各行各業(yè)應用十分廣泛,是指規(guī)劃中的變量(全部或部分)限制為整數(shù),屬于離散優(yōu)化問題Discrete Optimization2021-10-10