二 .Flask配置文件

一 .Flask配置文件

1.知识点巩固(通过字符串来获取类 类中的属性)

给一个字符串路径来获取 类和类里面的静态属性
app.py

import importlib

path="settings.Foo" #  给字符串找类  先截取  在通过模块   在通过反射

a,b=path.rsplit(".",maxsplit=1) # 加了maxsplit参数,发现在大量数据处理的时候
print(a,b)  # settings Foo

m=importlib.import_module(a)
print(m)  # <module 'settings' from 'J:\\django_flask\\myflask\\settings.py'>
cls=getattr(m,b)
print(cls) # <class 'settings.Foo'>

# 如何找到这个类
print(dir(cls))  # 这个是获取到类里面的所有信息
# ['NAME', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__',
#  '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'age']

for key in dir(cls):
     if key.isupper():
          print(key)            #  获取类里面值
          print(key,getattr(cls,key)) # NAME 张三
settings.py
class
Foo(): NAME="张三" age=22

2.配置文件的基本使用( 根据需求调用配置文件)

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.py

from
flask import Flask app=Flask(__name__) # 默认配置文件参数 app.config.from_object("settings.Pro") # 线上环境 配置文件 更据业务需求调用配置文件 # app.config.from_object("settings.Dev") # 测试环境 配置文件 print(app.config) #获取 默认配置文件参数 if __name__=="__main__": app.run()
settings.py

class
Bases(object): # 公用配置文件 让下面去继承 下面的类就可以调用父类的方法 属性等 age=55 # 配置文件 class Pro(Bases): # 线上环境 配置文件 DUBUG=False class Dev(Bases): # 测试环境 配置文件 DUBUG=True

 3. 路由(反向解析)

from flask import Flask,url_for
app=Flask(__name__)
@app.route("/index/cccc/awqwqwqwwq/",methods=["GET","POST"],endpoint="n1")  # endpoint 反向解析 默认写就等于被装饰的函数明
def aa():
    print(url_for('n1'))
    return "路由系统哈哈哈"
if __name__=="__main__":
    app.run()

from flask import Flask,url_for
app=Flask(__name__)
@app.route("/index/cccc/awqwqwqwwq/",methods=["GET","POST"])    # endpoint 反向解析 默认写就等于被装饰的函数明
def aa():
    print(url_for('aa'))
    return "路由系统哈哈哈"
if __name__=="__main__":
    app.run()

 4. 路由(动态和参数 反向解析参数)

from flask import Flask,url_for
app=Flask(__name__)
@app.route("/index/<int:nid>",methods=["GET","POST"])   # int string     float   url传参数必须加类型   但是默认是字符串   默认做不了正则
# @app.route("/index/<nid>",methods=["GET","POST"])    #  者默认参数 是字符串类型
def aa(nid):
    print("这是传进来的参数:",nid)
    return "路由系统哈哈哈"

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

from flask import Flask,url_for
app=Flask(__name__)
@app.route("/index/<int:nid>",methods=["GET","POST"])   # int string     float   url传参数必须加类型   但是默认是字符串   默认做不了正则
# @app.route("/index/<nid>",methods=["GET","POST"])    #  者默认参数 是字符串类型
def aa(nid):
    print( url_for("aa",nid=5))     # 反向解析传参数
    print("这是传进来的参数:",nid)
    return "路由系统哈哈哈"

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

@app.route('/user/<username>')
@app.route('/post/<int:post_id>')
@app.route('/post/<float:post_id>')
@app.route('/post/<path:path>')
@app.route('/login', methods=['GET', 'POST'])
常用路由系统有以上五种,所有的路由系统都是基于一下对应关系来处理:

9
DEFAULT_CONVERTERS = {
    'default':          UnicodeConverter,
    'string':           UnicodeConverter,
    'any':              AnyConverter,
    'path':             PathConverter,
    'int':              IntegerConverter,
    'float':            FloatConverter,
    'uuid':             UUIDConverter,
}

猜你喜欢

转载自www.cnblogs.com/lovershowtime/p/11729934.html