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的更多相关文章

  1. falsk 与 django 钩子方法

    falsk 四大钩子方法# 在第一次请求之前调用@app.before_first_requestdef before_first_request(): print("这是第一次请求之前调用 ...

  2. falsk 与 django 捕获异常

    falsk捕获异常@app.errorhandler(405)def internal_server_error(e): return '这个接口不能被GET请求到,只能post' django 捕获 ...

  3. falsk 与 django cookie和session存、取、删的区别

    falsk cookie的存取删需导入from flask import Flask,make_response,request# 存COOKIE的方法@app.route('/setcookie') ...

  4. Flask06 地址约定、利用falsk提供的方法渲染模板

    1 访问地址约定 在访问路径的末尾是否需要加 / -> 可以加,也可以不加 前端的访问路径必须和后端的路径完全匹配才能够访问成功,如果我们在后台的路径都是以 / 结尾,但是我们的访问路径是没有以 ...

  5. Falsk框架 Session 与 Flask-Session

    目录 Cookie 与 Session 简单了解 Falsk 中 Session 的保管机制 相关的配置 使用 Flask-Session 三方组件 基础练习题 Cookie 与 Session 简单 ...

  6. falsk 使用celery后台执行任务

    # falsk 使用celery后台执行任务 1.基础环境搭建 doc:https://flask.palletsprojects.com/en/1.0.x/patterns/celery/ mkdi ...

  7. flask 第二章 endpoint重名 Flask路由 初始化配置 Falsk Config 蓝图+目录结构

    今日内容 1.路由的分发,以下两种方式效果一样,但是都能指向同一个函数 from flask import Flask app=Flask(__name__) #第一种方式 @app.route('/ ...

  8. Falsk SqlAlchemy

    pip install mysql-connector from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Fl ...

  9. falsk sqlalchemy 自关联创建评论回复数据库

    本项目在于创建类似微信上的评论回复功能的数据库 基类: from app import db from datetime import datetime class Basemadel(object) ...

  10. falsk 项目中日志设置

    app/__init__.py: 1 import logging from logging.handlers import RotatingFileHandler ''' 开发中使用DEBUG级别, ...

随机推荐

  1. 网页title旁边的小图片

    网页title旁边的小图片设置,图片格式必须是.ico <link rel="icon" href="img/logo.ico" type="i ...

  2. CentOS 6.4系统中编译和升级内核

    CentOS 6.4系统中编译和升级内核 [日期:2013-08-25] 来源:Linux社区  作者:vipshichg [字体:大 中 小] 可能因为以下几种原因,你可能需要对Linux kern ...

  3. border实现矩形中斜线分割 切换按钮

    思路:将该矩形分为三个div,中间的div使用border的特性 代码实现如下:

  4. Browser History

    History 对象中包含用户(在浏览器窗口中)访问过的URL History 对象是window对象的一部分,可通过window.history属性对其进行访问. 注释:没有应用于History对象 ...

  5. .NET中异常类(Exception)

    异常:程序在运行期间发生的错误.异常对象就是封装这些错误的对象. try{}catch{}是非常重要的,捕获try程序块中所有发生的异常,如果没有捕获异常的话,程序运行的线程将会挂掉,更严重的是这些错 ...

  6. nginx对不存在的文件进行404处理

    location / { try_files $uri $uri/ /?$args 404; } location / { try_files $uri $uri/ /index.html 404; ...

  7. ASP.net Session阻塞、Session锁、MVC Action请求阻塞问题

    会话Session Session用于服务器端状态管理,使用Session之后,每个客户端都可以将实际的数据保存在服务器上,对于每个客户端的数据,将会生成一个对应的唯一的key(保存在客户端).客户端 ...

  8. ascii码与unicode码的区别

    ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于拉丁字母的一套电脑编码系统.它主要用于显示现代英语和其他西 ...

  9. Mybatis-动态 SQL语句

    if标签 判断语句,用户单条件分支判断 where标签 为了简化上面where 1=1的条件拼装,我们可以采用标签来简化开发 同 foreach标签 场景:传入多个 id 查询用户信息 标签用于遍历集 ...

  10. Solaris&&QNX® Neutrino®&&OpenVMS&&FreeBSD&&AIX

    原文链接Solaris (读作 /se'laris:/ 或者 /so'le:ris/ 或者 '梭拉瑞斯' )是Sun Microsystems研发的计算机 操作系统.它被认为是UNIX操作系统的衍生版 ...