第一步:是對視圖函數的改寫,經過查詢數據庫數據,進行分頁顯示html
# 修改清單顯示的視圖函數 @app.route('/list/') @app.route('/list/<int:page>') def todo_list(page=1): todos = Todo.query.paginate(page,5) parts = Department.query.all() return render_template('todo_list.html',todos=todos,parts=parts)
第二步:改寫html文件,實現分頁顯示,從新定義一個宏文件python
{# marco_page.html#} {% macro paginate(fname, todos) %} {# dataObj 就是views函數中傳遞過來的Paginate實例化的對象;#} <ul class="pagination"> {# 判斷是否由上一頁, #} {% if todos.has_prev %} {# /list/4/ ===> /list/3/#} <li><a href="{{ url_for(fname, page=todos.prev_num) }}">前一頁</a></li> {% else %} <li class="disabled"><a href="#">前一頁</a></li> {% endif %} {# 根據從數據庫中查詢的數據, 來肯定分頁的個數, 使用for循環 #} {# 返回一個迭代器, 若是有100頁, 薄嗯不會返回100個數字, 而是1 2 。。。。 99 100 #} {% for page in todos.iter_pages(right_current=2) %} {# page: 要生成html代碼的頁數, todos.page: 用戶但願顯示數據的頁數 #} {% if page == todos.page %} <li class="active"><a href={{ url_for(fname, page=page) }}>{{ page }} </a></li> {% elif page == None %} <li class="disabled"><a href={{ url_for(fname, page=1) }}>...</a></li> {% else %} <li><a href={{ url_for(fname, page=page) }}>{{ page }}</a></li> {% endif %} {% endfor %} {# 判斷是否有後一頁 #} {% if todos.has_next %} {# /list/4/ ===> /list/3/#} <li><a href="{{ url_for(fname, page=todos.next_num) }}">後一頁</a></li> {% else %} <li class="disabled"><a href="#">後一頁</a></li> {% endif %} </ul><br> {% endmacro %}
第三步,清單顯示的模板文件調用分頁顯示欄數據庫
{% from 'macro_page.html' import paginate %} {{ paginate('todo_list', todos) }}
第一步,給原有數據庫操做文件添加新的數據庫表Userlog,用來存聽任務的修改編輯日誌
對原有的數據庫進行再添加時,須要進行數據庫遷移。flask
class Userlog(db.Model): id = db.Column(db.Integer, autoincrement=True, primary_key=True) add_time = db.Column(db.DateTime, default=datetime.now()) # 建立時間 ip = db.Column(db.String(200), nullable=False) # 登陸ip content = db.Column(db.String(200)) area = db.Column(db.String(200)) # 用戶登陸地點 user_id = db.Column(db.Integer, db.ForeignKey('user.id')) # 外鍵 def __repr__(self): return '<Userlog: %s>' % (self.ip)
確保你有一個關於數據庫遷移的文件,基礎代碼以下session
# manage.py from flask_migrate import MigrateCommand, Migrate from flask_script import Shell,Manager from todo_models import app,db,User,Department,Todo manager = Manager(app) migrate = Migrate(app,db) manager.add_command('db',MigrateCommand) if __name__ == '__main__': manager.run()
在terminal終端執行命令app
python manage.py db init python manage.py db migrate -m '添加日誌信息' python manage.py db upgrade
第二步,給路由和對應視圖函數加上採集的日誌信息,以添加清單任務爲例
修改狀態和刪除任務也加上日誌信息,這裏省略函數
userlog = Userlog(ip=request.remote_addr, area="西安", user_id=1, content="添加任務%s" %(name)) db.session.add(userlog) db.session.commit()