[flask]1基础知识点

1 flask安装

pip install flask==1.02

2 入门案例

from flask import Flask

app = Flask(
	__name__,
)

@app.route('/')
def index_handler():
	return 'index_flask'

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

3 Flask类的初始化参数

在这里插入图片描述

参数 说明
import_name 就写__name__
static_url_path=None 静态文件的url地址
static_folder=‘static’ 静态文件夹路径
template_folder=‘templates’ 模板文件夹路径

4 加载配置文件

4.1 对象加载

命令 说明
app.config.from_object() 加载类对象配置文件

例如:

class Config():
    DEBUG = True
app.config.from_object(Config)

4.2 文件加载

命令 说明
app.config.from_pyfile() 加载文件配置

1.新建一个文件(名字和后缀任意)

  • 例如:新建一个config.ini 内容:DEBUG = True

2.加载

  • app.config.from_pyfile(‘config.ini’)

4.3 直接配置

命令 说明
app.config["【配置关键字】"] = 值 设置配置项

例如:

app.config["DEBUG"] = True

注:

  • 设置debug=true,也可以app.debug=true

4.4 其他加载方式

命令 说明
app.config.from_envvar() 从虚拟环境加载
app.config.from_json() 从json中加载
app.config.from_mapping() 从映射中加载

5 路由

5.1 简单路由映射

@app.route('/ml')
def machine_learning():
    return 'machine_learning'

在这里插入图片描述
注意:“/”一定要加

5.2 接受路由参数

格式:

  • <【变量名】>

例如:

扫描二维码关注公众号,回复: 11414238 查看本文章
@app.route('/login/<username>')
def login_handler(username):
    return username

在这里插入图片描述
注:

  1. 尖括号里面的username和下面函数传递的username字段名称必须一致
  2. 老版本的路由接收参数可以指定类型,例如int、float、string等,但比较鸡肋

5.3 接受正则表达式

第一步,定义Converter(下面你的代码是通用的)


from werkzeug.routing import BaseConverter

class ReConverter(BaseConverter):
    def __init__(self,url_map,param):
        BaseConverter.__init__(self,url_map)
        self.regex = param

第二步:定义re为ReConverter

app.url_map.converters['re'] = ReConverter

第三步:接受正则参数

@app.route('/<re("[0-9]{3}"):param>')
def re_handler(param):
    return param

理解图:
在这里插入图片描述

6 上下文

6.1 request

  • 导包
from flask import request

6.1.1 常用属性

属性 说明 类型
data 记录请求的数据,并转为字符串 *
form 记录请求中的表单数据 MultiDict
args 记录请求中的查询参数 MultiDict
cookies 记录请求中的cookie信息 Dict
headers 记录请求中的报文头 EnvironHeaders
method 记录请求中的HTTP方法 GET/POST
url 记录请求的url地址 string
files 记录请求上传的文件 *

6.1.2 获得表单数据


get请求:

  • request.args.get(param)
  • request.args.getlist(param)

post请求:

  • request.form.get(param)
  • request.form.getlist(param)

6.2 重定向

  • 导包
from flask import redirect
from flask import url_for
  • 方法
方法 说明
redirect(URL) 重定向到url地址
url_for(函数名) 返回路由的url地址

例如:

# 1重定向url地址
@app.route('/redirect1')
def myredirect1_handler():
    return redirect('/')

# 2.重定向到视图函数
@app.route('/redirect2')
def myredirect2_handler():
    return redirect(url_for('myredirect1_handler'))

6.3 cookie

导包

from flask import request,make_response
功能 命令
设置 mp = make_response()
mp.set_cookie(key,value,max_age)
----return mp
取值 cookies = request.cookies
value = cookies.get(key,default)
删除 mp = make_response()
mp.delete_cookie(key)
----return mp

例如:

# 导包
from flask import request,make_response
# ——————————————————————————————————————
@app.route('/setCookie/<cookie_param>')
def setCookie(cookie_param):
    mp = make_response()
    mp.set_cookie('key',cookie_param,max_age=60*60*24)
    return mp

@app.route('/getCookie/<cookie_param>')
def getCookie(cookie_param):
    value = request.cookies.get(cookie_param,'默认值')
    return value

@app.route('/delCookie/<cookie_param>')
def delCookie(cookie_param):
    mp = make_response()
    mp.delete_cookie(cookie_param)
    return mp

6.4 session

session是基于cookie的,某些敏感信息不应该直接存储在客户端

导包

from flask import session

例如:

# 1.导包
from flask import session
# 2.设置secret_key
app.secret_key = '26b25998-2911-11e9-a7d3-08d40c722b4a'
# 使用session——————————————————————————
@app.route('/setSession')
def setSession():
    session['key'] = 'value'
    return 'success'

@app.route('/getSession')
def getSession():
    value = session.get('key','默认值')
    return value

@app.route('/delSession')
def delSession():
    session.pop('key',None)
    return 'success'

6.5 current_app

导包

from flask import current_app

例如:

from flask import current_app

@app.route('/getCurrentApp')
def getCurrentApp():
    value = current_app.key
    return value

@app.route('/setG')
def setG():
    g.key = 'value2'
    return '成功'

7 装饰器

装饰器 说明
before_first_request 处理第一个请求的时候执行
before_request 请求前执行
after_request 请求后执行(如果请求没有错误)
接收一个视图处理后的response
需要将这个return一个response对象
teardown_request 在每次请求后都会执行(即使请求出现异常)
执行接收一个错误信息参数(如果没有错误,参数值=None)

例如:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def index_handler():
    print('index_handler执行了')
    return 'index'

@app.before_first_request
def before_first_request_handler():
    print('before_first_request_handler')

@app.before_request
def before_request_handler():
    print('before_request')

@app.after_request
def after_request_handler(response):
    print('response=',response)
    print('after_request')
    return response

@app.teardown_request
def teardown_request_handler(error):
    print('error=',error)
    print('teardown_request')

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

8 异常

8.1 手动抛出 abort

导包

from flask import abort

abort(403) 手动抛出403错误
例如:

from flask import abort
# ————————————————————————————————————
@app.route('/error')
def testError():
    abort(403)

测试方式:

@app.route('/abort/<param>')
def abort_handler(param):
    abort(int(param))

8.2 异常捕捉路由 errorhandler()

from flask import abort
# ————————————————————————————————————
@app.errorhandler(404)
def error404_handler(error):
    print(error)
    return '没有这个网页哦'

9 启动服务

9.1 app.run()

在这里插入图片描述

app.run(
    host = 'localhost',
    port = '8080',
    debug = True,
)

9.2 flask-script

9.2.1 安装Flask-Script

pip install flask-script

9.2.2 使用案例

from flask import Flask
from flask_script import Manager

app = Flask(__name__)
manager = Manager(app)

@app.route('/')
def index():
    return 'index'

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

9.2.3 终端使用

查看命令:

python 【py文件名】 runserver –help

在这里插入图片描述

例子:

python myflask_script.py runserver -h localhost -p 8080 -d

猜你喜欢

转载自blog.csdn.net/kzl_knight/article/details/91039990