Flask框架开发教程

Writer @ ybzai 2020-05-22 15:19 阅读(1142)

Flask 是一个使用 Python 编写的轻量级 Web 应用程序框架。 Armin Ronacher带领一个名为Pocco的国际Python爱好者团队开发了Flask。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。 Werkzeug是一个WSGI工具包,实现了请求,响应对象和实用函数。 virtualenv是一个虚拟的Python环境构建器。它可以帮助用户并行创建多个Python环境。 因此,它可以避免不同版本的库之间的兼容性问题。
以下命令用于安装virtualenv:

pip install virtualenv

在这个环境中安装Flask:

pip install Flask

示例

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
   return '你好'

if __name__ == '__main__':
   app.run()

可填参数 app.run(host, port, debug, options) host默认为127.0.0.1(localhost)。设置为“0.0.0.0”以使服务器在外部可用
port默认值为5000

【调试模式】代码可以实时修改

app.debug = True
app.run()

另一种是作为 run 方法的一个参数传入:

app.run(debug=True)
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        do_the_login()
    else:
        show_the_login_form()

Jinja2 模板引擎,使用 render_template() 方法来渲染模板

from flask import render_template

@app.route('/hello/')
@app.route('/hello/<int:postID>')
def hello(name=None):
    return render_template('hello.html', name=name)

包括int、float、path接受用作目录分隔符的斜杠
情况 1: 模块:

/application.py
/templates
    /hello.html

情况 2: 包:

/application
    /__init__.py
    /templates
        /hello.html
<!doctype html>
<title>Hello from Flask</title>
{% if name %}
  <h1>Hello {{ name }}!</h1>
{% else %}
  <h1>Hello World!</h1>
{% endif %}

在模板里,你也可以访问 request 、 session 和 g [1] 对象, 以及 get_flashed_messages() 函数。

在Jinja2模板中,我们用{{ name }}表示一个需要替换的变量。很多时候,还需要循环、条件判断等指令语句,在Jinja2中,用{% ... %}表示指令。

重定向 return redirect(url_for('login'))

安装

Flask-Session flask-sqlalchemy
pip install flask-sockets
pip install psutil

ps -ef|grep py
pip
yum -y install python-pip
pip install --upgrade pip

日志

app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')

模板

{{ url_for('static', filename='style.css') }}
url_for("函数也可以")

from flask import Flask,render_template
return render_template("hello.html")

Jinja2模板引擎使用以下分隔符从HTML转义。
{% ... %}用于语句
{{ ... }}用于表达式可以打印到模板输出
{# ... #}用于未包含在模板输出中的注释
#... ##用于行语句 {{ url_for('static', filename = 'hello.js') }}

Request对象 result = request.form 字典 {% for key, value in result.items() %}

request.method == 'POST'
resp = make_response(render_template('readcookie.html'))
resp.set_cookie('userID', user)

name = request.cookies.get('userID')

例如,要设置一个'username'会话变量,请使用以下语句: Session['username'] = 'admin' 要释放会话变量,请使用pop()方法。

session.pop('username', None)
session['username'] = request.form['username']


from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = 'any random string'

Flask.abort(code)

  • Code参数采用以下值之一:
  • 400 - 用于错误请求
  • 401 - 用于未身份验证的
  • 403 - Forbidden
  • 404 - 未不到
  • 406 - 表示不接受
  • 415 - 用于不支持的媒体类型
  • 429 - 请求过多
if request.form['username'] == 'admin' :
         return redirect(url_for('success'))
      else:
         abort(401)

上传

enctype = "multipart/form-data"

from flask import Flask, render_template, request
from werkzeug import secure_filename
f = request.files['file']
f.save(secure_filename(f.filename))

app.config[‘UPLOAD_FOLDER’] 定义上传文件夹的路径 app.config[‘MAX_CONTENT_PATH’] 指定要上传的文件的最大大小(以字节为单位)

邮件

pip install Flask-Mail
from flask_mail import Mail, Message

app.config['MAIL_SERVER']='smtp.gmail.com'
app.config['MAIL_PORT'] = 465
app.config['MAIL_USERNAME'] = 'yourId@gmail.com'
app.config['MAIL_PASSWORD'] = '*****'
app.config['MAIL_USE_TLS'] = False
app.config['MAIL_USE_SSL'] = True

mail = Mail(app)

msg = Message('Hello', sender = 'yourId@gmail.com', recipients = ['id1@gmail.com'])
msg.body = "This is the email body"
mail.send(msg)

调试

print('你好', file=sys.stderr)
print(userInfo, file=sys.stderr)
print('你好', file=sys.stderr)
标签: Python

感谢赞赏

微信支付
微信支付
支付宝
支付宝