• python实战----Todo清单续写


    添加分页功能

    第一步:是对视图函数的改写,通过查询数据库数据,进行分页显示

    # 修改清单显示的视图函数
    @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文件,实现分页显示,重新定义一个宏文件

    {# 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,用来存放任务的修改编辑日志
    对原有的数据库进行再添加时,需要进行数据库迁移。

    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)
    

    确保你有一个关于数据库迁移的文件,基础代码如下

    # 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终端执行命令

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

    图片描述

  • 相关阅读:
    第二次Java作业2
    5月29日打卡
    5月24号打卡
    5月22日打卡
    窗口的切换
    第三次作业
    第五次实训作业
    第二次Java作业
    无法解析的外部符号之_cvLoadImage,_cvCreateMat,_cvReleaseImage之类
    无法解析的外部符号"void_cdecl caffe::caffe_gpu_dot<double>(int,double........)"
  • 原文地址:https://www.cnblogs.com/10manongit/p/12745093.html
Copyright © 2020-2023  润新知