今日内容概要
- flask 配置文件
- flask 路由系统
- flask模板语法
- 请求与相应
- session
- 闪现(flash翻译过来的)
内容详细
1、flask 配置文件
{
'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,
}
加载和使用配置
from flask import Flask, jsonify
app = Flask(__name__)
app.secret_key = 'asdfasdf'
app.debug = True
@app.route('/')
def index():
'''
referer,user-agent,content-type,cookie-->Connection: keep-alive,X-Forwarded-For
http协议版本号:0.9版本,1.1 版本,2.0版本早就出了
http基于socket---》应用层协议---》osi7层, 5层,tcp/ip 4层--》socket 抽象层--》网络和传输层
三次握手四次挥手,每次发送http,都会三次握手四次挥手-->性能不高
多次http请求共用一个socket连接
2.0 多路复用 socket流式协议
content-type,cookie,
'''
return jsonify({'name': "lqz", 'age': 19})
if __name__ == '__main__':
app.run()
settings.py:
class Config(object):
DEBUG = False
MYSQL_HOST = '127.0.0.1'
MYSQL_POET = '3306'
class ProductionConfig(Config):
MYSQL_HOST = '184.124.22.12'
MYSQL_POET = '3306'
class DevelopmentConfig(Config):
DEBUG = True
class TestingConfig(Config):
TESTING = True
2、flask 路由系统
2.1 路由本质
1 装饰器
2 app.add_url_rule('/',view_func=index)
2.2 cbv写法
class HomeView(MethodView):
def get(self):
print(request.path)
return 'cbv的homeview'
app.add_url_rule('/home', view_func=HomeView.as_view(name='home'))
2.3 路由的参数
'''
1 rule, URL规则, 可以使用转换器 <int:pk>
2 endpoint, 当前路由的别名,如果不传, 默认已函数名作为endpoint,如果函数名重名,就会有两个重名的地址,报错,主要用来反向解析
# endpoint = None, 名称,用于反向生成URL,即: url_for('名称')
# 多个视图函数,如果加同一个装饰器,如果不写endpoint,就会报错
3 view_func, 视图函数名称 如果是cbv 视图类.as_view(name='xx')
4 defaults = None, 默认值, 当URL中无参数,函数需要参数时,使用defaults = {'k': 'v'}
为函数提供参数,就是django中的kwargs
5 methods = None, 允许的请求方式,如:["GET", "POST"]
6 strict_slashes = None
对URL最后的 / 符号是否严格要求
7 redirect_to = None, redirect_to='/home'
#重定向到指定地址
8 子域名访问
subdomain = None,
'''

3、flask模板语法
from flask import Flask, render_template, Markup
from flask.views import View, MethodView
app = Flask(__name__)
app.secret_key = 'asdfasdf'
app.debug = True
def test(a, b):
return a + b
def func1(arg):
return Markup("<input type='text' value='%s' />" % (arg,))
@app.route('/')
def index():
return render_template('index.html', name='lqz', test=test, safe=func1)
if __name__ == '__main__':
app.run()
templates/index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<p>{{name}}</p>
<p>{{test(5,6)}}</p>
<p>{{safe('lqz')}}</p>
</body>
</html>

4、请求与相应
4.1 请求
@app.route('/request', methods=['GET', "POST"])
def test_request():
print(request.method)
print(request.args)
print(request.form)
print(request.values)
print(request.cookies)
print(request.headers)
print(request.path)
print(request.full_path)
print(request.url)
print(request.host)
return "内容"
4.2 响应
@app.route('/test_response')
def test_response():
response = make_response('字符串')
response.set_cookie('key', 'value')
return response
5、session
request.SESSION['name']='lqz'
1. 生成一个随机的字符串 sdfads
2. 往数据库存表
id key content expire
1 sdfads 数据内容(加密) 过期时间
3. 写入cookie返回浏览器
response.set_cookie('sessionid',sdfads)
1. 根据sessionid取出随机字符串
2. 根据随机字符串去数据库查出content数据,解密
3. 赋值个请求对象request.SESSION
4. 你在视图函数中才能正常使用request.SESSION['name']取值,赋值,删除值
设置值:session['login']=True
取值:session['login']
1 把sesion对象,当字典 转成字符串,使用秘钥加密
val = self.get_signing_serializer(app).dumps(dict(session))
2 写入cookie返回浏览器 session=加密的字符串
response.set_cookie(
app.session_cookie_name,
val,
)
1 根据sessionid取出加密字符串
val = request.cookies.get(app.session_cookie_name)
2 通过秘钥解密,组装成 session
data = s.loads(val, max_age=max_age)
self.session_class(data)
3 你在视图函数中才能正常使用session['name']取值,赋值,删除值
处理session,有个一个类SecureCookieSessionInterface(),有俩重要方法
open_session:请求来了执行
1 根据sessionid取出加密字符串
val = request.cookies.get(app.session_cookie_name)
2 通过秘钥解密,组装成 session
data = s.loads(val, max_age=max_age)
self.session_class(data)
3 你在视图函数中才能正常使用session['name']取值,赋值,删除值
save_session:请求走了执行
1 把sesion对象,当字典 转成字符串,使用秘钥加密
val = self.get_signing_serializer(app).dumps(dict(session))
2 写入cookie返回浏览器 session=加密的字符串
response.set_cookie(
app.session_cookie_name,
val,
)
6、闪现(flash翻译过来的)
有 没有学---》消息框架,message ,django默认自带的app,message的app
a页面出了错,重定向到b页面,b页面要把错误信息显示
如果在同一次请求中,放到request对象中即可
如果在不同请求中,放到session中,所以使用闪现一定配置秘钥
设置:flash('诱惑美女')
获取:res=get_flashed_messages()
设置:
flash('诱惑美女',category='man')
flash('诱惑帅哥',category='wonmen')
获取:
res = get_flashed_messages(with_categories=True,category_filter=["man"])
from flask import Flask, flash, get_flashed_messages
app = Flask(__name__)
app.debug = True
app.secret_key = 'adsfasfasd'
@app.route('/set_flash')
def set_flash():
flash('诱惑美女')
return "设置成功"
@app.route('/get_flash')
def get_flash():
res = get_flashed_messages()
print(res)
return "获取成功"
if __name__ == '__main__':
app.run()

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现