Falsk
flask:
1.配置文件的几种方式:
1.app.config['DEBUG'] =True
2.app.config.from_pyfile("setting.py")
3.app.config.from_envvar("环境变量名称") #环境变量值为Python文件名称,因为内部会调用from_pyfile
4.app.config.from_json("json文件名")#内部会执行json.loads
5.app.config.from_mapping({"DEBUG":True}) #字典格式
6.app.config.from_object("pro_flask.setting.Config")
setting
class Config(object):
DEBUG = False
2.视图
fbv的两种方式:
1.app = Flask(__name__)
@app.route('/index')
def index():
return "Index"
if __name__ == '__main__':
app.run()
2.def index():
return "Index"
app.add_url_rule("/index","student",index) #student是别名
cbv:
class IndexView(view.ModeView):
method = ['GET']
decorators = [auth, ]
def dispath_request(self):
return 'Index'
def get(self,*args,**kwargs):
url = url_for('index', nid=nid) #反向生成url
return redirect(url)
app.add_url_rule('index',view_func=IndexView.as_view(name='index')) #name=endpoint
另外:装饰器必须紧贴着函数,在路由的装饰器之下。
3.路由参数:
view_func 视图函数名称
defaults=None 当URL中无参数,函数需要参数时,使用defaule的默认值
endpoint=None 用于反向生成URL ,url_for('index')
strict_slashes=None 对URL最后 / 符号是否严格要求
redirect_to=None 重定向到指定地址 @app.route('/index/<int:nid>', redirect_to='/home/<nid>') 注意重定向的url也需要参数,但是不需要类型
subdomian=None 子域名访问 @app.route("/", subdomain="admin")
4.模板:
1.@app.template_global()
def sb(a1,a2):
return a1 + a2 + 100
#{{sb(1,2)}}
2.@app.template_filter()
def db(a1, a2, a3):
return a1 + a2 + a3
#{{1|db(2,3)}}
3.{% macro xxxx(name, type='text', value='') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}
{{ xxxx('n1') }}
4.{{xss|safe}} Markup()
5.请求和响应:
# 请求相关信息
# request.method
# request.args #=request.GET 字典格式
# request.querystring #=request.GET bytes格式
# request.form #=request.POST
# request.values #=request.body
# request.cookies
# request.headers
# request.path
# request.full_path
# request.script_root
# request.url
# request.base_url
# request.url_root
# request.host_url
# request.host
# request.files
# obj = request.files['the_file_name'] #文件上传
# obj.save('/var/www/uploads/' + secure_filename(f.filename))
# 响应相关信息
# return "字符串"
# return render_template('html模板路径',**{})
# return redirect('/index.html')
# return jsonify(name='alex',age='18') #相当于JsonResponse
# response = make_response(render_template('index.html')) #返回过个值
# response是flask.wrappers.Response类型
# response.delete_cookie('key')
# response.set_cookie('key', 'value')
# response.headers['X-Something'] = 'A value'
# return response
6.Session:
它是在cookie的基础上实现的,并且对cookie进行密钥签名要使用session需要设置一个密钥
app.secret_key = 'ASDFACASD241SDD/DDD'
session['username'] = 'xxx' 设置session
session.pop['username'] 删除session
flask 默认的session 是存在浏览器上,并且是加密的,减轻服务器的压力
7.闪现flash:
flash是基于session来实现的,使用一次后就被pop删除
app.secret_key = '123154sdfsdc' #创建封装cookie密码
flash("build ok") #设置flash值
v=get_flashed_messages() #获取flash的值
8.请求扩展:
@app.before_request #请求之前
@app.befor_first_request #第一次请求之前
@app.after_request #请求之后
@app.before_response #响应之前
@app.after_response #响应之后
9.蓝图:Blueprint
实现多文件目录结构,每个文件夹可以有自己的视图,模板,静态文件,并且可以避免相互导入的问题
每一个文件夹可以设置路由的前缀,实现多app的功能,每个APP里面的请求扩展不会相互间影响。
10.信号:
Flask的信号基于blinker pip3 install blinker
request_started = _signals.signal('request-started') # 请求到来前执行
request_finished = _signals.signal('request-finished') # 请求结束后执行
before_render_template = _signals.signal('before-render-template') # 模板渲染前执行
template_rendered = _signals.signal('template-rendered') # 模板渲染后执行
got_request_exception = _signals.signal('got-request-exception') # 请求执行出现异常时执行
request_tearing_down = _signals.signal('request-tearing-down') # 请求执行完毕后自动执行(无论成功与否)
appcontext_tearing_down = _signals.signal('appcontext-tearing-down')# 请求上下文执行完毕后自动执行(无论成功与否)
appcontext_pushed = _signals.signal('appcontext-pushed') # 请求上下文push时执行
appcontext_popped = _signals.signal('appcontext-popped') # 请求上下文pop时执行
message_flashed = _signals.signal('message-flashed') # 调用flask在其中添加数据时,自动触发
eg:
rom flask import Flask, current_app, flash, render_template
from flask.signals import _signals
app = Flask(import_name=__name__)
# 自定义信号
xxxxx = _signals.signal('xxxxx')
def func(sender, *args, **kwargs):
print(sender)
# 自定义信号中注册函数
xxxxx.connect(func)
@app.route("/x")
def index():
# 触发信号
xxxxx.send('123123', k1='v1')
return 'Index'
if __name__ == '__main__':
app.run()
自定义URL匹配正则表达式:
from flask import Flask,url_for
app = Flask(__name__)
# 定义转换的类
from werkzeug.routing import BaseConverter
class RegexConverter(BaseConverter):
"""
自定义URL匹配正则表达式
"""
def __init__(self, map, regex):
super(RegexConverter, self).__init__(map)
self.regex = regex
def to_python(self, value):
"""
路由匹配时,匹配成功后传递给视图函数中参数的值
:param value:
:return:
"""
return int(value)
def to_url(self, value):
"""
使用url_for反向生成URL时,传递的参数经过该方法处理,返回的值用于生成URL中的参数
:param value:
:return:
"""
val = super(RegexConverter, self).to_url(value)
return val
# 添加到converts中
app.url_map.converters['regex'] = RegexConverter
# 进行使用
@app.route('/index/<regex("\d+"):nid>',endpoint='xx')
def index(nid):
url_for('xx',nid=123) #反向生成,就会去执行to_url方法
return "Index"
if __name__ == '__main__':
app.run()
上下文:
分析见PDF
Session:
flask Session默认的设置是将用户信息通过app.secret_key = 'xxxx'加密后,变成字符串返回给用户
当用户信息过多时,cookie的长度有限,并且不安全,如果需要将用户信息保存在数据库或者缓存中,引入session的插件
flask_session:
保存到redis: pip3 install flask-session
import redis
from flask import Flask, session
from flask_session import Session
app = Flask(__name__)
app.debug = True
app.secret_key = 'xxxx'
app.config['SESSION_TYPE'] = 'redis' # session类型为redis
app.config['SESSION_PERMANENT'] = False # 如果设置为True,则关闭浏览器session就失效。
app.config['SESSION_USE_SIGNER'] = False # 是否对发送到浏览器上session的cookie值进行加密
app.config['SESSION_KEY_PREFIX'] = 'session:' # 保存到session中的值的前缀
app.config['SESSION_REDIS'] = redis.Redis(host='127.0.0.1', port='6379', password='123123') # 用于连接redis的配置
Session(app)
@app.route('/index')
def index():
session['k1'] = 'v1'
return 'xx'
if __name__ == '__main__':
app.run()
Falsk的更多相关文章
- falsk 与 django 钩子方法
falsk 四大钩子方法# 在第一次请求之前调用@app.before_first_requestdef before_first_request(): print("这是第一次请求之前调用 ...
- falsk 与 django 捕获异常
falsk捕获异常@app.errorhandler(405)def internal_server_error(e): return '这个接口不能被GET请求到,只能post' django 捕获 ...
- falsk 与 django cookie和session存、取、删的区别
falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...
- Flask06 地址约定、利用falsk提供的方法渲染模板
1 访问地址约定 在访问路径的末尾是否需要加 / -> 可以加,也可以不加 前端的访问路径必须和后端的路径完全匹配才能够访问成功,如果我们在后台的路径都是以 / 结尾,但是我们的访问路径是没有以 ...
- Falsk框架 Session 与 Flask-Session
目录 Cookie 与 Session 简单了解 Falsk 中 Session 的保管机制 相关的配置 使用 Flask-Session 三方组件 基础练习题 Cookie 与 Session 简单 ...
- falsk 使用celery后台执行任务
# falsk 使用celery后台执行任务 1.基础环境搭建 doc:https://flask.palletsprojects.com/en/1.0.x/patterns/celery/ mkdi ...
- flask 第二章 endpoint重名 Flask路由 初始化配置 Falsk Config 蓝图+目录结构
今日内容 1.路由的分发,以下两种方式效果一样,但是都能指向同一个函数 from flask import Flask app=Flask(__name__) #第一种方式 @app.route('/ ...
- Falsk SqlAlchemy
pip install mysql-connector from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Fl ...
- falsk sqlalchemy 自关联创建评论回复数据库
本项目在于创建类似微信上的评论回复功能的数据库 基类: from app import db from datetime import datetime class Basemadel(object) ...
- falsk 项目中日志设置
app/__init__.py: 1 import logging from logging.handlers import RotatingFileHandler ''' 开发中使用DEBUG级别, ...
随机推荐
- jQuery-添加新元素的方法(append()、prepend()、before()、after())
1.以 HTML 创建新元素 var txt1="<p>Text.</p>"; 2.以 jQuery 创建新元素 var txt2=$("< ...
- hiho一下 第三十八周 二分答案
题目链接:http://hihocoder.com/contest/hiho38/problem/1 ,挺难想的解题思路,好题. 按照提示的算法来: 我们需要找什么? 在这个题目中我们需要找的是路径最 ...
- BZOJ 4541: [Hnoi2016]矿区 平面图转对偶图+DFS树
4541: [Hnoi2016]矿区 Time Limit: 30 Sec Memory Limit: 512 MBSubmit: 433 Solved: 182[Submit][Status][ ...
- tomcat 启动显示指定的服务未安装
解决方法: 命令行进入tomcat的bin目录 输入“service.bat install” 重启,OK
- ModelName标记的使用
再项目中出现这样的错误: A model description could not be created. Duplicate model name 'ExamInfoParams' was fou ...
- OpenLayers学习笔记2——坐标转换问题
参照别人的添加marker的demo来改造时,发现无论怎样更改经纬度,都是停留在同一个位置.过了一两天突然想起可能是坐标参考的问题,尝试搜了一下,果然是这个问题.问题是这样子的: WMTS中地图的坐标 ...
- AngularJs学习笔记-数据绑定、管道
数据绑定.管道 (1)数据绑定(Angular中默认是单向绑定) 1.[]方括号 可以用于子组件传值 由于是单向绑定,所以当子组件中的iStars属性发生改变时,不会影响到父组件中product.ra ...
- CUDA:Supercomputing for the Masses (用于大量数据的超级计算)-第二节
原文链接 第二节:第一个内核 Rob Farber 是西北太平洋国家实验室(Pacific Northwest National Laboratory)的高级科研人员.他在多个国家级的实验室进行大型并 ...
- 【SQL】连接 —— 内连接、外连接、左连接、右连接、交叉连接
连接 · 内连接 · 外连接 · 左连接 · 右连接 · 全连接 · 交叉连接 · 匹配符号(+) 连接 根据表之间的关系,呈现跨表查询的结果. 外连接 内连接 左连接 右连接 全 ...
- 2019 ACM-ICPC全国邀请赛(西安) M.Travel 二分+判联通
https://nanti.jisuanke.com/t/39280 讲道理这题写bfs求最大边权限制下从1到n的最短步数,然后二分判一下就行了. 然鹅我还是直接套了dij,一开始纠结dij能不能过, ...