1、__get__的用法

2、Flask中的使用

2.1、Flask中源码

Flask类:

class Flask(_PackageBoundObject):

testing = ConfigAttribute('TESTING')

secret_key = ConfigAttribute('SECRET_KEY')

session_cookie_name = ConfigAttribute('SESSION_COOKIE_NAME')

permanent_session_lifetime = ConfigAttribute('PERMANENT_SESSION_LIFETIME',

get_converter=_make_timedelta)

send_file_max_age_default = ConfigAttribute('SEND_FILE_MAX_AGE_DEFAULT',

get_converter=_make_timedelta)

use_x_sendfile = ConfigAttribute('USE_X_SENDFILE')

env = ConfigAttribute('ENV')

ConfigAttribute类:

class ConfigAttribute(object):

"""Makes an attribute forward to the config"""

def __init__(self, name, get_converter=None):

self.__name__ = name

self.get_converter = get_converter

def __get__(self, obj, type=None):

print("__get__() is called", obj, type)

if obj is None:

return self

rv = obj.config[self.__name__]

if self.get_converter is not None:

rv = self.get_converter(rv)

return rv

def __set__(self, obj, value):

print("__set__() is called", obj, value)

obj.config[self.__name__] = value

2.2、测试用Flask程序

from flask import Flask,Response

from settings import config

app = Flask(__name__)

app.config.from_object(config['default'])

print("*"*50)

print(app.secret_key)

app.secret_key = "123"

print("*"*50)

print(app.session_cookie_name)

app.session_cookie_name = "session_ok"

print("*"*50)

@app.route('/home/')

def home():

return Response("home,hello")

if __name__ == "__main__":

app.run()

setting.py源程序:

import os

import logging

import datetime

# print(__file__)

# print(os.path.dirname(__file__))

basedir = os.path.abspath(os.path.dirname(__file__))

# print(basedir)

class InfoFilter(logging.Filter):

def filter(self, record):

"""

only use INFO

筛选,只需要INFO级别的log

:param record:

:return:

"""

if logging.INFO <= record.levelno

# 已经是INFO级别了

# 然后利用父类,返回1

return super().filter(record)

else:

return 0

class BaseConfig(object):

DEBUG = False

TESTING = False

PROPAGATE_EXCEPTIONS = None

PRESERVE_CONTEXT_ON_EXCEPTION = None

SECRET_KEY = None

PERMANENT_SESSION_LIFETIME = datetime.timedelta(31)

USE_X_SENDFILE = False

LOGGER_NAME = "app"

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 = datetime.timedelta(0, 43200)

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

LOG_PATH = os.path.join(basedir, 'logs')

LOG_PATH_ERROR = os.path.join(LOG_PATH, 'error.log')

LOG_PATH_INFO = os.path.join(LOG_PATH, 'info.log')

LOG_FILE_MAX_BYTES =100*1024*1024

# 轮转数量是10个

LOG_FILE_BACKUP_COUNT = 10

@classmethod

def init_app(cls, app):

pass

class ProductionConfig(BaseConfig):

DEBUG = False

class DevelopmentConfig(BaseConfig):

DEBUG = True

SECRET_KEY = "avafaewffewfaew"

@classmethod

def init_app(cls, app):

# BaseConfig.init_app(app)

super().init_app(app)

import logging

from logging.handlers import RotatingFileHandler

# Formatter

formatter = logging.Formatter(

'%(asctime)s %(levelname)s %(process)d %(thread)d '

'%(pathname)s %(lineno)s %(message)s')

# FileHandler Info

file_hander_info = RotatingFileHandler(filename=cls.LOG_PATH_INFO)

file_hander_info.setFormatter(formatter)

file_hander_info.setLevel(logging.INFO)

info_filter = InfoFilter()

file_hander_info.addFilter(info_filter)

app.logger.addHandler(file_hander_info)

# FileHandler Error

file_hander_error = RotatingFileHandler(filename=cls.LOG_PATH_ERROR)

file_hander_error.setFormatter(formatter)

file_hander_error.setLevel(logging.ERROR)

app.logger.addHandler(file_hander_error)

class TestConfig(BaseConfig):

DEBUG = True

config = {

'development': DevelopmentConfig,

'production': ProductionConfig,

'testing': TestConfig,

'default': DevelopmentConfig,

}

2.3、执行测试程序

打印输出:

**************************************************

__get__() is called

avafaewffewfaew

__set__() is called 123

**************************************************

__get__() is called

session

__set__() is called session_ok

**************************************************

__get__() is called

