Flask基础

Flask框架 2019-03-09 1511

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

标签:Flask框架

文章评论

评论列表

已有0条评论