当前位置:   article > 正文

关于flask入门教程-图书借阅系统-一

flask图书借阅系统怎么运行

Flask是一个轻量级的可定制框架,较其他同类型框架更为灵活、轻便、安全且容易上手。本文通过一个图书馆借阅的实例逐步实现flask从入门到崩溃之路。

Flask内置了Werkzeug和Jinja2两个核心函数库。

Werkzeug库支持URL路由请求集成,一次可以响应多个用户的访问请求;支持Cookie和会话管理,通过身份缓存数据建立长久连接关系,并提高用户访问速度;支持交互式Javascript调试,提高用户体验;可以处理HTTP基本事务,快速响应客户端推送过来的访问请求。

Jinja2库支持自动HTML转移功能,能够很好控制外部黑客的脚本攻击。系统运行速度很快,页面加载过程会将源码进行编译形成python字节码,从而实现模板的高效运行;模板继承机制可以对模板内容进行修改和维护,为不同需求的用户提供相应的模板。

flask-sqlalchemy,是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作, flask本身没有内置orm框架,需要依赖第三方模块。

Flask-WTF处理表单,Flask-WTF将表单数据解析、CSRF保护、文件上传等功能与Flask集成,提供了服务端的安全加密和表单校验功能。

通过pycharm新建flask项目,会生成一个最简单的标准结构:

其中app.py是入口程序,当然后续可以完善,static存放的是css,js,图片等相关资源文件,templates存放的是html文件。

下面是基于模板生成的最简单的hello world!应用

  1. from flask import Flask,render_template
  2. app = Flask(__name__)
  3. @app.route('/')
  4. def indexv1():
  5. return "hello world!"
  6. if __name__ == '__main__':
  7. app.run(debug=True)

下面这段代码是在python里输出的html应用看起来复杂了一些,并且能接受内部参数了。

  1. @app.route('/')
  2. def indexv2():
  3. user={'username':'wangbq'}
  4. html_text="""
  5. <html>
  6. <head>
  7. <title>inner flask page</title>
  8. </head>
  9. <body>
  10. <h3>hello,"""+user['username']+"""</h3>
  11. </body>
  12. </html>
  13. """
  14. return html_text

继续改造,生成了一个新的html页面,这段html页面和传统的html页面有点不一样,能实现python代码和html页面的参数传递了,同时也是将前端和后端分离的起点。

  1. @app.route('/')
  2. def indexv3():
  3. user = {'username':'wangbq'}
  4. return render_template('indexv1.html',title='wangbq',user=user)

indexv1.html代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>{{ title }} - Flask Title</title>
  6. </head>
  7. <body>
  8. <h3> Hello ,{{ user.username }} !</h3>
  9. </body>
  10. </html>


再继续加工改造,在python代码里产生更多的参数,而html页面也更加复杂,可以实现if else,loop循环了,这证明可以实现一下基本的业务了。

  1. @app.route('/')
  2. def indexv4():
  3. user = {'username':'wangbq'}
  4. borrower={'postcard':'1111111111','borrowdate':'2021-09-13',}
  5. booklists = [
  6. {'author':'张三', 'bookname':'Python从入门到崩溃' },
  7. {'author':'李四', 'bookname':'基于flask的web开发' },
  8. {'author':'王五', 'bookname': 'Python数据分析'},
  9. {'author':'李四', 'bookname': 'Oracle开发艺术'},
  10. ]
  11. return render_template('indexv2.html',title='wangbq',borrower=borrower,booklists=booklists)

indexv2.html代码如下:

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8" />
  5. {% if title %}
  6. <title>{{ title }} - Flask Title</title>
  7. {% else %}
  8. <title>欢迎来到博客!</title>
  9. {% endif %}
  10. </head>
  11. <body>
  12. <h3>借阅证号:{{ borrower.postcard }} ,借阅时间:{{ borrower.borrowdate }}</h3>
  13. <table>
  14. <tr>
  15. <th>作者姓名</th>
  16. <th>书籍名称</th>
  17. </tr>
  18. {% for book in booklists %}
  19. <tr>
  20. <td>{{ book.author }} </td>
  21. <td>{{ book.bookname }}</td>
  22. </tr>
  23. {% endfor %}
  24. </table>
  25. </body>
  26. </html>

但输出的结果有点太丑了,下面继续加工改造,基本上python代码变化不大,但html页面新增了一个base.html

  1. @app.route('/')
  2. def indexv4():
  3. user = {'username':'wangbq'}
  4. borrower={'postcard':'1111111111','borrowdate':'2021-09-13'}
  5. tabletitle=['author','bookname']
  6. booklists = [
  7. {'author':'张三', 'bookname':'Python从入门到崩溃' },
  8. {'author':'李四', 'bookname':'基于flask的web开发' },
  9. {'author':'王五', 'bookname': 'Python数据分析'},
  10. {'author':'李四', 'bookname': 'Oracle开发艺术'},
  11. ]
  12. return render_template('indexv4.html',user=user,borrower=borrower,tabletitle=tabletitle,booklists=booklists)

base.html代码

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <title>Twitter Bootstrap Tutorial - A responsive layout tutorial</title>
  6. <link href="../static/css/bootstrap.min.css" rel="stylesheet" />
  7. <link href="../static/css/bootstrap-theme.min.css" rel="stylesheet" />
  8. <link href="../static/css/customer.css" rel="stylesheet" />
  9. </head>
  10. <body>
  11. <div class="logo">
  12. logo
  13. </div>
  14. <div class="container-fluid">
  15. <div class="row main">
  16. <div class="col-md-3 nav">nav</div>
  17. <div class="col-md-9 content">
  18. <!--div class="content-body">content</div-->
  19. <div class="content-body">
  20. {% block content %}
  21. {% endblock %}
  22. </div>
  23. </div>
  24. </div>
  25. </div>
  26. <div class="toolbar">
  27. toolbar
  28. </div>
  29. <script type="text/javascript" src="../lib/jquery.min.js"></script>
  30. <script type="text/javascript" src="../lib/bootstrap.min.js"></script>
  31. </body>
  32. </html>

静态运行这段代码的话,将会输出为以下标准结构,logo,中左侧导航,中右侧内容,下面的状态栏,假设其他都OK的话,要改变的只有中右侧内容了。

indexv4.html继承了base.html,只是在 {% block content %}{% endblock %} 追加了以下代码:

  1. {% extends 'base.html' %}
  2. {% block content %}
  3. <span class="label label-primary">{{ user.username }}</span>
  4. <h2>{{ user.username }}</h2>
  5. <table class="table table-striped" style="color: black">
  6. <caption>借阅者:{{ borrower.postcard }},借阅时间:{{ borrower.borrowdate }}</caption>
  7. <thead>
  8. <tr>
  9. {% for title in tabletitle %}
  10. <th>{{ title }}</th>
  11. {% endfor %}
  12. </tr>
  13. </thead>
  14. <tbody>
  15. {% for book in booklists %}
  16. <tr>
  17. <td>{{ book.author }}</th>
  18. <td>{{ book.bookname }}</td>
  19. </tr>
  20. {% endfor %}
  21. </tbody>
  22. </table>
  23. {% endblock %}

输出结果为:

后续将沿着这条路子开展我的flask学习之旅,和大家一起分享。

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号