flask的四剑客:
return 字符串、return redirect(‘路由跳转’)、JSON return jsonify(字典)、 return render_template(HTML文件路径)
四种方法的做配置文件:
直接对app赋值,如app.secret_key,app.config,app.debug
app.debug = True
app.secret_key = "asdasdihasdiuh"
app.config['SESSION_COOKIE_NAME']="python13session"
以文件的形式
app.config.from_pyfile(文件路径)
以类的形式 (推荐使用)
app.config.from_object()
配置路由
装饰器@app.route()
add_url_rule( 路由地址,反向解析的名字,endpoint='默认是响应函数的函数名',view_func=响应函数对象,methods = ['GET' ,'POST'])
路由地址的有名分组
index/<int: uniquename>
def view_func(uniquename): 这里的参数名一定要
反向解析的使用
url_for(endpoint的名字, uniquename=XXX)
methods指定路由允许的请求方式
flask的session的存储原理
要是用flask的session,必须先要给app配置一个密钥app.secret = '随机字符串',还可以通过配置文件中的‘SESSION_COOKIE_NAME’设置cookies的键名。
session是从全局设置的,要先导入session
在响应给客户端的时候,调用session_interface 中的save_session方法,将session做加密,得到一个值value,将value设置到cookie中,cookie的key值为配置文件中的SESSION_COOKIE_NAME
在接收客户端的请求时,调用open_session方法,从cookie中取值,解密,赋值给全局的session
请求与响应
flask如何设置响应头
使用make_response方法,将响应的内容放进去
response = make_response( 字符串 | 重定向 | JSON | HTML )
response.headers['key'] = value #请求头
response.set_cookie('key','value') # cookie
模板语言:
1、支持函数的调用,要手动加括号调用
2、给模板传值,render_template('HTML',**dict) # 这里的**dict就是把字典打散传值
3、后端传原生的HTML,用Markup(f'{<html>}'), 如果前端要显示后端的值直接渲染,前端用 变量名| safe
flask的闪现flash
flash可以存多个值,但是只能取一次,在源码中将使用的是pop方法 (补一下源码)
flashes = session.get("_flashes", []) # 源码中将flash存为 _flashes, flashes.append((category, message)) # 可以存储多个值
flash是基于session的
设置值:flash(message='XXX',category='QQQ')
def flash(message, category="message"): flashes = session.get("_flashes", []) flashes.append((category, message)) # flashes中是一个列表套元组 session["_flashes"] = flashes message_flashed.send( current_app._get_current_object(), message=message, category=category )
取值:get_flashed_messages( with_categories=True, category_fliter=['QQQ']) # category_filter必须要是列表
def get_flashed_messages(with_categories=False, category_filter=()): flashes = _request_ctx_stack.top.flashes if flashes is None: _request_ctx_stack.top.flashes = flashes = ( session.pop("_flashes") if "_flashes" in session else []) # 直接pop出来了,只能使用一次
if category_filter:
flashes = list(filter(lambda f: f[0] in category_filter, flashes)) # f[0] 表示的是flash的message
if not with_categories:
return [x[1] for x in flashes]
return flashes