Skip to content

kaishuibaicai/Flask-web-learning

Repository files navigation

《Flask Web 开发》学习笔记

[TOC]

一、程序的基本结构

1、flask的安装:

为了避免系统的Python解释器中的包的混乱,这里可以另外做一个Python的虚拟环境,在虚拟环境中安装的包是独立的:

$ sudo apt-get install python-virtualenv

在开发的独立文件夹中创建虚拟环境:

$ virtualenv venv     # venv是虚拟环境的名称

启动虚拟环境:

$ source venv/bin/activate

关闭虚拟环境:

$ deactivate

在虚拟环境中安装Flask包:

$ pip3 install flask

2.Hello World

实现一个最简单的网络应用

  1 from flask import Flask    # 导入flask模块的Flask方法
  2 from flask import request
  3 app = Flask(__name__)      # 实例化一个网络应用,这里的__name__参数是传递给Flask程序,决定程序的根目录,以便稍后能找到相对于程序跟目录的资源文件位置
  4 
  5 @app.route('/')            # Flask程序的的装饰器
  6 def index():               # 视图函数,返回包含HTML的代码
  7     return '<h1>Hello World!</h1>'
  8 
  9 @app.route('/user/<name>')
 10 def user(name):
 11     user_agent = request.headers.get('User-Agent')
 12     return '<h1>Hello, %s</h1><h2>Your browser is %s' % (name, user_agent)
 13 
 14 if __name__ == '__main__':
 15     app.run(debug=True)                                                                                                         

七、项目结构

1、结构图 项目结构图

2、构建相同环境的包

Flask==0.10.1     Flask web框架

Flask-Bootstrap==3.0.3.1     推特开源框架

Flask-Mail==0.9.0     Flask 邮件

Flask-Migrate==1.1.0     管理升级迁移数据库

Flask-Moment==0.2.0     轻量级JavaScript日起处理类库

Flask-SQLAlchemy==1.0     数据库管理

Flask-Script==0.6.6     Flask应用命令行解析器

Flask-WTF==0.9.4     基于Flask 的WTForms 集成

Jinja2==2.7.1     Jinja2 是一个 Python 的功能齐全的模板引擎

Mako==0.9.1     Mako模板库

MarkupSafe==0.18     MarkupSafe是一个用于Python的库,它实现了一个识别HTML转义规则的unicode字符串,可用于实现自动字符串转义。它由Jinja 2,Mako模板引擎,Pylons Web框架等等使用。

SQLAlchemy==0.8.4     SQLAlchemy是Python SQL工具包和对象关系映射器,为应用程序开发人员提供了SQL的全部功能和灵活性。

WTForms==1.0.5     表单处理模块

Werkzeug==0.9.4     Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库 计算密码散列值并进行核对

alembic==0.6.2     Alembic是用于Python的SQLAlchemy数据库工具包的轻量级数据库迁移工具。

blinker==1.3     Blinker 是一个基于Python的强大的信号库,它既支持简单的对象到对象通信,也支持针对多个对象进行组播。Flask的信号机制就是基于它建立的。

itsdangerous==0.23     有时候你想向不可信的环境发送一些数据,但如何安全完成这个任务呢?解决的方法就是签名。使用只有你自己知道的密钥,来加密签名你的数据,并把加密后的数据发给别人。当你取回数据时,你就可以确保没人篡改过这份数据。 生成并核对加密安全令牌

问题解决

问题解决1:第五章,python hello.py shell 并没有进入命令行界面,而是直接运行,这里解决了这个问题.

问题解决2: 第六章, 在设置邮件用户名和密码之后,如果关闭当前窗口,重新打开后需要重新设置。参考

问题解决3: 第六章,“warnings.warn('SQLALCHEMY_TRACK_MODIFICATIONS adds significant overhead and will be disabled by default in the future. Set it to True to suppress this warning.')”  参考

问题解决4: 第六章,“TypeError: init() got an unexpected keyword argument 'method'” :在views.py中的'methods'写成了'method'

问题解决5: 第八章,“sqlalchemy.exc.OperationalError sqlalchemy.exc.OperationalError: (OperationalError) no such column: comments.confirmed 'SELECT count(*) AS count_1 \nFROM (SELECT comments.id AS comments_id, comments.author_id AS comments_author_id, comments.post_id AS comments_post_id, comments.confirmed AS comments_confirmed \nFROM comments \nWHERE ? = comments.post_id) AS anon_1' (104,)” 参考

问题解决6: 第十一章,“jinja2.exceptions.UndefinedError: 'Permission' is undefined” 参考

问题解决7: 程序部署, “UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)” 参考

问题解决8: 程序部署, “Supervisor on Debian Wheezy: another program is already listening on a port that one of our HTTP servers is configured to use”参考

拓展阅读

  1. 计算加盐密码散列值的正确方法
  2. 当我们在使用Flask时,如何如记录日志
  3. 关于Flask 源码解析的一些资料: