1.sqlalchemy没有自带tableupdate,官方的迁移工具主要是alembic和sqlalchemymigrate,如果不使用工具,create更新模型后可以通过sqlalchemy的create_all方法更新新表,表字段可以只能在数据库中手动修改,同时更新模型。另外,sqlite在shell下执行sql脚本的方式是:sqlitemy.dbdisk``ipvs->host(loadbalancing)``vrrp->router(high-ability)``bond->networkcard``(lvs=ipvs+vrrp)`simple理解:RAID是将几块硬盘连接在一起,达到提??高存储稳定性的效果,在存储拥有者看来就像一块硬盘。ipvs就是把几个server主机组合在一起,主要是做负载均衡,对client访问者来说就是一个server。vrrp是多个router的组合,主要用于高可用,对主机来说就像一个router。绑定是多个网卡的组合,可以同时用于高可用性和负载均衡。它看起来像主机的网卡。其实无非就是将多个对象作为一个呈现出来,达到负载均衡或者高可用的目的。当然,细节更复杂。6、debian系统下的cron默认使用run-parts命令执行小时、天、周等计时。可以看到这个命令是用来执行一个文件夹下的所有可执行文件的,但是ln有个软链接到/etc/cron.conf在hourly目录下发现不会执行,手动执行run-parts确实没有输出。原来对于.sh后缀的run-parts命令是不会执行的。。。7.sqlalchemy报错:TypeError:anintegerisrequired,stringvalueisassignedtoabooleanfield时会出现这个错误.因为sqlite中boolean的值实际上是用整数0和1记录的(mysql中也是一样,是tinyint类型)。8.关于flaskcontext:之前用过django,习惯进入python命令行,classrequest():DATA={}手动组合一个request,然后直接实例化view对象,调用相应的函数并通过模拟一个请求的请求。flask中的request并没有直接作为参数传递给response函数,而是作为context中的一个类似的全局变量(好像和普通的全局变量不一样,有待进一步研究)。因此,为了在flask中实现类似于django的命令行交互,需要进行一些特殊的处理,参考http://flask.pocoo.org/docs/0...。这里简单描述一下流程:main.py是我的视图文件,其中实例化了Flask对象(app),get_all是响应请求的函数之一。>>>frommain.mainimport*>>>d=app.test_request_context('shiki/?shiki=hahahahahahaha')>>>print(get_all().get_data())Traceback(最近调用最后):文件“”,第1行,在文件“E:\workbench\flasksite\main\main.py”中,第68行,在get_alldb=get_db()文件“E:\workbench\flasksite\main\main.py”,第80行,在get_dbifnothasattr(g,'db')中:文件“C:\(self._get_current_object(),name)文件“C:\\Python36\lib\site-packages\flask\globals.py",第44行,在_lookup_app_object中raiseRuntimeError(_app_ctx_err_msg)RuntimeError:Workingoutsideofapplicationcontext。这通常意味着您试图使用需要接口的功能h当前应用程序对象的一种方式。要解决此问题,请使用app.app_context()设置应用程序上下文。有关详细信息,请参阅文档。>>>d.push()>>>print(get_all().get_data())b'[\n"hahahahahahaha"\n]\n'>>>可以看到直接执行get_all会提示Workingoutsideofapplicationcontext创建一个test_request_context对象,传入url作为参数,执行push,相当于进入了context设置好了,就可以执行了。d.pop可以退出上下文。ps:貌似和使用postman相比没有什么优势,但有时候就是不想双手离开键盘...(:з」∠)9.python2,标准库urllib的区别(2)和第三方库请求...10。关于nfs配置no_root_squash:如果登录NFS主机使用共享目录的用户是root,那么他对这个共享目录有root权限!此款“极不安全”,不推荐!root_squash:如果登录NFS主机使用共享目录的用户是root,那么该用户的权限会被压缩成一个匿名用户,通常他的UID和GID会成为nfsnobody系统账户的身份。11、关于原生django(2.0.4)和rest_frameworkrest_framework中封装了data属性,通过这个统一的接口可以获取到不同请求类型的数据。官方文档如下:request.data返回请求体解析后的内容。这类似于标准的request.POST和request.FILES属性,除了:它包括所有解析的内容,包括文件和非文件输入。它支持解析除POST之外的HTTP方法的内容,这意味着你可以访问PUT和PATCH请求的内容。·支持RESTframework灵活的请求解析,而不仅仅是支持表单数据。例如,您可以像处理传入的表单数据一样处理传入的JSON数据。在Django中,request对象有request.GET和request.POST方法分别获取数据,但是POST获取不到application/json类型的请求体。json数据只能在request.body属性中获取,是bytes类型(python3),需要通过json.loads转换成字典。没有像rest_framework那样统一的接口来取各种请求类型的数据。如果你想这样做,一种解决方案是同意前端对所有请求体使用json,然后写一个中间件。类似的:try:request.DATA=json.loads(request.body)exceptjson.decoder.JSONDecodeError:xxx注意中间件不应该访问request.POST.Accessingrequest.POSTinsidemiddlewarebeforetheviewrunsorinprocess_view()will防止在中间件之后运行的任何视图能够修改请求的上传处理程序,通常应该避免。当然get和post也可以分开使用,json还有另外一个接口。似乎没有关于这一点的风格指南。直观来说,统一界面肯定方便。我的情况是公司原来的项目用的是rest_framework,我最近的任务需要独立系统。我打算纯用django。关于我们为什么使用rest_framework,参见:Whenshouldiusedjango-rest-framework?11、关于gevent.subprocess.Popengevent.subprocess.Popen使用数组作为参数时(shell=False),元素必须全部为字符串类型,否则会抛出异常---execv()arg2mustcontainonly字符串