python中get和set使用_Python中的__get__与__set__相关推荐

  1. Python基础_第3章_Python中的循环结构

    Python基础_第3章_Python中的循环结构 文章目录 Python基础_第3章_Python中的循环结构 Python中的循环结构 一.回顾分支练习题 1.判断是否为一个合法三角形 2.求世界 ...

  2. Python基础_第5章_Python中的数据序列

    Python基础_第5章_Python中的数据序列 文章目录 Python基础_第5章_Python中的数据序列 Python中的数据序列 一.字典--Python中的==查询==神器 1.为什么需要 ...

  3. python post与get的区别_python中get和post有什么区别

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  4. python深复制与浅复制_Python中的深拷贝和浅拷贝详解

    要说清楚Python中的深浅拷贝,需要搞清楚下面一系列概念: 变量-引用-对象(可变对象,不可变对象)-切片-拷贝(浅拷贝,深拷贝) [变量-对象-引用] 在Python中一切都是对象,比如说:3, ...

  5. python运行mcmc为何老出错_python中mcmc方法的实现

    MCMC方法在贝叶斯统计中运用很多,MIT发布的EMCEE是实现的比较好的.介绍页面在下面.源代码中examples里的代码可以帮助理解各种功能,特别是line.py 列出了最小二乘法,最大似然法和M ...

  6. python实例属性与类属性_Python中的类属性和实例属性引发的一个坑-续

    上篇文章Python 中的类属性和实例属性,我们探讨了类属性和实例属性引发的一个小坑.总结了类属性和实例属性的区别如下:类属性可以被类和实例调用,实例属性只能被实例调用 类属性不会随着实例的调用而改变 ...

  7. python计算数组元素的和_python中数组的运算

    Python中进行数组的运算需要调用NumPy包. 其官网是:http://www.numpy.org/​www.numpy.org NumPy是Python语言的一个扩充程序库.它支持高级大量的维度 ...

  8. python中格式化字符串的作用_python中字符串格式化的意义(化妆)

    格式 描述 %%百分号标记 #就是输出一个% %c字符及其ASCII码 %s字符串 %d有符号整数(十进制) %u无符号整数(十进制) %o无符号整数(八进制) %x无符号整数(十六进制) %X无符号 ...

  9. python中 r是什么意思_python中rb含义理解

    Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 文件使用方式标识 'r':默认值,表示从文件读取数据 'w':表示要向文件写入数据,并截断以前 ...

  10. python字典是什么的集合_Python中的字典和集合

    文章目录字典1.介绍 2.创建字典 3.字典内元素的访问 4.字典元素的添加.修改.删除 5.关于字典的其它操作 6.字典存储底层原理 集合1.介绍 2.相关操作 3.集合元素的添加 4.移除元素 字 ...

最新文章

  1. 面向小白的最全 Python 可视化教程,超全的!
  2. 查看tensorflow安装版本
  3. Linux的cp -a与cp -p
  4. day 64 Django 第五天 多表对多表的对应关系ORM
  5. bootstrapValidator remote 验证问题
  6. 22 CO配置-控制-产品成本控制-成本对象控制-检查制造订单 (PP) 的评估变式
  7. webpack及node.js基础必会--path模块的常见操作
  8. 剑指offer面试题13:O(1)删除链表结点
  9. 实战爬虫:python爬虫学习笔记之爬取大前端网站
  10. Web网站扫【小程序码】登录的技术实现
  11. ps快速抠图 PS抠白底图
  12. 别再问我如何制作甘特图了!
  13. 入华商用四周年,Office 365小程序在路上
  14. 408 知识点笔记——操作系统(绪论、进程管理)
  15. 小米笔记本桌面没有计算机,没有4K屏幕,只有3.5K,小米笔记本真好用吗?
  16. 基于javaweb+springboot的医院管理系统(java+Springboot+ssm+mysql+maven)
  17. 逆波兰式的转换与计算(简单)
  18. colorkey口红怎么样_colorkey镜面唇釉怎么样
  19. s7-200与计算机modbus通讯案例,西门子S7-200 Smart Modbus通信介绍与实例编程
  20. 【高项】成本管理(ITTO)

热门文章

  1. Swift3.0语言教程字符串与URL的数据转换与自由转换
  2. DHCP欺骗(DHCP Sproofing)
  3. Xamarin.Android提示找不到mono.Android.Support.v4
  4. Unity 4.x 2D游戏开发基础教程大学霸第一更
  5. db2设置默认schema_DB2中设置当前会话的Schema
  6. 科学家利用BCI技术来缓解幻肢疼痛
  7. java软件下载jar_qdox.jar免费版
  8. 苹果的新Siri:不男,也不女
  9. 今年你的双11包裹,也是自动驾驶卡车送来的吗?
  10. Office for AI | 拯救互联网人崩溃瞬间