1.理解 flask中request中form、码行data、码行json、码行values属性的码行区别
2.å¨flaskä¸ä½¿ç¨jsonifyåjson.dumpsçåºå«
3.「博客应用」使用 Flask-Login 实现用户认证
4.python多少个框架(2023年最新分享)
5.Python之Flask框架:Flask框架简介、安装、码行使用方法详细攻略
6.Python Flask + Gunicorn + Docker 的码行主图幅图指标源码大全日志输出设置
理解 flask中request中form、data、码行json、码行values属性的码行区别
在Flask中,request对象处理请求参数的码行方式各异,通过不同的码行属性如args、form、码行data和json来获取。码行这些属性的码行使用场景与HTTP请求的结构紧密相关。HTTP请求通常由请求行、码行头部和主体组成,Flask根据主体的content-type类型进行数据解析。
args属性对应的是路径中的查询参数,如"/hello?name=zs",它解析出的是一个字典对象。form属性则在请求头content-type为application/x-www-form-urlencoded或multipart/form-data时,用于处理表单数据。例如,当你通过浏览器提交表单,form存储的就是提交的表单字段,而data通常为空字符串。
当文件上传时,form表单需要指定enctype为multipart/form-data,这时files属性会包含文件信息。通过postman模拟上传文件,可以看到files属性的值包含了文件信息。
data属性在content-type不是上述两种类型(如text/plain)时有效,它会存储接收到的主体数据,但通常为byte类型。json属性在content-type为application/json时,用于处理JSON格式的数据,返回的是字典对象。
get_json()方法用于处理未指定content-type的json格式数据,当force=True时,即使没有明确指定也会进行json解析。
values属性是args和form的组合,提供了查询参数和表单数据的简洁视图。
总结来说,这些属性的有无和内容取决于请求头的content-type。查询参数在args,表单数据在form或files,非表单数据在data和json,而values则是查询参数和表单数据的合并。了解这些差异有助于更好地处理各种类型的HTTP请求。
å¨flaskä¸ä½¿ç¨jsonifyåjson.dumpsçåºå«
1.Content-Typeæåºå«
jsonifyçä½ç¨å®é ä¸å°±æ¯å°æä»¬ä¼ å ¥çjsonå½¢å¼æ°æ®åºååæ为jsonå符串ï¼ä½ä¸ºååºçbodyï¼å¹¶ä¸è®¾ç½®ååºçContent-Type为application/jsonï¼æé åºååºè¿åè³å®¢æ·ç«¯ãjsonifyçé¨åæºç å¦ä¸ï¼
def jsonify(*args, **kwargs):
if __debug__:
_assert_have_json()
return current_app.response_class(json.dumps(dict(*args, **kwargs),
indent=None if request.is_xhr else 2), mimetype='application/json')
å¯ä»¥çåºjsonifyå®é ä¸ä¹æ¯ä½¿ç¨äºjson.dumpsæ¥åºååjsonå½¢å¼çæ°æ®ï¼ä½ä¸ºååºæ£æè¿åãindent表示jsonæ ¼å¼åç缩è¿ï¼è¥æ¯Ajax请æ±åä¸ç¼©è¿ï¼å 为ä¸è¬Ajaxæ°æ®æ²¡å¿ è¦ç´æ¥å±ç¤ºï¼ï¼å¦å缩è¿2æ ¼ãä½æ³å¿ ä»ç¬¬ä¸é¨åçå®éªç»ææ们已ç»çåºæ¥äºï¼ä½¿ç¨jsonifyæ¶ååºçContent-Typeå段å¼ä¸ºapplication/jsonï¼è使ç¨json.dumpsæ¶è¯¥å段å¼ä¸ºtext/htmlãContent-Typeå³å®äºæ¥æ¶æ°æ®çä¸æ¹å¦ä½çå¾ æ°æ®ï¼å¦ä½å¤çæ°æ®ï¼å¦ææ¯application/jsonï¼åå¯ä»¥ç´æ¥å½åjson对象å¤çï¼è¥æ¯text/htmlï¼åè¿è¦å°ææ¬å¯¹è±¡è½¬å为json对象ååå¤çï¼ä¸ªäººç解ï¼æ误请ææ£ï¼ã
2.æ¥ååæ°æåºå«
jsonifyå¯ä»¥æ¥ååpythonä¸çdictæé å¨åæ ·çåæ°ï¼å¦ä¸å¾ã
èjson.dumpsæ¯jsonifyå¯ä»¥å¤æ¥ålistç±»ååä¸äºå ¶ä»ç±»åçåæ°ãä½æè¯äºä¸ä¸ï¼å½¢å¼ä¸ºkey1=value1ï¼[key2=value2,...]è¿æ ·çåæ°æ¯ä¸è¡çï¼ä¼æ¥åºâTypeError: dumps() takes exactly 1 argument (0 given)âè¿ä¸é误ï¼èjsonifyä¸ä¼æ¥é并è½æ£å¸¸è¿åæ°æ®ã
æåï¼æ们å¯ä»¥ä½¿ç¨flaskä¸çmake_responseæ¹æ³æè ç´æ¥éè¿Responseç±»ï¼éè¿è®¾ç½®mimetypeåæ°æ¥è¾¾å°å使ç¨jsonifyå·®ä¸å¤çææï¼ä½å°åç¹ä»£ç ä½ä¹èä¸ä¸ºå¢ï¼åµä¸ç®æ´ä¸ç¹æ´ä¸å®¹æåºéï¼åæ°è¶å¤è°è¯åç»´æ¤å°±è¶éº»ç¦ãå½ç¶ï¼ä½¿ç¨åªä¸ªå¹¶ä¸æ¯ç»å¯¹çï¼å¿ è¦æ¶è¦æ ¹æ®å端çæ°æ®å¤çæ¹å¼æ¥å³å®ã
「博客应用」使用 Flask-Login 实现用户认证
在 SuzyBlog 的博客应用中,我们将实现用户认证功能,使用 Flask-Login 管理用户登录和登出。首先,确保下载 SuzyBlog 的源代码,以配合本文的学习。
在前文中,虽然已经构建了博客前台,但用户登录状态的判断是基于模拟数据。接下来,我们将重点关注Admin用户的登录登出功能。
1. 安全存储用户密码
为了保护用户隐私,不能明文存储数据库中的娇喘网页源码密码。使用 werkzeug.security 提供的 generate_password_hash 函数生成散列值,通过 salt 增加随机性,即使泄露也难以逆向获取密码。Admin模型中,通过 password 特性属性和 validate_password 方法来处理这些操作。
2. 注册命令行初始化Admin
SuzyBlog 不在网页上提供注册功能,而是通过自定义命令行工具初始化Admin用户。flask init-admin 命令行允许用户输入用户名和密码,通过 click 模块的密码装饰器保护用户输入。
3. Flask-Login用户认证
在应用中,Flask-Login 被用于区分管理员(如使用admin账号登录)和普通访客。创建 LoginManager 实例,设置用户加载函数,使用current_user变量记录登录状态。用户登录后,可以在模板中轻松访问当前用户信息。
3.1 登录管理
创建login视图处理登录请求,验证用户身份。登录成功后,用户将被重定向回首页。同时,我们为模板的页脚添加了登录/登出链接,使用query参数next来记录用户来源。
3.2 登入与登出操作
login视图中,处理表单提交并验证用户信息,login_user函数用于登录,logout_user用于登出。登录后,用户ID会保存在session中,而登出则删除这些信息。
3.3 视图保护
使用@login_required装饰器保护需要登录的视图,未登录用户将被重定向至登录页面。蓝本的@before_request装饰器可以为蓝本下的所有视图提供登录保护。
至此,Flask-Login的使用帮助我们完善了用户认证流程,使得SuzyBlog的权限管理更加安全和有序。
python多少个框架(年最新分享)
导读:很多朋友问到关于python多少个框架的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!Python几种主流框架比较从GitHub中整理出的个最受欢迎的Python开源框架。这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等。\x0d\\x0d\Django:PythonWeb应用开发框架\x0d\Django应该是最出名的Python框架,GAE甚至Erlang都有框架受它影响。Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。\x0d\\x0d\Diesel:基于Greenlet的事件I/O框架\x0d\Diesel提供一个整洁的API来编写网络客户端和服务器。支持TCP和UDP。\x0d\\x0d\Flask:一个用Python编写的轻量级Web应用框架\x0d\Flask是一个使用Python编写的轻量级Web应用框架。基于WerkzeugWSGI工具箱和Jinja2\x0d\模板引擎。Flask也被称为“microframework”,因为它使用简单的django 源码加密核心,用extension增加其他功能。Flask没有默认使用的数\x0d\据库、窗体验证工具。\x0d\\x0d\Cubes:轻量级PythonOLAP框架\x0d\Cubes是一个轻量级Python框架,包含OLAP、多维数据分析和浏览聚合数据(aggregateddata)等工具。\x0d\\x0d\Kartograph.py:创造矢量地图的轻量级Python框架\x0d\Kartograph是一个Python库,用来为ESRI生成SVG地图。Kartograph.py目前仍处于beta阶段,你可以在virtualenv环境下来测试。\x0d\\x0d\Pulsar:Python的事件驱动并发框架\x0d\Pulsar是一个事件驱动的并发框架,有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。\x0d\\x0d\Web2py:全栈式Web框架\x0d\Web2py是一个为Python语言提供的全功能Web应用框架,旨在敏捷快速的开发Web应用,具有快速、安全以及可移植的数据库驱动的应用,兼容GoogleAppEngine。\x0d\\x0d\Falcon:构建云API和网络应用后端的高性能Python框架\x0d\Falcon是一个构建云API的高性能Python框架,它鼓励使用REST架构风格,尽可能以最少的力气做最多的事情。\x0d\\x0d\Dpark:Python版的Spark\x0d\DPark是Spark的Python克隆,是一个Python实现的分布式计算框架,可以非常方便地实现大规模数据处理和迭代计算。DPark由豆瓣实现,目前豆瓣内部的绝大多数数据分析都使用DPark完成,正日趋完善。\x0d\\x0d\Buildbot:基于Python的持续集成测试框架\x0d\Buildbot是一个开源框架,可以自动化软件构建、测试和发布等过程。每当代码有改变,服务器要求不同平台上的客户端立即进行代码构建和测试,收集并报告不同平台的构建和测试结果。\x0d\\x0d\Zerorpc:基于ZeroMQ的高性能分布式RPC框架\x0d\Zerorpc是一个基于ZeroMQ和MessagePack开发的远程过程调用协议(RPC)实现。和Zerorpc一起使用的ServiceAPI被称为zeroservice。Zerorpc可以通过编程或命令行方式调用。\x0d\\x0d\Bottle:微型PythonWeb框架\x0d\Bottle是一个简单高效的遵循WSGI的微型pythonWeb框架。说微型,是因为它只有一个文件,除Python标准库外,它不依赖于任何第三方模块。\x0d\\x0d\Tornado:异步非阻塞IO的PythonWeb框架\x0d\Tornado的全称是ToradoWebServer,从名字上看就可知道它可以用作Web服务器,但同时它也是一个PythonWeb的开发框架。最初是在FriendFeed公司的网站上使用,FaceBook收购了之后便开源了出来。\x0d\\x0d\webpy:轻量级的PythonWeb框架\x0d\webpy的设计理念力求精简(Keepitsimpleandpowerful),源码很简短,只提供一个框架所必须的东西,不依赖大量的第三方模块,它没有URL路由、没有模板也没有数据库的访问。\x0d\\x0d\Scrapy:Python的爬虫框架\x0d\Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。
Python中的爬虫框架有哪些呢?实现爬虫技术的编程环境有很多种,Java、Python、C++等都可以用来爬虫。但很多人选择Python来写爬虫,webhadoop项目源码为什么呢?因为Python确实很适合做爬虫,丰富的第三方库十分强大,简单几行代码便可实现你想要的功能。更重要的,Python也是数据挖掘和分析的好能手。那么,Python爬虫一般用什么框架比较好?
一般来讲,只有在遇到比较大型的需求时,才会使用Python爬虫框架。这样的做的主要目的,是为了方便管理以及扩展。本文我将向大家推荐十个Python爬虫框架。
1、Scrapy:Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。它是很强大的爬虫框架,可以满足简单的页面爬取,比如可以明确获知urlpattern的情况。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。但是对于稍微复杂一点的页面,如weibo的页面信息,这个框架就满足不了需求了。它的特性有:HTML,XML源数据选择及提取的内置支持;提供了一系列在spider之间共享的可复用的过滤器(即ItemLoaders),对智能处理爬取数据提供了内置支持。
2、Crawley:高速爬取对应网站的内容,支持关系和非关系数据库,数据可以导出为JSON、XML等。
3、Portia:是一个开源可视化爬虫工具,可让使用者在不需要任何编程知识的情况下爬取网站!简单地注释自己感兴趣的页面,Portia将创建一个蜘蛛来从类似的页面提取数据。简单来讲,它是基于scrapy内核;可视化爬取内容,不需要任何开发专业知识;动态匹配相同模板的内容。
4、newspaper:可以用来提取新闻、文章和内容分析。使用多线程,支持多种语言等。作者从requests库的简洁与强大得到灵感,使用Python开发的可用于提取文章内容的程序。支持多种语言并且所有的都是unicode编码。
5、Python-goose:Java写的文章提取工具。Python-goose框架可提取的信息包括:文章主体内容、文章主要、文章中嵌入的任何Youtube/Vimeo视频、元描述、元标签。
6、BeautifulSoup:名气大,整合了一些常用爬虫需求。它是一个可以从HTML或XML文件中提取数据的Python库。它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式.BeautifulSoup会帮你节省数小时甚至数天的工作时间。BeautifulSoup的缺点是不能加载JS。
7、画猜源码mechanize:它的优点是可以加载JS。当然它也有缺点,比如文档严重缺失。不过通过官方的example以及人肉尝试的方法,还是勉强能用的。
8、selenium:这是一个调用浏览器的driver,通过这个库你可以直接调用浏览器完成某些操作,比如输入验证码。Selenium是自动化测试工具,它支持各种浏览器,包括Chrome,Safari,Firefox等主流界面式浏览器,如果在这些浏览器里面安装一个Selenium的插件,可以方便地实现Web界面的测试.Selenium支持浏览器驱动。Selenium支持多种语言开发,比如Java,C,Ruby等等,PhantomJS用来渲染解析JS,Selenium用来驱动以及与Python的对接,Python进行后期的处理。
9、cola:是一个分布式的爬虫框架,对于用户来说,只需编写几个特定的函数,而无需关注分布式运行的细节。任务会自动分配到多台机器上,整个过程对用户是透明的。项目整体设计有点糟,模块间耦合度较高。
、PySpider:一个国人编写的强大的网络爬虫系统并带有强大的WebUI。采用Python语言编写,分布式架构,支持多种数据库后端,强大的WebUI支持脚本编辑器,任务监视器,项目管理器以及结果查看器。Python脚本控制,可以用任何你喜欢的html解析包。
python都有哪些框架?1、Django
谈到Python框架,我们第一个想到的应该就是Django。Django作为一个Python
Web应用开发框架,可以说是一个被广泛使用的全能型框架。Django的目的是为了让开发者能够快速地开发一个网站,因此它提供了很多模块。另外,Django最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构、以及全功能的管理后台。它与其他框架最大的区别就是,鲜明独特的特性,支持orm,将数据库的操作封装成为Python,对于需要适用多种数据库的应用来说是个比较好的特性。
2、Flask
Flask也被称为“microframework”,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。基于他的这个特性使用者可以花很少的成本就能够开发一个简单的网站。因此,从这个角度来讲,Flask框架非常适合初学者学习。Flask框架学会以后,我们还可以考虑学习插件的使用。
3、Scrapy
Scrapy是一个轻量级的使用Python编写的网络爬虫框架,这也是它与其他Python框架最大的区别。因为专门用于爬取网站和获取结构数据且使用起来非常的方便,Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试等等。
4、Diesel
Diesel是基于Greenlet的事件I/O框架,它提供一个整洁的API来编写网络客户端和服务器。它与其他Python框架最大的区别是支持TCP和UDP。
5、Cubes
Cubes作为一个轻量级PythonOLAP框架,包含了OLAP、多维数据分析和浏览聚合数据等工具。
6、Pulsar
Pulsar是Python的事件驱动并发框架。有了pulsar,你可以写出在不同进程或线程中运行一个或多个活动的异步服务器。
7、Tornado
Tornado全称是ToradoWebServer,仅仅从它的名字上我们就可以知道它可以用作Web服务器,但同时它也是一个Python
Web的开发框架。Tornado和现在的主流Web服务器框架和大多数Python框架有着明显的区别,它是非阻塞式服务器,而且速度相当快。而其他框架不支持异步处理。
Python有哪些好的Web框架常见的5种Web框架:
第一个:Django
Django是一个开源的Web应用框架,由Python写成,支持许多数据库引擎,可以让Web开发变得迅速和可扩展,并会不断的版本更新以匹配Python最新版本,如果是新手程序员,可以从这个框架入手。
第二个:Flask
Flask是一个轻量级的Web应用框架,使用Python编写。基于WerkzeugWSGI工具箱和JinJa2模板引擎,使用BSD授权。
Flask也被称为microframework,因为它使用简单的核心,用extension增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。
第三个:Web2py
Web2py是一个用Python语言编写的免费的开源Web框架,旨在敏捷快速的开发Web应用,具有快速、可扩展、安全以及可移植的数据库驱动的应用,遵循LGPLv3开源协议。
Web2py提供一站式的解决方案,整个开发过程都可以在浏览器上进行,提供了Web版的在线开发,HTML模板编写,静态文件的上传,数据库的编写的功能。其他的还有日志功能,以及一个自动化的admin接口。
第四个:Tornado
Tornado即是一个Webserver,同时又是一个类web.py的micro-framework,作为框架的Tornado的思想主要来源于web.PY,大家在web.PY的网站首页也可以看到Tornado的大佬Bret
Taylor的这么一段话:“[web.pyinspiredthe]WebframeworkweuseatFriendFeed[and]thewebappframeworkthatshipswithAppEngine…”,因为这层关系,后面不再单独讨论Tornado。
第五个:CherryPy
CherryPy是一个用于Python的、简单而非常有用的Web框架,其主要作用是以尽可能少的操作将Web服务器与Python代码连接,其功能包括内置的分析功能、灵活的插件系统以及一次运行多个HTTP服务器的功能,可运行在最新版本的Python、Jython、android上。
结语:以上就是首席CTO笔记为大家介绍的关于python多少个框架的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。
Python之Flask框架:Flask框架简介、安装、使用方法详细攻略
Flask框架简介
Flask是Python语言中一个轻量级的Web框架,其设计哲学强调简洁和灵活性。Flask适合初学者学习,因为它的入门门槛较低,所需学习的组件较少。Flask框架学会后,可以进一步学习插件的使用,如使用WTForm与Flask-WTForm来验证表单数据,或使用SQLAlchemy与Flask-SQLAlchemy来控制数据库。 Flask框架开发的网站实例包括果壳网。
1、各个主流框架对比
1. Django
Django是一个全面的Web框架,包含了许多常用的功能组件,如ORM、Session、Form、Admin、分页、中间件、信号、缓存等。对于需要快速开发网站的开发者,Django提供了许多便捷的模块,如内置的Admin模块,方便对数据进行操作。然而,Django的学习曲线较高,对于初学者可能有些困难。
2. Tornado
Tornado是一个性能优秀的框架,支持异步非阻塞和原生支持WebSocket协议。对于需要高并发处理的应用,Tornado是一个不错的选择。但Tornado提供的模块主要满足基本需求,对于数据库操作等需要开发者自行扩展。
3. Flask
Flask虽然在功能和性能上不如Django和Tornado,但它拥有丰富的第三方开源组件。Flask的轻量级特性使得它在小型Web应用设计中非常适用,对于大型Web应用,其组件需求可能会比较多,此时Django可能更适合。
4. Bottle
Bottle是一个简单轻量级的Web框架,但由于其API设计,使用起来可能不太方便,因此用得相对较少。
5. web2py
web2py是一个轻量级框架,性能据说很高,但扩展性一般,需要开发者自行进行扩展。
6. Quixote
Quixote的路由设计独特,性能据说也很好,豆瓣网站就是基于Quixote开发的。
总结:小型Web应用设计可以选择功能和性能均衡的Flask;大型Web应用设计则可以考虑功能丰富的Django;如果追求高性能,可以考虑Tornado。
Flask框架安装
在使用Flask之前,需要安装Werkzeug实现socket和依赖jinja2模板。安装命令如下:
pip install flask
Flask框架使用方法
启动Flask应用的示例代码如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def first_flask():
return 'Hello World'
if __name__ == '__main__':
app.run()
Python Flask + Gunicorn + Docker 的日志输出设置
项目采用了 Python Flask 框架构建 Web 服务,但日志输出存在缺陷。为确保项目需求与维护,准确的日志输出至关重要。
本文详细阐述了从开发 Flask 时的日志配置,到生产环境使用 Gunicorn 运行 Flask 的日志设置,以及使用 Docker 容器化部署的日志输出的全过程。
普通 Flask 日志设置
Flask 使用 Python 的 logging 模块实现日志记录和输出。以下是一个简单的 Flask 应用代码示例:
程序运行时,访问 http://localhost:/,命令行窗口将输出日志信息。
我们可以通过 logging 模块的输出处理器(Handler)实现标准输出、文件输出或邮件提醒。例如,添加日志文件:
访问 http://localhost:,将在当前目录下生成 flask.log 日志文件。
常见的日志文件按天分割,方便查找。同时,日志中还需记录一些必须的时间等值:
TimedRotatingFileHandler 的参数设置:
Formatter 的格式可参考 docs.python.org/2/libra...
再次访问 http://localhost:,日志文件输出将发生变化。
引入蓝图 BluePrint
在较复杂的 Flask 程序中,可能会使用 BluePrint 来拆分不同功能模块。使用 BluePrint 后的 Flask 程序,日志调用方式略有变化。
在项目目录下新建一个 api 目录,并创建 test.py。创建名为 test 的 BluePrint 对象,添加路由 /test 到其下的 show() 方法。通过 current_app 获取 Flask 应用对象,实现对 app 的引用。
修改 app.py,将 BluePrint 注册到 app 对象,并添加路由前缀 /api。
分别访问 http://localhost: 和 http://localhost:/api/test,可以看到正确的结果,日志文件将发生变化。
使用 Gunicorn 运行的 Flask 日志设置
在生产服务器上部署 Flask 时,常常使用 Gunicorn 运行。此时,日志输出存在问题,日志文件无内容写入。
Gunicorn 有自己的日志记录器,通过其机制控制日志级别。我们只能通过配置 Gunicorn 的日志设定来实现需求,并对示例应用的日志处理器进行设置调整。
修改 app.py,注意添加的 if __name__ != '__main__' 部分,在 Gunicorn 运行时让 Flask 使用其日志处理器。
参考 Gunicorn 日志设置,使用以下命令行启动 Gunicorn:
运行后,访问 http://localhost: 和 http://localhost:/api/test,将得到 gunicorn.log 日志。
使用 Gunicorn 的 --log-config FILE 选项,通过日志配置文件进行更精细的日志调整。
对日志文件进行分割
Gunicorn 自身不进行日志分割,因此可以使用 logrotate 工具实现日志分割需求。
创建 /etc/logrotate.d/gunicorn 文件:
立即执行:logrotate -f gunicorn
使用 Docker 部署 Gunicorn + Flask 应用并输出日志
在服务器上配置 Python 环境,常会遇到各种麻烦,使用现成的 Docker 镜像则方便得多,它在各种环境下的行为都能保持一致。
添加 Dockerfile、requirements.txt 和 conf/supervisor_flask.conf 文件:
Dockerfile
使用 alpine 基础镜像以减小镜像体积。使用 supervisord 在后台启动 Gunicorn + Flask。日志输出到 /var/log/flask-app 目录。
requirements.txt
注意:markupsafe 2.1.0 移除了 soft_unicode,不指定较低版本会导致 Flask 报错。
conf/supervisor_flask.conf
构建镜像、运行容器
使用以下命令构建镜像 flasktest:
运行,将日志输出目录映射到宿主机的 /home/logs 目录:
运行后,使用 docker logs -f flask 查看容器输出是否存在问题,正常的输出应为:
访问 http://localhost: 和 http://localhost:/api/test,可以在 /home/logs 目录下找到 gunicorn.log 日志,与前面的输出没有区别。
千锋教育Python Web开发—第8章 Flask——快速建站
本章介绍了Django框架进阶,目前Python web框架中讨论度较高的有Django和Flask。前两章介绍了Django,接下来将学习Flask框架。
Flask是由Armin Ronacher使用Python编写的轻量级Web框架,使用WSGI工具箱Werkzeug和模板引擎Jinja2。Flask易于学习,自带开发服务器、集成测试和调试器,建站速度非常快。
Werkzeug是Python的WSGI规范实用函数库,支持HTTP头解析、易于使用的request和response对象、基于浏览器的交互式JavaScript调试器等。Jinja2是基于Python的模板引擎,具有沙箱执行环境、HTML自动转义系统、高效执行、编译模式可选、模板继承机制、标准的调试系统等特性。
在使用Flask 0..1版本进行开发时,一定要安装Python3.3及以上版本。
由于本书使用PyCharm,其中集成包含了Flask框架,因此Flask的安装与Django大同小异。创建新项目后,在PyCharm中创建Flask项目,并设置项目地址、名称和Python解释器。
在创建好的flask1项目后,可以使用Flask输出“Hello World!”。导入Flask类,创建Flask类的实例,指定应用模块或包的名称,即可实现。
Flask中,route()装饰器将定义的函数绑定到对应的URL上。一般路由的绑定如例所示。带参数的路由可以在路径中添加变量参数、指定变量的类型、路径最后分隔符有无的区别。
HTTP访问方式包括GET、POST等,Flask中可以通过route()装饰器中的methods参数改变默认只回应GET请求的行为。
生成URL可以使用url_for()函数实现,通过函数的名称来获得与其绑定的URL。
Jinja2模板是Flask框架中的一个重要组成部分,主要包括普通内容、变量、表达式、标签和注释。Jinja2模板中的控制结构包括选择、循环、测试和宏。过滤器用于在模板渲染时进行逻辑控制,模板继承可以集中编写相同内容,便于修改。
SQLAlchemy是Python的一个ORM(对象关系映射)库,可以用于数据库操作。使用SQLAlchemy进行数据库操作包括创建数据库、映射表、数据增删改查等。
WTForm表单插件flask-wtf可以用于定义表单,并进行表单验证。在模板中编写表单,接收表单数据,并进行表单验证。
本章主要讲解了Flask框架的基础以及使用,包括路由设置、Jinja2模板、SQLAlchemy数据库插件、WTForm表单插件等知识。