1.Python - 一文入门Flask(Blueprint、码学SQLAlchemy部分)
2.djangoåflaskå
å¦åªä¸ª(pythondjangoåflask)
3.关于flask的码学jsonify与json.dumps的一些追溯和思考
4.Python Flask 开发,Flask 的码学 Swagger 神器 —— Flask-RESTX
Python - 一文入门Flask(Blueprint、SQLAlchemy部分)
本文将简要介绍如何入门Flask,码学包括安装准备、码学路由实现、码学android十二星座源码Blueprint和SQLAlchemy的码学实践。首先,码学从安装Flask和pipenv开始,码学然后逐步构建项目结构,码学实现Web路由功能和数据库操作。码学
在PyCharm的码学环境配置部分,这里主要关注代码实现,码学而不是码学环境设置。在项目实践中,码学Flask的vuecode源码核心是通过App初始化时绑定Blueprint实现路由。首先,创建一个入口文件,负责实例化App并初始化配置、控制器和数据库。
启动文件中,需要进行判断逻辑的引入,这是为了优化程序运行。Flask路由功能是通过蓝图实现的,需要在入口文件中注册蓝图。每个路由器可以使用装载器优化,如在api文件中的示例所示。
完成路由后,我们转向数据库操作,Flask推荐使用SQLAlchemy处理。安装Flask-SQLAlchemy和PyMySQL,springbootvue源码便于与MySQL数据库的交互。定义数据库操作的基类和公共方法,减少代码重复。
在入口文件中,通过SQLALCHEMY_DATABASE_URI配置数据库连接,使用with关键字确保资源的正确管理和释放。在model模块中,定义模型、常量和数据库操作方法,这些在路由中会被使用。
关于SQLAlchemy的Mysql编码和列类型,可能需要进行一些优化,包括默认值、索引设置和兼容不同列类型。Python源码提供了详细的cglab源码设置指导,例如TinyINT类型和VARCHAR的使用。
最后,自定义数据库名和字符集编码时,可以使用__tablename__和字符集设置。编程中,阅读源码注释和示例可以帮助更好地理解和学习。
djangoåflaskå å¦åªä¸ª(pythondjangoåflask)
导读ï¼ä»å¤©é¦å¸CTOç¬è®°æ¥ç»åä½åäº«å ³äºdjangoåflaskå å¦åªä¸ªçç¸å ³å 容ï¼å¦æè½ç¢°å·§è§£å³ä½ ç°å¨é¢ä¸´çé®é¢ï¼å«å¿äºå ³æ³¨æ¬ç«ï¼ç°å¨å¼å§å§ï¼pythonæ¾å·¥ä½æ¯å¦Django好è¿æ¯Flask好ï¼è¿ä¿©é½æºç®åçï¼Djangoåflaské½å¦ä¸ä¸æ¯è¾å¥½ï¼Pythonåºç¡ä¹å¾éè¦ãè¿ä¿©å¦å¥½äºï¼å·¥ä½ä¸æï¼èªèµè¿æ¯çå ·ä½æ åµã
æ³å¦ä¹ Pythonåå°å¼åï¼è¦å¦ä½å¼å§ï¼FlaskåDjangoè¿ä¸¤ä¸ªä¸è¥¿å ·ä½æ¯ä»ä¹ï¼
å å¦pythonè¯æ³ãå¨å¦djangoæ¡æ¶ã
djangoæ¯å¥ï¼æ¯ä¸ªMTVæ¡æ¶ãtæ¯HTMLï¼vï¼viewï¼æ¯ç¨æ¥ç®¡çé£äºå 容è¦ä¼ å°tï¼templateï¼éï¼è¿è¡å端æ¾ç¤ºãmï¼modelï¼æ¯æ°æ®åºï¼åæ°æ®ç¨çãè¿ä¸ªæ¨¡å¼å¯ä»¥æç¹æçåå端åå¼ç®¡çï¼æ´æ¹ä¾¿é«æãå¦æ没ædjangoï¼ä½ ä¹å¯ä»¥èªå·±ååå端ï¼ä½æ¯è¦åå¾å¤åå端å端ä¹å¤çå·¥ä½ï¼è¿ç§ç½éå§å¦çäºæ å¤äºï¼å°±ä¼æ人é ä¸ä¸ªè½®åï¼æè¿äºä½å¤çå·¥ä½åäºï¼å¤§å®¶æ¿æ¥ç´æ¥åäºæ 就好äºã
flaskä¹æ¯ä¸ä¸ªæ¡æ¶ï¼è·djangoä¸ä¸ªææãä½æ¯æ没ç¨è¿ï¼ä¸å¥½è¯ä»·ã
Pythonä¸å¤§webæ¡æ¶åå«æ¯ä»ä¹åªä¸ªæ´å¥½ã导读ãç®åï¼Pythonæ¯è¾ç«çä¸å¤§webæ¡æ¶æDjangoãFlaskåTornadoï¼è¦è®ºè¿ä¸ä¸ªWebæ¡æ¶åªä¸ªæ´å¥½çè¯ï¼å»ºè®®ä¸ç¹ï¼Django帮æ们äºå æ建äºå¥½å¤ï¼ä¸æä¼å¿«ä¸äºï¼å¦ä¹ çè¯å¯ä»¥å ä»Djangoå¦èµ·ï¼ç¶ååå¦ä¹ FlaskåTornadoï¼ä¸é¢æ们就æ¥å ·ä½äºè§£ä¸ä¸Pythonä¸å¤§webæ¡æ¶ç详æ ã
1ãDjango
Djangoæ¯ä¸ä¸ªå¼æ¾æºä»£ç çWebåºç¨æ¡æ¶ï¼ç±Pythonåæãéç¨äºMTVçæ¡æ¶æ¨¡å¼ï¼å³æ¨¡åMï¼æ¨¡æ¿Tåè§å¾Vãå®æåæ¯è¢«å¼åæ¥ç¨äºç®¡çå³ä¼¦æ¯åºçéå¢æä¸çä¸äºä»¥æ°é»å 容为主çç½ç«çï¼å³æ¯CMS(å 容管çç³»ç»)软件ã
2ãFlask
Flaskæ¯ä¸ä¸ªä½¿ç¨Pythonç¼åçè½»é级Webåºç¨æ¡æ¶ãå ¶WSGIå·¥å ·ç®±éç¨Werkzeugï¼æ¨¡æ¿å¼æå使ç¨Jinja2
ãFlask使ç¨BSDææã
Flaskä¹è¢«ç§°ä¸ºâmicroframeworkâï¼å 为å®ä½¿ç¨ç®åçæ ¸å¿ï¼ç¨extension
å¢å å ¶ä»åè½ãFlask没æé»è®¤ä½¿ç¨çæ°æ®åºãçªä½éªè¯å·¥å ·ã
Flaskå¾è½»ï¼è±å¾å°çææ¬å°±è½å¤å¼åä¸ä¸ªç®åçç½ç«ãé常éååå¦è å¦ä¹ ãFlaskæ¡æ¶å¦ä¼ä»¥åï¼å¯ä»¥èèå¦ä¹ æ件ç使ç¨ãä¾å¦ä½¿ç¨WTForm+
Flask-WTFormæ¥éªè¯è¡¨åæ°æ®ï¼ç¨SQLAlchemy+Flask-SQLAlchemyæ¥å¯¹ä½ çæ°æ®åºè¿è¡æ§å¶ã
3ãTornado
Tornadoæ¯ä¸ç§Webæå¡å¨è½¯ä»¶çå¼æºçæ¬ãTornadoåç°å¨ç主æµWebæå¡å¨æ¡æ¶(å æ¬å¤§å¤æ°Python
çæ¡æ¶)æçææ¾çåºå«ï¼å®æ¯éé»å¡å¼æå¡å¨ï¼èä¸é度ç¸å½å¿«ã
å¾å©äºå ¶éé»å¡çæ¹å¼å对epollçè¿ç¨ï¼Tornadoæ¯ç§å¯ä»¥å¤çæ°ä»¥å计çè¿æ¥ï¼å æ¤Tornadoæ¯å®æ¶Webæå¡çä¸ä¸ª
çæ³æ¡æ¶ã
å ³äºPythonä¸å¤§webæ¡æ¶çç®åä»ç»ï¼å°±ç»å¤§å®¶å享å°è¿éäºï¼å½ç¶å¦ä¹ æ¯æ°¸æ æ¢å¢çï¼å¦ä¹ ä¸é¡¹æè½æ´æ¯åçç»èº«ï¼æ以ï¼åªè¦è¯åªåå¦ï¼ä»ä¹æ¶åå¼å§é½ä¸æï¼å¸æ大家æç´§æ¶é´è¿è¡å¦ä¹ å§ã
ä¼äºdjangoè¿æå¿ è¦å¦flaskåä¸ãæ´ä½è®¾è®¡æ¹é¢
é¦å ï¼ä¸¤è é½æ¯é常ä¼ç§çæ¡æ¶ãæ´ä½æ¥è®²ï¼ä¸¤è 设计çå²å¦æ¯åºå«æ大çå°æ¹ã
Djangoæä¾ä¸ç«å¼ç解å³æ¹æ¡ï¼ä»æ¨¡æ¿ãORMãSessionãAuthenticationççé½åé 好äºï¼è¿appååé½å好äºï¼æ»ä¹ï¼ä¸ºä½ åå°½éå¤çäºæ ï¼èä¸è¿æä¸ä¸ªkiller级çç¹æ§ï¼å°±æ¯å®çadminï¼é ådjango-suitï¼åå°å°±åºæ¥äºï¼å ¶å®æåDjangoå°±æ¯ç±å¨æ°é»åå¸å ¬å¸å·¥ä½ç人设计çã
Flaskåªæä¾äºä¸äºæ ¸å¿åè½ï¼é常ç®æ´ä¼é ãå®æ¯ä¸ä¸ªå¾®æ¡æ¶ï¼å ¶ä»çç±æ©å±æä¾ï¼ä½å®çblueprint使å®ä¹è½å¤å¾æ¹ä¾¿çè¿è¡æ°´å¹³æ©å±ã
äºãè·¯ç±è®¾è®¡
Djangoçè·¯ç±è®¾è®¡æ¯éç¨éä¸å¤ççæ¹æ³ï¼å©ç¨æ£åå¹é ãFlaskä¹è½è¿ä¹åï¼ä½æ´å¤çæ¯ä½¿ç¨è£ 饰å¨çå½¢å¼ï¼è¿ä¸ªæä¼ç¹ä¹æ缺ç¹ï¼ä¼ç¹æ¯è¯»æºç æ¶çå°å½æ°å°±ç¥éæä¹ç¨çï¼ç¼ºç¹æ¯ä¸æ¦æºç æ¯è¾é¿ï¼ä½ è¦æ¥è·¯ç±å°±ä¸å¤ªæ¹ä¾¿äºï¼ä½è¿ä¹ä¿ä½¿ä½ å»æèå¦ä½æ´åççå®æ代ç ã
ä¸ãåºç¨æ¨¡åå设计
Djangoç模ååæ¯éæå¨å½ä»¤éçï¼ä¹å°±æ¯è¯´ä¸å¼å§Djangoçç®æ å°±æ¯ä¸ºä»¥åç©å¤§äºååå¤çãæ¯ä¸ªé½æ¯ä¸ä¸ªç¬ç«ç模åï¼ä¸ºä»¥åçå¤ç¨æä¾äºä¾¿å©ã
Flaskéè¿Blueprintæ¥æä¾æ¨¡ååï¼èªå·±å¯¹é¡¹ç®ç»æååæä¸åç模åè¿è¡ç»ç»ã
åãé ç½®
Djangoçé 置主è¦è¿æ¯é settings.pyæ¥åï¼å½ç¶ä¸ºäºDevelopmentåProductionç¯å¢å离ï¼è¿æä¸äºæ¹æ³æ¥å¤çé ç½®ã
Flaskçé ç½®å¾çµæ´»ï¼æå¤ç§æ¹æ³é ç½®ï¼ä¸åç¯å¢çé ç½®ä¹é常æ¹ä¾¿ã
äºãææ¡£
两è é½æä¾äºè¯¦å°½çææ¡£ï¼Flaskçææ¡£é£æ ¼å¾åæ个人å好ï¼Djangoçææ¡£ä¹é常ä¼ç§ï¼å½æ¶ç¨å¦Djangoæ¶ï¼å°±æ¯åªçäºDjangoçææ¡£ã
å ã社åº
Django社åºå¾å¤§ï¼åç§æ件å¾é½å ¨ï¼å¤§é¨åæ åµä¸ä½ é½è½æ¾å°ä½ æ³è¦çã
Flaskèµ·æ¥æï¼ä½ç¤¾åºä¹ä¸å°ï¼ä¹åæä¸æ¬¡çå¨githubä¸çstaræ°ï¼ä¸¤ä¸ªç¸å·®å¹¶ä¸è¿ï¼è¯´æè¶æ¥è¶å¤çäººå ³æ³¨å®ï¼è½ç¶æ件没é£ä¹å ¨ï¼ä½å¸¸ç¨çè¿é½æ¯æçï¼èä¸è´¨éé½æ¯è¾é«ã
æåå次说ä¸ä¸ï¼ä¸¤ä¸ªé½æ¯é常ä¼ç§çæ¡æ¶ï¼å¾å¤æ¶åéç¨è¿äºæ¡æ¶æ¯æ ¹æ®å®é 项ç®ä¾§éä¸åæ¥éç:-)
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶æ´ççå ³äºdjangoåflaskå å¦åªä¸ªçå ¨é¨å 容äºï¼æè°¢æ¨è±æ¶é´é 读æ¬ç«å 容ï¼å¸æ对æ¨ææ帮å©ï¼æ´å¤å ³äºdjangoåflaskå å¦åªä¸ªçç¸å ³å 容å«å¿äºå¨æ¬ç«è¿è¡æ¥æ¾åã
关于flask的jsonify与json.dumps的一些追溯和思考
有一天,我遇到了一个服务器报警问题,追踪错误栈时,发现是由于在使用 Flask 的 jsonify 函数时传入的字典中混入了 string 和 int 类型的键导致的。修改数据后,我开始思考这一设计背后的逻辑以及为何会如此设定。源码追溯路径指向 JSONDecoder、flask.json.__init__.py 及 _dump_arg_defaults。分析这部分源码,刻录源码我发现项目使用的是继承自 Flask 的 JSONDecoder,稍作修改以兼容如 bson.ObjectId 和 datetime 等数据类型,其主体基于标准库中的 JSONEncoder。
进一步深入 JSONEncoder 的源码,我发现 sort_keys 的使用在 JSONEncoder._iterencode_dict 中。此时,我开始思考是否可以修改为始终使用默认的 False,以确保 key 为纯字符串。然而,官方为何没有选择这一方案?我开始在 GitHub 上寻找答案,最终在 issue 中找到了线索。在 Python 2 中确实如我所想,但在 Python 3 中,设计发生了改变。大佬们解释了背后的理由。
深入思考后,我倾向于支持 Python 3 的设计选择。首先,明确数据处理逻辑(如是否排序)是至关重要的。这里,我认为 Flask 的默认设置为 False 是个错误,应该与标准库保持一致。其次,确保数据类型的一致性是动态语言的局限性之一,这也是我越来越偏爱 Go 的原因。
从工作角度来看,我得出以下思考:永远不要依赖传入的数据,务必进行验证,尤其是在关键业务中。这不仅是对 Flask 设计的反思,也是对编程实践的提醒,强调了数据验证和明确数据处理逻辑的重要性。
Python Flask 开发,Flask 的 Swagger 神器 —— Flask-RESTX
在构建Python Web应用时,Flask是一个轻量级的选择,它允许开发者以最小的投入快速搭建应用。而当涉及到构建RESTful API时,Flask-RESTX库提供了方便的方法来定义、编写和查看API文档。
Flask-RESTX是Flask框架的扩展,集成Swagger,这是一个强大的API文档工具。Swagger规范和完整框架用于生成、描述、调用和可视化RESTfulWeb服务的API文档。
安装Flask-RESTX很简单,通过pip命令即可完成。确保Flask已经在开发环境中安装,若未安装,使用相应命令进行安装。
快速开始,创建简单Flask应用并引入Flask-RESTX。这里有个例子,实现一个简单的API,包含一个HelloWorld资源类,提供GET请求响应。使用@api.expect('name')装饰器指定期望参数。
定义API文档时,使用装饰器和注解。文档自动出现在Swagger用户界面中。定义期望参数,使用api.expect装饰器。定义数据模型,使用api.model方法。模型可在API资源中使用。
Flask-RESTX提供高级功能,例如异常处理、错误处理器等。通过Flask错误处理机制定义异常处理器,返回适当HTTP状态码和错误信息。
Flask-RESTX的官方社区活跃在GitHub上,提供源代码和问题跟踪器。社区成员分享使用经验和最佳实践,解决遇到问题。
总结,Flask-RESTX是Flask框架的强大扩展,集成Swagger提供丰富的API文档支持,易于设计、实现和维护RESTfulAPI。无论是初学者还是有经验的开发者,都能从Flask-RESTX的易用性和强大功能中受益。
通过本文了解,已具备构建Flask应用的基础知识。实践是学习的最好方式,动手尝试,创建自己的Flask应用吧!