flask入门补充

by admin on 2019年9月24日

  在上篇文章提到了json的编码问题。那么Flask是国外开发的框架,没有考虑到中文编码,那么我们就需要自己配置

都是基于windows

1.HTTP方法

默认情况下路由只回应GET请求,可通过route()装饰器传递methods参数改变此行为

@app.route('/login',methods=['GET','POST'])
def login():
  if request.method=='POST':
    do_the_login()
  else:
    show_the_login_form()
HTTP方法 使用场景
GET 获取资源,幂等
HEAD 只关心消息头
POST 创建一个新的资源,提交数据
PUT 完整的替换资源或者创建资源,幂等的
DELETE 删除资源
OPTIONS 获取资源支持所有的HTTP方法
PATCH 局部更新,修改某个已有的资源

本篇导航:

本篇导航:

  那么在访问页面的时候会有 get 请求和post
请求。在下边我也会提到。以及没有接触过编程的,我会推荐一个软件,

1.安装

2. 响应

视图函数的返回值会自动转换为一个响应对象,转换逻辑如下:
1.返回的是合法的响应对象,从视图直接返回。
2.返回的字符串,响应对象会用字符串数据和默认参数创建。
3.返回的是元组,且元组可以提供额外的信息,这样的元组必须是(response,status,headers)形式,且至少包含一个元素,status覆盖掉状态码,headers可以是列表或字典。
如果都不满足,flask会假设返回值是一个合法的WSGI程序,并转换为请求对象。

可使用make_response()操作上述步骤结果的响应对象,只需将原本需返回的视图放到make_response()内。如:

@app.errorhandler(404)
def not_found(error):
  return render_template('error.html'),404

make_response()可添加其他额外的信息,比如cookie,headers

@app.errorhandler(404)
def not_found(error):
  resp=make_response(render_template('error.html',404))
  resp.headers['X-something']='A-value'
return resp
  • Flask介绍

  • 简单使用

  • 排错
  • 小结
  • Flask介绍

  • 简单使用

  • 排错
  • 小结

  来查看页面的请求是 post 还是 get 请求 以及我还会提到
在搭建项目的时候,软件更新版本,原来的老项目不能用

1.1 虚拟环境

3.Cookies

通过请求的cookies属性来访问Cookies,响应对象的set_cookie方法来设置Cookies。
如果需要使用session,不要直接使用Cookies,参考session一节。
响应对象不存在时,需要设置Cookies,使用延时请求回调模块。
请求对象的cookies是客户端提供的所有Cookies的字典。
读取Cookies

from flask import Flask
@app.route('/')
def index()
  username=resquest.cookies.get('username')

不用resquest.cookies['username'],以防cookie丢失得到错误值。
设置Cookies

from flask import make_response,render_template
@app.route('/')
def index()
  resp=make_response(render_template(...))
  resp.set_cookie('username','the-username')
  return resp

 

 

  的解决方法。也会有提到。

1.1.1 安装

pip install virtualenv
mkdir myproject
cd myproject
virtualenv flask_venv

4. session

session对象允许在不同请求对象之间储存特定用户的信息。
在Cookies基础上实现,并对Cookies进行密钥签名。除非用户知道密钥,不然只能查看Cookies内容,无法修改。

from flask import Flask,url_for,redirect,session,request,escape
app=Flask(__name__)

@app.route('/')
def index():
  if 'username' in session:
    return 'logged in as %s' %escape(session['username'])
return 'You are not logged'

@app.route('/login',methods=['GET','POST'])
def login():
  if request.method=='POST':
    session['username']=request.form['username']
    return redirect(url_for('index'))
return ""

escape(s)
将s中的字符(&,<,>,’,”)转换成HTML。

生成强壮的密钥,一个密钥应该足够随机。

import os
secret_key=os.urandom(24)

基于cookie的会话注意:flask会将放进会话对象的值序列至Cookies。
如果你发现某些值在请求之间并没有持久存在,然而确实已经启用了
Cookies,但也没有得到明确的错误信息。这时,请检查你的页面响应中的
Cookies 的大小,并与 Web 浏览器所支持的大小对比。

一. Flask介绍

一. Flask介绍

  以下有一些配置方法。仅供参考

1.1.2 激活虚拟环境

flask_venv\Scripts\activate

5.访问请求数据request

