Flask是一个使用 Python 编写的轻量级 Web 应用框架。其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 。Flask使用 BSD 授权。
1.最简单的flask程序
from flask import Flask
app = Flask(__name__)# 简单理解为导包
# 路由
@app.route('/hello')
# 逻辑
def hello_world():
return 'Hello World!'
2.动态URL与自定义命令
如果url中含有可变部分
比如:https://baike.baidu.com/item/Flask,https://baike.baidu.com/item/Python
@app.route('/hello/<name>')
def hello_world(name):
return 'Hello World!%s' % name
执行http://127.0.0.1:5000/hello/nihao--------->页面显示:Hello World nihao
自定义命令
from flask import Flask
import click
@app.cli.command()
def command():
click.echo('hello')
cmd中运行:
使用flask --help,可以打印出所有命令
URL处理
@app.route('/comeback/<int:year>')# 解析为int类型数字
def back(year):
return '<h1>回到%s</h1>' % year
# 只有传入blue和white时,才会进入该函数,否则为404
@app.route('/colors/<any(blue, white):color>')
def color(color):
return '<p>%s</p>' % color
# 效果相同
colors = ['red', 'block']
@app.route('/c/<any(%s):color>' %str(colors)[1:-1])
def c(color):
return '<h1>%s</h1>' %color
3.请求钩子
1.before_first_request:在第一次请求之前运行,只需执行一次,如连接数据库,创建数据库表,添加管理员等
2.before_request:在每一次请求都会执行,可以在这里做权限校验操作,比如说某用户是黑名单用户,黑名单用户登录系统将遭到拒绝访问,可以使用before_request进行权限校验。
3.after_request:在请求之后运行,会接收一个参数,这个参数就是前面的请求处理完毕之后, 返回的响应数据,如果需要对响应做额外处理,可以再这里进行。
4.teardown_request:每一次请求之后都会调用,会接受一个参数,参数是服务器出现的错误信息
5.after_this_request:在视图函数内注册一个函数,会在这个请求结束后运行
4.生成响应及定义响应格式
@app.route('/hello')
def hello_world():
name = request.args.get('name', 'Flask')
return 'Hello World!%s' % name, 201 # 生成201响应
重定向,302临时重定向,301永久重定向
from flask import Flask, request, redirect, url_for
@app.route('/cdx')
def cdx():
return redirect('/hello') # 使用redirect默认使用302,如果想修改状态码,可以传入第二个参数code
# 如果想直接通过视图函数名来实现重定向
# 使用url_for()函数即可
@app.route('/cdx')
def cdx():
return redirect(url_for('hello_world'))
返回404响应
from flask import Flask, abort
# 手动返回错误响应
@app.route('/404_Not_Fount')
def _04():
abort(404)
使用abort时,不需要使用return,使用abort后,在此之后的代码全部不执行
响应格式
多数情况下,我们使用html格式,Flask默认使用html格式。要改变格式,就要设置MIME类型。
比如响应头中的Content-Type:
Content-Type:text/html; charset=utf-8
要改变就应该在响应信息中修改
from flask import Flask, make_response
# make_response是用来生成响应对象,传入传入响应主体作为参数,
# 使用响应对象的mimetype属性设置MIME类型
@app.route('/set')
def set_mime():
response = make_response('hello')
response.mimetype = 'text/plain'
return response
mimetype变为Content-Type:text/plain; charset=utf-8
常见的mimetype类型:
1. text/plain,纯文本
2.text/html,html类型
3.application/xml, xml
4.application/json, json类型
Flask中序列化json数据,推荐使用jsonify
from flask import Flask,jsonify
@app.route('/foo')
def foo():
a = []
a.append({'name':"ko", 'gender':'male'})
return jsonify(a)
jsonify默认生成200响应,要修改响应码:
return jsonify(), 500
5.cookie
由于cookie是保存在客户端,因此是在响应时创建的
@app.route('/set/<name>')
def set_cookie(name):
response = make_response(redirect(url_for('hello_world')))
response.set_cookie('name', name)
return response
response对象常见属性和方法:
1.headers, 表示响应首部,可以想操作字典一样操作他
2.status, 状态码, 文本类型
3.status_code, 状态码,整型
4.mimetype
5.set_cookie, 设置cookie
读取cookie,使用request.cookies.get('name', 'aaa'), 'aaa'表示在读取不到时的默认值
6.session
session是一种安全的cookie,保存在服务端
from flask import Flask, request, redirect, url_for, session
app = Flask(__name__)
# 第一种设置密钥
app.config['SECRET_KEY'] = '*dfls\dfsv?dsdf8f/dfc65sdfdMfsd65df'
# 第二种
app.secret_key = '123'
# 也可以保存在文件中
@app.route('/login')
def login():
session['logged_in'] = True
return redirect('/hello')
评论列表
已有0条评论