一 .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, }