PythonWeb框架之Flask

Posted 蔠缬草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PythonWeb框架之Flask相关的知识,希望对你有一定的参考价值。

简单实例:

from flask import Flask

app = Flask(__name__)


@app.route(\'/\')
def hello_world():
    return \'Hello World!\'


if __name__ == \'__main__\':
    app.run()

 

1.配置

  通过app.config进行配置项的设置:

  - 直接赋值

app.config[\'secret_key\'] = "sdf234jkwjk3423kldjl"

  - 通过配置文件进行配置项管理

# settings.py 定义类,变量名要大写,在flask的使用源码里进行了isupper的判断
class BaseConfig():
    SALT = "3d086a6d-a140-41d8-817b-61f66de49fc0"
    SECRET_KEY = "3c43k6zl5las1d2kk3d8y7tw"
# 使用
app.config.from_object("settings.BaseConfig")

 

2.路由系统

  - 方式一

def index():
    pass
app.add_url_rule(\'/\', \'index\', index) # \'/\':url,\'index\':endpoint,index:对应执行的函数

  - 方式二

@app.route(\'/\', endpoint=\'index\')
def index():
    pass

    - 动态传参

@app.route(\'/index/<int:nid>\')
def index(nid):
    return "Index"

  endpoint指定反向解析url的方式,默认为函数名

url_for(endpoint) # 反向解析
url_for(endpoint, nid=参数) # 反向解析传参

  指定请求方式methods

@app.route(\'/\', methods=[\'GET\',\'POST\'])  # 默认只有GET

 

3.CBV

  示例

#CBV视图
from flask import Flask,url_for,views
#-----------------------------------------------------
app=Flask(__name__)               #装饰器

def auth(func):
    print(\'我在上面\')
    def inner(*args,**kwargs):
        return func(*args,**kwargs)
    return inner
#--------------------------------------------------------
class IndexView(views.MethodView):  #CBV视图
    methods=[\'GET\']                #允许的http请求方法(改CBV只允许GET方法)
    decorators = [auth,]            #每次请求过来都加auth装饰器

    def get(self):
        return \'Index.GET\'
    def post(self):
        return \'Index.POST\'

app.add_url_rule(\'/index/\',view_func=IndexView.as_view(name=\'name1\')) #(name=\'name1\'反向生成url别名


if __name__ == \'__main__\':
    app.run()

CBV视图

 

4.请求相关

  request能获取的数据:

request.method
request.args
request.form
request.values
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

  详细信息参考博客https://www.cnblogs.com/wangjikun/p/6935592.html

 

5.响应

  - return "Hello World" 返回字符串

  - return jsonify({\'data\': data})  返回json数据

  - return render_template(\'index.html\')  返回HTML

  - return redirect(\'/login\')  跳转

  定制响应头:

from flask import make_response

response = make_response("Hello World")
response.headers["xxx"] = "value"
# 设置cookie
response.set_cookie("key", "value")
return response

 

6.模板渲染

  使用方式和Django的模板渲染类似:{{ }} 和 {% %}。

  基本方法不太一样,函数需要加括号执行,类似于python的语法:

    - {{ dict.get() }} 或 {{ dict["key"] }}

    - {{ list[0] }}

    - {% for 循环 %} {% endfor %}

    - {% if 判断 %} {% endif %}

  还可以自定义全局函数,在模板中使用:

@app.template_global()
def sum(a1, a2):
    return a1 + a2
# 模板中使用{{ sum(2, 3) }}

# 类似的
@app.template_filter()
def sum(a1, a2, a3):
    return a1 + a2 + a3
# 调用方式不同{{ 1|sum(2,3) }}    

 

  模板继承:

{% extends "mater.html"%}

{% block content %}
    自定义内容
{% endblock %}

{% include "组件.html" %}    

  定义宏:

{% macro input(name, type=\'text\', value=\' \') %}
<input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}

# 使用
<form>
{{ input(\'username\') }}
{{ input(\'password\', type="password") }}
{{ input(\' \', type="submit", value="提交") }}
</form>

 

  安全:

# 前端
{{ data|safe }}

# 后端
from flask import Markup
data = Markup(data)

 

7.session

  flask中的session正常保存在cookie中,当请求时,会从cookie中读取session值,进行解密和反序列化保存在Local对象中,通过导入的session可以在视图中进行操作。请求结束时,会从Local对象中读取值,进行序列化和加密后保存到cookie中。

 

8.flash

  flask中暂时储存数据的一个方式

from flask import flash, get_flashed_messages

# 储存数据
flash("临时数据", "name")

# 获取数据, 通过pop获取并移除
msg = get_flashed_messages(category_filter=["name"])

 

9.中间件

  flask中请求到来时会执行app.__call__方法,而__call__会执行app.wsgi_app方法。而我们就可以通过重写wsgi_app完成一个中间件,重写app.wsgi_app为对象,执行app.wsgi_app()就会触发类的__call__方法,在__call__方法里完成中间件的操作。

class Middleware():
    def __init__(self, wsgi_app)
        self.wsgi_app = wsgi_app

    def __call__(self, environ, start_response):
        # 在处理请求前的操作
        ret = self.wsgi_app(environ, start_response)
        # 在请求完成后的操作
        return ret

if __name__ == \'__main__\':
    app.wsgi_app = Middleware(app.wsgi_app)
    app.run()

 

10.特殊装饰器

  1.before_request:在执行请求对应的视图函数之前执行其装饰的函数,可以用作登录验证。

  2.after_request:在请求完成后执行其装饰的函数

  3.before_first_request:在第一次请求时执行其装饰的函数

  4.template_global

  5.template_filter

  6.errorhandler:捕捉指定的错误,进而执行其装饰的函数     

 

以上是关于PythonWeb框架之Flask的主要内容,如果未能解决你的问题,请参考以下文章

师傅带徒弟学:Python Web之Flask框架-关东升-专题视频课程

Flask 与 Django 先学哪个呢

1 Flask 和pythonweb框架介绍2 flask快速使用 3 登录,显示用户信息小案例4 配置文件方式 5 路由系统

轻量级NoSQL数据库与PythonWeb-Flask框架组合使用2-Flask框架介绍

Flask框架从入门到精通之初识

轻量级NoSQL数据库与PythonWeb-Flask框架组合使用3-Flask框架安装