导入from flask import request
HTTP方法通过method属性获得。
通过flask.request.form访问POST/PUT提交的数据。
flask.request.args.get()获得URL中的查询参数(?key=value)。

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug
WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug
WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后触发Flask框架,开发人员基于Flask框架提供的功能对请求进行相应的处理,并返回给用户,如果要返回给用户复杂的内容时,需要借助jinja2模板来实现对模板的处理,即:将模板和数据进行渲染,将渲染后的字符串返回给用户浏览器。

  

1.1.3 退出虚拟环境

deactivate

“微”(micro) 并不表示你需要把整个 Web
应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask
在功能上有所欠缺。微框架中的“微”意味着 Flask
旨在保持核心简单而易于扩展。Flask
不会替你做出太多决策——比如使用何种数据库。而那些 Flask
所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask
可以与您珠联璧合。

“微”(micro) 并不表示你需要把整个 Web
应用塞进单个 Python 文件(虽然确实可以 ),也不意味着 Flask
在功能上有所欠缺。微框架中的“微”意味着 Flask
旨在保持核心简单而易于扩展。Flask
不会替你做出太多决策——比如使用何种数据库。而那些 Flask
所选择的——比如使用何种模板引擎——则很容易替换。除此之外的一切都由可由你掌握。如此,Flask
可以与您珠联璧合。

# 第一种配置方法,是在py文件中直接配置的。#
app.config[‘JSON_AS_ASCII’] = False# debug开启模式#
app.config[‘DEBUG’] = True

1.2 flask安装

激活虚拟环境后:
pip install Flask

默认情况下,Flask
不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask
支持用扩展来给应用添加这些功能,如同是 Flask
本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask
也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

默认情况下,Flask
不包含数据库抽象层、表单验证,或是其它任何已有多种库可以胜任的功能。然而,Flask
支持用扩展来给应用添加这些功能,如同是 Flask
本身实现的一样。众多的扩展提供了数据库集成、表单验证、上传处理、各种各样的开放认证技术等功能。Flask
也许是“微小”的,但它已准备好在需求繁杂的生产环境中投入使用。

# 第二种方式#
从外部引入配置文件,用于加载,也就是需要新创建一个ini配置文件
config.ini# 内部代码就俩行DEBUG = TrueJSON_AS_ASCII = False#
再回到原来的文件引入# app.config.from_pyfile(‘config.ini’)
# 第三种方式是配置环境变量。# #
C:\Users\自己的路径,我找的是绝对路径 \www\web\config.ini
从环境变量中来配置加载# 我的是在win-10下搭建的#
计算机-属性-更改设置-高级-环境变量-新建
那么第一行你需要起名,第二行需要复制路径,也就是上边的路径#
回到py文件中。# app.config.from_envvar(‘app_config’) #
这里注意在文件中导入的是字符串。

2.快速开始

from flask import Flask

app=Flask(__name__)

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

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

运行后,在浏览器输入 访问
app.run的方式只适合调试,生产环境中需要使用Gunicorn或者uWSGI。

-和Django比较

-和Django比较

# 第四种方式# 建立一个配置类 其实就是第一种方法,只是在类中封装class
Config:   DEBUG = True   JSON_AS_ASCII = False#
那么在调用这个类名。就可以了
app.config.from_object    请求代码#
使用jsonify模块来让网页直接显示json数据# 实际是接口开发 被访问是get
或者是 post 的俩种接收方式# 以json吐数据# @app.route(‘/json’,
methods=[‘GRT’,’POST’]) # 可以只留post方式@app.route(‘/json’,
methods=[‘POST’]) #
可以只留post方式,那么就会走下边的errorhandler方法def
re_json():json_dict = {‘id’:10,
‘title’:’flask的应用’,’content’:’flask的json格式化’}#
使用jsonify来讲定义好的数据转换为json格式,并且返回给前段return
jsonify(json_dict)  # Flask统一对状态码捕获异常@app.errorhandlerdef
internal_server_error:#
为了用户体验。我们把错误的提示信息以文字的方式返回return
‘这个接口不能被get请求到。只能发送Post请求’

3. 配置管理

django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。。

django:无socket,依赖第三方模块wsgi,中间件,路由系统(CBV,FBV),视图函数,ORM。cookie,session,Admin,Form,缓存,信号,序列化。。

