您的位置:首页 > 其它

Flask的奥秘二

2020-07-14 05:46 253 查看

一、flask中的session

首先我们了解一下session和cookie

  • session被用于记录用户的状态,它是运行在服务器端的,根据session id来获取用户的状态
  • cookie用于记录用户信息的,运行在客户端,与session有一定的关系,session id就是从cookie中获取的,如果用户禁止使用cookie,那么session也会无法使用,除非是手动传递session id

在flask中,session的本质是一个字典

flask中如何使用session来记录用户的数据呢?

  1. 导入session,并要设置配置文件(下一个小节讲)
from flask import session

app = Flask(__name__)
# 这个是为了确保安全性的,可以设置任意值
app.secret_key = ''
  1. 使用session
# 存入信息(字典添加元素的方法)
session['key'] = value

# 取出信息
data = session.get("key")

二、配置flask的方法

这里只说几种常用的方法

实例化一个Flask对象为app
1、直接调对象的属性来设置值
app.secret_key = " "
2、调用app的config属性来设置值
app.config[“secret_key”] = " "
3、根据py文件来设置值
app.config.from_pyfile(“文件路径”)

setting.py中代码:

SECRET_KEY = '123456'

4、根据类来设置值
app.config.from_object(“文件名.类名”)

setting.py中代码:

class config(object):
SECRET_KEY = '123456'

配置参数的默认值:

{
'DEBUG':                                get_debug_flag(default=False),  是否开启Debug模式
'TESTING':                              False,                          是否开启测试模式
'PROPAGATE_EXCEPTIONS':                 None,
'PRESERVE_CONTEXT_ON_EXCEPTION':        None,
'SECRET_KEY':                           None,
'PERMANENT_SESSION_LIFETIME':           timedelta(days=31),
'USE_X_SENDFILE':                       False,
'LOGGER_NAME':                          None,
'LOGGER_HANDLER_POLICY':               'always',
'SERVER_NAME':                          None,
'APPLICATION_ROOT':                     None,
'SESSION_COOKIE_NAME':                  'session',
'SESSION_COOKIE_DOMAIN':                None,
'SESSION_COOKIE_PATH':                  None,
'SESSION_COOKIE_HTTPONLY':              True,
'SESSION_COOKIE_SECURE':                False,
'SESSION_REFRESH_EACH_REQUEST':         True,
'MAX_CONTENT_LENGTH':                   None,
'SEND_FILE_MAX_AGE_DEFAULT':            timedelta(hours=12),
'TRAP_BAD_REQUEST_ERRORS':              False,
'TRAP_HTTP_EXCEPTIONS':                 False,
'EXPLAIN_TEMPLATE_LOADING':             False,
'PREFERRED_URL_SCHEME':                 'http',
'JSON_AS_ASCII':                        True,
'JSON_SORT_KEYS':                       True,
'JSONIFY_PRETTYPRINT_REGULAR':          True,
'JSONIFY_MIMETYPE':                     'application/json',
'TEMPLATES_AUTO_RELOAD':                None,
}

三、模板

1、flask使用的是jinja2模板,所以与django的使用方法相似,就是当要调用函数的时候,flask需要括号,而django不需要
2、在前端可以使用管道safe防止xss攻击,在后端可以使用Markup函数防止xss攻击
前端如:{{f()|safe}}
后端如:

def fun():
return Markup("<h1>hahaha</h1>")

@app.route('/')
def index():
return render_template('model.html', f=fun)  # 传递一个函数
XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

ps:不行了,不行了,太困了,睡觉了.

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: