韩国大型门户网站,三分钟做网站,263个人邮件入口,企业文化培训心得体会学习的灵魂是公社,学习的目标是人民自治.学习是非暴力革命方式的社会改革.学习是人民对抗资本剥夺的文明方式.学习失败了,就如同巴黎公社失败了一样.但是它为今后进行成功的社会改革指明了正确的方向.学习的逻辑并不复杂,一句话,必须让知识数量与知识价值基本吻合.管理学习也不…学习的灵魂是公社,学习的目标是人民自治.学习是非暴力革命方式的社会改革.学习是人民对抗资本剥夺的文明方式.学习失败了,就如同巴黎公社失败了一样.但是它为今后进行成功的社会改革指明了正确的方向.学习的逻辑并不复杂,一句话,必须让知识数量与知识价值基本吻合.管理学习也不复杂,就是要让学习的量稳定的波动于最小正值区间内.当然,这在管理上是非常苦难的.第一,我们必须有大量的前期积累.比如知识储备,知识变现能力,知识获取途径等等.第二,我们必须严格控制知识的滥用.知识的滥教,确保知识的数量不背离知识的价值.第三.我们必须建立强大的均输平准手段,以应对来自外部不确定的冲击.总之,要站稳立场,要确立人民主体性,就一定可以管理好知识.最后再一次向陈云等老一辈的无产阶级革命家表示敬意.
在开发时每次更改 Flask 项目代码后都需要手动重启 Flask 服务器。为了提高开发效率可以使用 Flask 的自动重载功能使 Flask 服务器能够自动检测到代码更改并自动重启。
具体实现方法如下 在 Flask 项目的入口文件中导入 werkzeug.serving 模块中的 run_simple 函数 Werkzeug 是一个 Python 的 WSGI 工具库它可以用来构建 Web 应用程序。
from werkzeug.serving import run_simple使用 run_simple 函数启动 Flask 服务器并设置 use_reloaderTrue 表示启用自动重载
from flask import Flaskapp Flask(__name__)app.route(/)
def hello():return Hello, World!if __name__ __main__:app.run(debugTrue, use_reloaderTrue)from werkzeug.wrappers import Request, ResponseRequest.application
def application(request):return Response(Hello world)if __name__ __main__:from werkzeug.serving import run_simplerun_simple(localhost, 5000, application)使用 Request.application 装饰器将 application 函数转换为一个 WSGI 应用程序。然后使用 run_simple 函数在本地的 5000 端口运行应用程序。 def run_simple(hostname, port, application, use_reloaderFalse,use_debuggerFalse, use_evalexTrue,extra_filesNone, reloader_interval1, threadedFalse,processes1, request_handlerNone, static_filesNone,passthrough_errorsFalse, ssl_contextNone):# 这方法还是比较短的但是注释写得很详细由于篇幅问题就把源码中的注释省略了if use_debugger:from werkzeug.debug import DebuggedApplicationapplication DebuggedApplication(application, use_evalex)if static_files:from werkzeug.wsgi import SharedDataMiddlewareapplication SharedDataMiddleware(application, static_files)def inner():make_server(hostname, port, application, threaded,processes, request_handler,passthrough_errors, ssl_context).serve_forever()if os.environ.get(WERKZEUG_RUN_MAIN) ! true:display_hostname hostname ! * and hostname or localhostif : in display_hostname:display_hostname [%s] % display_hostname_log(info, * Running on %s://%s:%d/, ssl_context is Noneand http or https, display_hostname, port)if use_reloader:# Create and destroy a socket so that any exceptions are raised before# we spawn a separate Python interpreter and lose this ability.test_socket socket.socket(socket.AF_INET, socket.SOCK_STREAM)test_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)test_socket.bind((hostname, port))test_socket.close()run_with_reloader(inner, extra_files, reloader_interval)else:inner()模板渲染 虽然 jinja2 是一个单独的库但是由于 flask 依赖了jinja2所以不必单独安装。 from flask import render_template使用 app.route(/template)def template(): # put applications code here// 渲染return render_template(demo.html)动态渲染 还是使用 jinja2 的 render_template 通过blog_id 与 HTML中 {{ blog_id }} 关联 app.route(/template/blog/blog_id)def template(blog_id): # put applications code herereturn render_template(demo.html, blog_idblog_id)!DOCTYPE htmlhtml langenheadmeta charsetUTF-8 /titleTitle/title/headbodya hrefwww.baidu.com百度/adiv classheader这里是博客{{ blog_id }}/div/body/html支持其他类型的传参 app.route(/template/blog/blog_id)def template(blog_id): # put applications code hereuesr User(lijiajun, wy15195382735163.com)person {username: zhangsan,email: zhangsan的email}return render_template(demo.html, blog_idblog_id, useruesr, personperson)demo.html !DOCTYPE htmlhtml langenheadmeta charsetUTF-8 /titleTitle/title/headbodya hrefwww.baidu.com百度/adiv classheader这里是博客{{ blog_id }}/divdiv{{ user }}/divdiv{{ user.username }}/divdiv{{ user.email }}/divdiv{{ person.username }}/divdiv{{ user.email }}/div/body/html使用过滤器 使用管道符号 | 即可。 div{{ user.email | length }}/div
自定义过滤器 def filter(value):return value.upper()# 增加过滤器app.add_template_filter(filter, filter)div{{ user.email | filter }}/divjinja2的语句 div{% if age 18 %}可以进入 {% endif %} {% if age 18 %} 禁止进入{% endif %}
/divdiv{% for foo in age %}{% endfor %}
/div组件传参 demo.html !DOCTYPE htmlhtml langenheadmeta charsetUTF-8 /titletest/title/headbodydiv{% extends component.html %} {% block content %} 我是传过来的内容 {%endblock %} {% block title %} 我是传过来的标题 {% endblock %}/div/body/htmlcomponent.html !DOCTYPE htmlhtml langenheadmeta charsetUTF-8 /title这是一个组件/title/headbody这是一个组件 {% block title %}{% endblock %} {% block content %}{% endblock%}/body/html加载图片 bodydivimg src{{ url_for(static,filenameimage.png) }} alt //div/body加载Css文件 headmeta charsetUTF-8 /titletest/titlelink relstylesheet href{{ url_for(static,filenamedemo.css) }} //head加载Js文件 script src{{ url_for(static,filenamedemo.js)}}/scriptflask 连接 数据库 pip install pymysql我们不会直接使用这个包去操作数据库因为需要写原生的SQL语句我们最好使用 orm。 所以我们还需要下一个 pip install flask-sqlalchemysqlalchemy 给我们提供了 orm 的技术可以让我们像操作普通对象一样去操作数据库。 这个需要额外安装因为 flask 没有这个依赖。
from flask_sqlalchemy import SQLAlchemy创建SQLAlchemy实例对象命名为db将flask的实例对象app作为参数传给SQLAlchemy将db和app联系起来可以调用其相关功能
db SQLAlchemy(app)使用gunicorn启动flask
gunicorn app:app -c gunicorn.conf.py gun.log 21 一 Gunicorn是基于unix系统被广泛应用的高性能的Python WSGI HTTP Server。用来解析HTTP请求的网关服务。 它通常是在进行反向代理如nginx或者进行负载均衡如 AWS ELB和一个web 应用比如 Django 或者 Flask之间。 它的运行模型基于pre-fork worker 模型即就是支持eventlet也支持greenlet。
二、gunicorn特点 其特点1、能和大多数的Python Web框架兼容 2、简单易上手 3、轻量级的资源消耗 4、目前gunicorn只能运行在Linux环境中不支持windows平台
gunicorn -w 5 -b 0.0.0.0:6000 main:app解释下参数含义
-w 表示工作进程数 -b 访问地址和端口 main flask启动python文件名 app 脚本中创建的Flask对象名
from flask import Flaskapp Flask(__name__)app.route(/,methods[GET])
def hello_world():return Hello World!if __name__ __main__:app.run(host0.0.0.0, port6000)也可以根据文件启动 gunicorn -c config.py main:appcat config.py
# 是否开启debug模式
debug True
# 访问地址
bind 0.0.0.0:6000
# 工作进程数
workers 2
# 工作线程数
threads 2
# 超时时间
timeout 600
# 输出日志级别
loglevel debug
# 存放日志路径
pidfile log/gunicorn.pid
# 存放日志路径
accesslog log/access.log
# 存放日志路径
errorlog log/debug.log
# gunicorn apscheduler场景下解决多worker运行定时任务重复执行的问题
preload_app True-c CONFIG : CONFIG,配置文件的路径通过配置文件启动生产环境使用-b ADDRESS : ADDRESSip加端口绑定运行的主机-w INT, --workers INT用于处理工作进程的数量为正整数默认为1-k STRTING, --worker-class STRTING要使用的工作模式默认为sync异步可以下载eventlet和gevent并指定--threads INT处理请求的工作线程数使用指定数量的线程运行每个worker。为正整数默认为1。--worker-connections INT最大客户端并发数量默认情况下这个值为1000。--backlog int未决连接的最大数量即等待服务的客户的数量。默认2048个一般不修改-p FILE, --pid FILE设置pid文件的文件名如果不设置将不会创建pid文件--access-logfile FILE 要写入的访问日志目录--access-logformat STRING要写入的访问日志格式--error-logfile FILE, --log-file FILE 要写入错误日志的文件目录。--log-level LEVEL 错误日志输出等级。--limit-request-line INT HTTP请求头的行数的最大大小此参数用于限制HTTP请求行的允许大小默认情况下这个值为4094。值是0~8190的数字。--limit-request-fields INT 限制HTTP请求中请求头字段的数量。此字段用于限制请求头字段的数量以防止DDOS攻击默认情况下这个值为100这个值不能超过32768--limit-request-field-size INT 限制HTTP请求中请求头的大小默认情况下这个值为8190字节。值是一个整数或者0当该值为0时表示将对请求头大小不做限制-t INT, --timeout INT超过这么多秒后工作将被杀掉并重新启动。一般设定为30秒--daemon 是否以守护进程启动默认false--chdir 在加载应用程序之前切换目录--graceful-timeout INT默认情况下这个值为30在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死一般使用默认--keep-alive INT在keep-alive连接上等待请求的秒数默认情况下值为2。一般设定在1~5秒之间。--reload默认为False。此设置用于开发每当应用程序发生更改时都会导致工作重新启动。--spew打印服务器执行过的每一条语句默认False。此选择为原子性的即要么全部打印要么全部不打印--check-config 显示现在的配置默认值为False即显示。-e ENV, --env ENV 设置环境变量
文章转载自: http://www.morning.lfxcj.cn.gov.cn.lfxcj.cn http://www.morning.nyplp.cn.gov.cn.nyplp.cn http://www.morning.yfcyh.cn.gov.cn.yfcyh.cn http://www.morning.kbntl.cn.gov.cn.kbntl.cn http://www.morning.tongweishi.cn.gov.cn.tongweishi.cn http://www.morning.bklkt.cn.gov.cn.bklkt.cn http://www.morning.lbpfl.cn.gov.cn.lbpfl.cn http://www.morning.swkzr.cn.gov.cn.swkzr.cn http://www.morning.jntdf.cn.gov.cn.jntdf.cn http://www.morning.nnwmd.cn.gov.cn.nnwmd.cn http://www.morning.qhtlq.cn.gov.cn.qhtlq.cn http://www.morning.mftzm.cn.gov.cn.mftzm.cn http://www.morning.fqklt.cn.gov.cn.fqklt.cn http://www.morning.xknmn.cn.gov.cn.xknmn.cn http://www.morning.nlpbh.cn.gov.cn.nlpbh.cn http://www.morning.lcxzg.cn.gov.cn.lcxzg.cn http://www.morning.mgwpy.cn.gov.cn.mgwpy.cn http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.gtmdq.cn.gov.cn.gtmdq.cn http://www.morning.hgcz.cn.gov.cn.hgcz.cn http://www.morning.zfqdt.cn.gov.cn.zfqdt.cn http://www.morning.qwdqq.cn.gov.cn.qwdqq.cn http://www.morning.qyhcg.cn.gov.cn.qyhcg.cn http://www.morning.hzqjgas.com.gov.cn.hzqjgas.com http://www.morning.wchcx.cn.gov.cn.wchcx.cn http://www.morning.yfwygl.cn.gov.cn.yfwygl.cn http://www.morning.sxfmg.cn.gov.cn.sxfmg.cn http://www.morning.mbbgk.com.gov.cn.mbbgk.com http://www.morning.rfzzw.com.gov.cn.rfzzw.com http://www.morning.xnymt.cn.gov.cn.xnymt.cn http://www.morning.kybyf.cn.gov.cn.kybyf.cn http://www.morning.gryzk.cn.gov.cn.gryzk.cn http://www.morning.zsfooo.com.gov.cn.zsfooo.com http://www.morning.fddfn.cn.gov.cn.fddfn.cn http://www.morning.grpbt.cn.gov.cn.grpbt.cn http://www.morning.wgbmj.cn.gov.cn.wgbmj.cn http://www.morning.mznqz.cn.gov.cn.mznqz.cn http://www.morning.qxmys.cn.gov.cn.qxmys.cn http://www.morning.cgntj.cn.gov.cn.cgntj.cn http://www.morning.nzlsm.cn.gov.cn.nzlsm.cn http://www.morning.xrftt.cn.gov.cn.xrftt.cn http://www.morning.qxgmp.cn.gov.cn.qxgmp.cn http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn http://www.morning.mfzyn.cn.gov.cn.mfzyn.cn http://www.morning.yppln.cn.gov.cn.yppln.cn http://www.morning.plkrl.cn.gov.cn.plkrl.cn http://www.morning.fylsz.cn.gov.cn.fylsz.cn http://www.morning.jzbjx.cn.gov.cn.jzbjx.cn http://www.morning.cgdyx.cn.gov.cn.cgdyx.cn http://www.morning.zfcfx.cn.gov.cn.zfcfx.cn http://www.morning.btwrj.cn.gov.cn.btwrj.cn http://www.morning.vaqmq.cn.gov.cn.vaqmq.cn http://www.morning.bwhcl.cn.gov.cn.bwhcl.cn http://www.morning.c7510.cn.gov.cn.c7510.cn http://www.morning.c7622.cn.gov.cn.c7622.cn http://www.morning.wjplr.cn.gov.cn.wjplr.cn http://www.morning.zypnt.cn.gov.cn.zypnt.cn http://www.morning.zcnwg.cn.gov.cn.zcnwg.cn http://www.morning.bgbnc.cn.gov.cn.bgbnc.cn http://www.morning.chmkt.cn.gov.cn.chmkt.cn http://www.morning.ttcmdsg.cn.gov.cn.ttcmdsg.cn http://www.morning.fthcn.cn.gov.cn.fthcn.cn http://www.morning.sbpt.cn.gov.cn.sbpt.cn http://www.morning.jcbjy.cn.gov.cn.jcbjy.cn http://www.morning.yqkmd.cn.gov.cn.yqkmd.cn http://www.morning.webife.com.gov.cn.webife.com http://www.morning.lkbyq.cn.gov.cn.lkbyq.cn http://www.morning.yjmns.cn.gov.cn.yjmns.cn http://www.morning.sqlh.cn.gov.cn.sqlh.cn http://www.morning.mhnb.cn.gov.cn.mhnb.cn http://www.morning.rwqj.cn.gov.cn.rwqj.cn http://www.morning.srgyj.cn.gov.cn.srgyj.cn http://www.morning.xqwq.cn.gov.cn.xqwq.cn http://www.morning.cnfjs.cn.gov.cn.cnfjs.cn http://www.morning.tlpgp.cn.gov.cn.tlpgp.cn http://www.morning.mjbkp.cn.gov.cn.mjbkp.cn http://www.morning.mjqms.cn.gov.cn.mjqms.cn http://www.morning.pqbkk.cn.gov.cn.pqbkk.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.brxzt.cn.gov.cn.brxzt.cn