# 捕获404的异常。@app.errorhandlerdef internal_server_error_one:#
这里也一样。 return
‘网页不存在或者已经删除’  那么对于没有接触过编程的朋友们来说。有一款很强大的短信。postman
意为邮差,很实用的一款软件,  百度一下的话,都会有软件的介绍,这里就不多说了。他可以发送post
和 get请求来抓取网址页面的内容 一般是   用来在开发中测试api
大姐有兴趣的可以了解一下  那么也可以用requests
模块来模拟post请求和get请求,因为是爬虫,所以也要有访问的方式,  很简单的代码。如下import
requests
# 使用requests模块来发送post请求r =
requests.post(‘ r =
requests.get(‘ = r.content.decode #
解码print  也可以拿到我们页面的内容  这里我是在windows下搭建的。没有用Linux,
那么在创建文件目录下种不要有中文。  如果安装不上。用virtualenv
–no-setuptools –no-pip –no-wheel
venv在安装试试  在python中的版本一般不向下兼容,也就是说python3.0的版本不适合python2.0的版本,那么我原来的  项目是用2.0的版本搭建的。现在放在3.0上运行会不兼容。比如print
在2.0和3.0中的区别,  我们需要下载一个模块pip install virtualenv
用来安装虚拟环境  当下载好之后  首先在命令窗口
找到项目,在项目中运行代码。如下:  # C:\Users\xxxxxxx\www>pip
install virtualenv# C:\Users\xxxxxxx\www\webone>virtualenv
venv在输入这行命令之后会有
如下的显示,证明安装成功。暂时还没有解决安装不成功的方案,后续在解决#
Using base prefix
‘c:\\users\\bingyue\\appdata\\local\\programs\\python\\python37’#
New python executable in
C:\Users\bingyue\www\webone\venv\Scripts\python.exe# Installing
setuptools, pip, wheel…#
done.下载完成之后,我们进入原项目中,会发现多一个目录。venv的文件夹。我们进入Scripts
运行命令activate当出现下边代码第二行 前缀有 那就证明虚拟环境搭建成功。
退出虚拟环境deactivate#
C:\Users\xxxxxxx\www\webone\venv\Scripts>activate
进入虚拟环境# C:\Users\xxxxxxx\www\webone\venv\Scripts>
提示我进入虚拟环境#
C:\Users\xxxxxxx\www\webone\venv\Scripts>deactivate
退出虚拟环境   之后再为大家做详细的补充 谢谢!

3.1 设置项很少,可直接硬编码进来,如:

app.config['DEBUG']=True
update方法:

app.config.update(
DEBUG=True,
SECRET_KEY='...'
)

app.config全部配置变量可参看flask内置配置

Flask:无socket,中间件(扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了

Flask:无socket,中间件(扩展),路由系统,视图(CBV)、第三方模块(依赖jinja2),cookie,session弱爆了

3.2 通过文件集中管理设置项

若配置文件名为 settings.py



3.2.1 通过配置文件加载

模块名字加载
app.config.from_object('settings')
引用后直接传入模块对象

import settings
app.config.from_object(settings)

 

 

3.2.2 通过文件名字加载,直接传入文件名字,不限于.py文件

app.config.from_pyfile('settings.py',silent=True)
默认配置文件不存在时会抛出异常,使用silent=True的时候知识返回Fasle,但不会抛出异常。

二、简单使用

二、简单使用

3.2.3 通过环境变量加载

1、安装

1、安装

4. 调试模式

直接在应用对象上设置

app.debug=True
app.run()

作为run的参数传入
app.run(debug=True)

pip3 install flask
pip3 install flask

2、Flask依赖一个实现wsgi协议的模块:werkzeug

2、Flask依赖一个实现wsgi协议的模块:werkzeug

from werkzeug.wrappers import Request, Response

@Request.application
def hello(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 4000, hello)
from werkzeug.wrappers import Request, Response

@Request.application
def hello(request):
    return Response('Hello World!')

if __name__ == '__main__':
    from werkzeug.serving import run_simple
    run_simple('localhost', 4000, hello)

3、简单使用

3、简单使用

from flask import Flask
app = Flask(__name__)

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

if __name__ == '__main__':
    app.run()
from flask import Flask
app = Flask(__name__)

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

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

4、练习

4、练习

图片 1图片 2

图片 3图片 4

from flask import Flask,render_template,request,redirect,session
app = Flask(__name__)
app.secret_key = "sdsfdsgdfgdfgfh"

def wrapper(func):
    def inner(*args,**kwargs):
        if not session.get("user_info"):
            return redirect("/login")
        ret = func(*args,**kwargs)
        return ret
    return inner

@app.route("/login",methods=["GET","POST"])
def login():
    if request.method=="GET":
        return render_template("login.html")
    else:
        # print(request.values)   #这个里面什么都有,相当于body
        username = request.form.get("username")
        password = request.form.get("password")
        if username=="haiyan" and password=="123":
            session["user_info"] = username
            # session.pop("user_info")  #删除session
            return redirect("/index")
        else:
            # return render_template("login.html",**{"msg":"用户名或密码错误"})
            return render_template("login.html",msg="用户名或者密码错误")

@app.route("/index",methods=["GET","POST"])
@wrapper
def index():
    # if not session.get("user_info"):
    #     return redirect("/login")
    return render_template("index.html")


if __name__ == '__main__':
    app.run(debug=True)
from flask import Flask,render_template,request,redirect,session
app = Flask(__name__)
app.secret_key = "sdsfdsgdfgdfgfh"

def wrapper(func):
    def inner(*args,**kwargs):
        if not session.get("user_info"):
            return redirect("/login")
        ret = func(*args,**kwargs)
        return ret
    return inner

@app.route("/login",methods=["GET","POST"])
def login():
    if request.method=="GET":
        return render_template("login.html")
    else:
        # print(request.values)   #这个里面什么都有,相当于body
        username = request.form.get("username")
        password = request.form.get("password")
        if username=="haiyan" and password=="123":
            session["user_info"] = username
            # session.pop("user_info")  #删除session
            return redirect("/index")
        else:
            # return render_template("login.html",**{"msg":"用户名或密码错误"})
            return render_template("login.html",msg="用户名或者密码错误")

@app.route("/index",methods=["GET","POST"])
@wrapper
def index():
    # if not session.get("user_info"):
    #     return redirect("/login")
    return render_template("index.html")


if __name__ == '__main__':
    app.run(debug=True)

View
Code

View
Code

保存session的数据存到了浏览器上,
  - 优点:减轻了服务端的压力
  - 缺点:不安全

保存session的数据存到了浏览器上,
  - 优点:减轻了服务端的压力
  - 缺点:不安全



 

 

三、排错

三、排错

1、当你点击提交出现这样的错

1、当你点击提交出现这样的错

图片 5

图片 5

解决方案

解决方案

@app.route("/login",methods=["GET","POST"])
@app.route("/login",methods=["GET","POST"])

 2、设置session的时候

 2、设置session的时候

图片 7

图片 7

解决方法:设置秘钥

解决方法:设置秘钥

app.secret_key = "sdsfdsgdfgdfgfh"
app.secret_key = "sdsfdsgdfgdfgfh"

附加:

附加:

图片 9

图片 9



 

 

四、小结

四、小结

1、flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi

1、flask依赖wsgi,实现wsgi的模块:wsgiref,werkzeug,uwsgi

2、实例化Flask对象,里面是有参数的

2、实例化Flask对象,里面是有参数的

app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx')
app = Flask(__name__,template_folder='templates',static_url_path='/xxxxxx')

3、两种添加路由的方式

3、两种添加路由的方式

方式一:
  @app.route('/xxxx')  # @decorator
  def index():
     return "Index"
方式二:
  def index():
     return "Index"
  app.add_url_rule('/xxx', "n1", index)  #n1是别名 
方式一:
  @app.route('/xxxx')  # @decorator
  def index():
     return "Index"
方式二:
  def index():
     return "Index"
  app.add_url_rule('/xxx', "n1", index)  #n1是别名 

4、添加路由关系的本质

4、添加路由关系的本质

  将url和视图函数封装成一个Rule对象)添加到Flask的url_map字段中

  将url和视图函数封装成一个Rule对象)添加到Flask的url_map字段中

5、Flask中装饰器应用

5、Flask中装饰器应用

图片 11图片 12

图片 13图片 14

from flask import Flask,render_template,request,redirect,session
app = Flask(__name__)
app.secret_key = "sdsfdsgdfgdfgfh"

def wrapper(func):
    def inner(*args,**kwargs):
        if not session.get("user_info"):
            return redirect("/login")
        ret = func(*args,**kwargs)
        return ret
    return inner

@app.route("/login",methods=["GET","POST"])
def login():
    if request.method=="GET":
        return render_template("login.html")
    else:
        # print(request.values)   #这个里面什么都有,相当于body
        username = request.form.get("username")
        password = request.form.get("password")
        if username=="haiyan" and password=="123":
            session["user_info"] = username
            # session.pop("user_info")  #删除session
            return redirect("/index")
        else:
            # return render_template("login.html",**{"msg":"用户名或密码错误"})
            return render_template("login.html",msg="用户名或者密码错误")

@app.route("/index",methods=["GET","POST"])
@wrapper
def index():
    # if not session.get("user_info"):
    #     return redirect("/login")
    return render_template("index.html")


if __name__ == '__main__':
    app.run(debug=True) 
from flask import Flask,render_template,request,redirect,session
app = Flask(__name__)
app.secret_key = "sdsfdsgdfgdfgfh"

def wrapper(func):
    def inner(*args,**kwargs):
        if not session.get("user_info"):
            return redirect("/login")
        ret = func(*args,**kwargs)
        return ret
    return inner

@app.route("/login",methods=["GET","POST"])
def login():
    if request.method=="GET":
        return render_template("login.html")
    else:
        # print(request.values)   #这个里面什么都有,相当于body
        username = request.form.get("username")
        password = request.form.get("password")
        if username=="haiyan" and password=="123":
            session["user_info"] = username
            # session.pop("user_info")  #删除session
            return redirect("/index")
        else:
            # return render_template("login.html",**{"msg":"用户名或密码错误"})
            return render_template("login.html",msg="用户名或者密码错误")

@app.route("/index",methods=["GET","POST"])
@wrapper
def index():
    # if not session.get("user_info"):
    #     return redirect("/login")
    return render_template("index.html")


if __name__ == '__main__':
    app.run(debug=True) 

View
Code

View
Code

6、请求响应相关

6、请求响应相关

- request
    - request.form   #POST请求
    - request.args   #GET请求  字典形式的
    - request.querystring  #GET请求,bytes形式的
- response
    - return render_tempalte()
    - return redirect()
    - return ""
     v = make_response(返回值)  #吧返回的值包在了这个函数里面
- session
    - 存在浏览器上,并且是加密的
    - 依赖于:secret_key
- request
    - request.form   #POST请求
    - request.args   #GET请求  字典形式的
    - request.querystring  #GET请求,bytes形式的
- response
    - return render_tempalte()
    - return redirect()
    - return ""
     v = make_response(返回值)  #吧返回的值包在了这个函数里面
- session
    - 存在浏览器上,并且是加密的
    - 依赖于:secret_key

 7、Flask配置文件

 7、Flask配置文件

图片 15图片 16

图片 17图片 18

flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
    {
        '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,
    }

方式一:
    app.config['DEBUG'] = True

    PS: 由于Config对象本质上是字典,所以还可以使用app.config.update(...)

方式二:
    app.config.from_pyfile("python文件名称")
        如:
            settings.py
                DEBUG = True

            app.config.from_pyfile("settings.py")

    app.config.from_envvar("环境变量名称")
        环境变量的值为python文件名称名称,内部调用from_pyfile方法


    app.config.from_json("json文件名称")
        JSON文件名称,必须是json格式,因为内部会执行json.loads

    app.config.from_mapping({'DEBUG':True})
        字典格式

    app.config.from_object("python类或类的路径")

        app.config.from_object('pro_flask.settings.TestingConfig')

        settings.py

            class Config(object):
                DEBUG = False
                TESTING = False
                DATABASE_URI = 'sqlite://:memory:'

            class ProductionConfig(Config):
                DATABASE_URI = 'mysql://user@localhost/foo'

            class DevelopmentConfig(Config):
                DEBUG = True

            class TestingConfig(Config):
                TESTING = True

        PS: 从sys.path中已经存在路径开始写


    PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录

配置文件
flask中的配置文件是一个flask.config.Config对象(继承字典),默认配置为:
    {
        '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,
    }

方式一:
    app.config['DEBUG'] = True

    PS: 由于Config对象本质上是字典,所以还可以使用app.config.update(...)

方式二:
    app.config.from_pyfile("python文件名称")
        如:
            settings.py
                DEBUG = True

            app.config.from_pyfile("settings.py")

    app.config.from_envvar("环境变量名称")
        环境变量的值为python文件名称名称,内部调用from_pyfile方法


    app.config.from_json("json文件名称")
        JSON文件名称,必须是json格式,因为内部会执行json.loads

    app.config.from_mapping({'DEBUG':True})
        字典格式

    app.config.from_object("python类或类的路径")

        app.config.from_object('pro_flask.settings.TestingConfig')

        settings.py

            class Config(object):
                DEBUG = False
                TESTING = False
                DATABASE_URI = 'sqlite://:memory:'

            class ProductionConfig(Config):
                DATABASE_URI = 'mysql://user@localhost/foo'

            class DevelopmentConfig(Config):
                DEBUG = True

            class TestingConfig(Config):
                TESTING = True

        PS: 从sys.path中已经存在路径开始写


    PS: settings.py文件默认路径要放在程序root_path目录,如果instance_relative_config为True,则就是instance_path目录

配置文件

View
Code

View
Code

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图