flask框架入门

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
原文地址:https://www.cnblogs.com/csic716/p/12520798.html