1.「博客应用」使用 Flask-Login 实现用户认证
2.Python Web | Flask使用Flask-SQLAlchemy对数据库操作详解二(增删改查操作)
3.djangoåflaskåªä¸ªå¥½å¦ï¼
4.Flask项目配置(Configuration)
5.flask是个个人什么意思
6.使用Flask-Avatars在Flask项目里设置头像
「博客应用」使用 Flask-Login 实现用户认证
在 SuzyBlog 的博客应用中,我们将实现用户认证功能,人博使用 Flask-Login 管理用户登录和登出。客源首先,实现确保下载 SuzyBlog 的博客源代码,以配合本文的个个人kettle源码架构学习。
在前文中,人博虽然已经构建了博客前台,客源但用户登录状态的实现判断是基于模拟数据。接下来,博客我们将重点关注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中,而登出则删除这些信息。exception源码类 java
3.3 视图保护
使用@login_required装饰器保护需要登录的视图,未登录用户将被重定向至登录页面。蓝本的@before_request装饰器可以为蓝本下的所有视图提供登录保护。
至此,Flask-Login的使用帮助我们完善了用户认证流程,使得SuzyBlog的权限管理更加安全和有序。
Python Web | Flask使用Flask-SQLAlchemy对数据库操作详解二(增删改查操作)
Flask,作为Python轻型Web框架,以其易用性被广泛用于构建小型到中型应用。它包含基础开发功能,如路由、请求处理和模板渲染等。本文将深入讲解Flask-SQLAlchemy中的数据库操作,包括增删改查的详细步骤。数据库操作详解
1. 增加数据
Flask-SQLAlchemy中,你可以使用add()方法添加新数据,或者利用create()方法创建完整的数据对象。2. 查询数据
查询数据是通过db.session.query()方法实现的,支持多种操作,如查询所有记录、条件查询、最新棋牌网页源码排序和分页。3. 更新数据
修改数据时,通过commit()方法提交db.session对象的更改,包括单个对象更新和批量更新。4. 删除数据
删除操作同样使用db.session,delete()方法可用来删除单个对象或批量数据。额外知识点
数据迁移可以通过migrate工具完成,具体实践可通过GitHub上的示例学习,如[Flask+mysql问答网站](Flask+mysql简单问答网站_Chenasuny的博客-CSDN博客)和[QHCV/Flask_Book_Manage](GitHub - QHCV/Flask_Book_Manage)。参考资源
深入理解Flask-SQLAlchemy,可以参考[flask(十六):数据库(四)]_小小小小人ksh的博客-CSDN博客,以及官方文档:中文版-Flask-SQLAlchemy 2.0 documentation,英文版-Flask-SQLAlchemy Documentation (3.0.x)。 如果你在学习过程中遇到问题,欢迎在评论区交流分享。djangoåflaskåªä¸ªå¥½å¦ï¼
导读ï¼å¾å¤æåé®å°å ³äºdjangoåflaskåªä¸ªå¥½å¦çç¸å ³é®é¢ï¼æ¬æé¦å¸CTOç¬è®°å°±æ¥ä¸ºå¤§å®¶å个详ç»è§£çï¼ä¾å¤§å®¶åèï¼å¸æ对大家ææ帮å©ï¼ä¸èµ·æ¥ççå§ï¼pythonæ¾å·¥ä½æ¯å¦Django好è¿æ¯Flask好ï¼è¿ä¿©é½æºç®åçï¼Djangoåflaské½å¦ä¸ä¸æ¯è¾å¥½ï¼Pythonåºç¡ä¹å¾éè¦ãè¿ä¿©å¦å¥½äºï¼å·¥ä½ä¸æï¼èªèµè¿æ¯çå ·ä½æ åµã
DjangoåFlaskæ¯è¾å°åºåªä¸ªæ¯è¾å¥½ç¨
Flaskæ¯å°èç²¾çå¾®æ¡æ¶ï¼å®ä¸åDjangoé£æ ·å¤§èå ¨ï¼å¦æ使ç¨Flaskå¼åï¼å¼åè éè¦èªå·±å³å®ä½¿ç¨åªä¸ªæ°æ®åºORMã模åç³»ç»ãç¨æ·è®¤è¯ç³»ç»çï¼éè¦èªå·±ç»æã
ä¸éç¨Djangoå¼å对æ¯ï¼å¼åè å¨é¡¹ç®å¼å§çæ¶åå¯è½éè¦è±è´¹æ´å¤çæ¶é´å»äºè§£ãæéå个ç»ä»¶ï¼å æ¤Flaskå¼åççµæ´»åº¦æ´é«ï¼å¼åè å¯ä»¥æ ¹æ®èªå·±çéè¦å»éæ©åéçæ件ã
å½ç¶Flaskåå²ç¸å¯¹è¾çï¼ç¬¬ä¸æ¹APPèªç¶æ²¡æ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æ¡æ¶çç®åä»ç»ï¼å°±ç»å¤§å®¶å享å°è¿éäºï¼å½ç¶å¦ä¹ æ¯æ°¸æ æ¢å¢çï¼å¦ä¹ ä¸é¡¹æè½æ´æ¯åçç»èº«ï¼æ以ï¼åªè¦è¯åªåå¦ï¼ä»ä¹æ¶åå¼å§é½ä¸æï¼å¸æ大家æç´§æ¶é´è¿è¡å¦ä¹ å§ã
为ä»ä¹æç¨Flaskï¼èä¸æ¯Djangoæ个人工ä½æ¯ç¨ASP.NETMVCãããä½å¦çæ¶ä»£ä¸ç´é½å¨ç©Pythonãããå ³äºPythonä¸çæ¡æ¶ï¼æåè§æ²¡ä»ä¹é«ä½ä¹åãããéè¦è¯´å·®å«ï¼åæ¯éå人群ä¸åèå·²ããDjangoéåèé¸ï¼Flaskéåé«æãã
对äºé«æï¼Flaskè¯å®æ´å¥½ï¼æ¯ç«æé æ¹å¼å¯ä»¥èªå·±éåããä½å¯¹äºæè¿ç§èé¸æ¥è¯´ï¼å°±ä¸å¤ªéåï¼æ¯ç«ä¸æ³è±å¤ªå¤ç²¾åå¨å¦ä¹ ä¸ï¼åªè¦æç®åçï¼å°±ä¸æ³ç¨å¤æçã尽管æç»è¿æ¯ä¸¤ä¸ªé½å¦äºããä½è¿å¹¶éæçæ¬æããã
Flaskç±äºåªæä¾äºæ¶å请æ±çåºæ¬åè½ï¼æ以åè£ æ¶å¾è½»éï¼ç¨æ¥å个å客èªå·±ç©é常ç½ï¼åè½»éåèæï¼æ¯Django好ç¨å¤ªå¤äºï¼ä½å¦æ项ç®å¤§ä¸ç¹ï¼éè¦èªå·±æåç§æ¡æ¶ãããåæè¿ç§èé¸ï¼ç¦»å¼æç¨è¿çæä¸èµ·æ¥ããã
Djangoåæ¯ä»å¤´å°å°¾ä¸ç´éããå¦æåä¸ä¸ªå客ï¼æ¾å¾æç¹æ鸡ç¨çåããä½è¦å®ç°ä¸ä¸ªå®æ´é¡¹ç®ãããå ¶å®æ¯Flaskè¦ç®åï¼ä¸éè¦æ太å¤ç¥è¯ãããä¹ä¸éè¦èªå·±ææ¡æ¶ããæ¯è¾éåæè¿ç§ä¸æä¹ç±å¦ä¹ çå¦æ¸£ããã
æ¿å®è£ Windowsç³»ç»ä¸¾ä¾:
Flaskæ¯è¾åæ¯å®è£ ä¸ä¸ªç©ºç³»ç»ï¼ä¹ååèªå·±ä¸è½½å®è£ æ¾å¡é©±å¨ï¼ä¸»æ¿é©±å¨ï¼USB驱å¨ãDjangoåæ¯ç´æ¥å®è£ ä¸ä¸ªèªå¸¦ææ驱å¨çç³»ç»ï¼æ¯å¦ææè±å
è¿å°±æäºä¸¤ç§ç解ï¼ããDjangoçè·¯ååæ¯æ´æ èä¸äºï¼ä¸éè¦æä»ä¹å«é©±å¨ï¼è£ å®ç³»ç»ç´æ¥ç¨å°±å¯ä»¥äºãã对é«ææ¥è¯´ï¼Flaskåå¯ä»¥èªå·±éæ©èªå·±å°åºæ³è¦å¥ããä½åºç¡ç¥è¯ä¹å°±æ¾å¾æ´éè¦
ä¸è¿æåæè¿æ¯æå¼äºPythonï¼è½¬å°äº.NETä¸ããåå å¨äºï¼æè¦å»åä¸äºæ¸¸ææ¹åçä¸è¥¿ããæ£ç±äºå¦ä¹ 游æå¼åçè¿ç¨ï¼ä½¿æè§å¾è¦å¦çä¸è¥¿å®å¨å¤ªå¤äºããç²¾åæç¹è·ä¸ä¸ããæ以ä»æ¤ï¼åªè¦åè½æ²¡å·®å«ï¼åªä¸ªç®åéåªä¸ªãããè¿ä¸ªè§åº¦æ¥è®²ï¼Djangoæ´ç¬¦åPythonçå²å¦ããèFlaskï¼æé æ´èªç±ï¼åæ´ç¬¦å模ååçææ³ãã
flaskæ¡æ¶æä»ä¹ç¨ï¼é¾å¦ä¹ï¼ä¸»è¦æ¯åwebç¨ï¼æ¯å¦é¾å¦è¦çè·è°æ¯ï¼
æ¯django容æï¼ä½æ´ä½æ¥è¯´è¿æ¯ä¸è¥¿ä¸å°ï¼éè¦é å¥å¦ä¹ çç»ä»¶ä¹å¥½å 个
flaskdjangoåªä¸ªæ´éåå ¥é¨djangoæ´å éåæ°æï¼å 为éé¢æå¾å¤éé¢éæäºå¾å¤å¯ç¨ç模åã
èflaskéè¦å»èªå·±æ¾åéç模åã
æ以djangoæ´éåæ°æï¼èflaskéåæ¯è¾çæwebæ¡æ¶ç人ï¼æ¯è¾çµæ´»ã
ç»è¯ï¼ä»¥ä¸å°±æ¯é¦å¸CTOç¬è®°ä¸ºå¤§å®¶ä»ç»çå ³äºdjangoåflaskåªä¸ªå¥½å¦çå ¨é¨å 容äºï¼å¸æ对大家ææ帮å©ï¼å¦æä½ è¿æ³äºè§£æ´å¤è¿æ¹é¢çä¿¡æ¯ï¼è®°å¾æ¶èå ³æ³¨æ¬ç«ã
Flask项目配置(Configuration)
在Flask项目中,配置(Config)扮演着至关重要的角色。配置对象作为字典的子类,允许开发者以键值对的形式存储各种设置。这种统一的处理接口集成了Flask内置配置、扩展提供的星宇精品源码配置以及自定义配置,使得项目管理更加便捷。使用配置,如设置秘钥、数据库地址等,能够显著提升开发效率。
设置自己的配置,特别是在大型项目中,能避免在代码中直接修改多个视图函数参数的繁琐。比如,当在博客应用中设置每页显示的文章数量时,通过配置`app.config['POST_PER_PAGE'] = `一行即可全局调整,避免了逐个修改的低效操作。
配置的设置方式有多种。直接在主脚本中写入配置或使用字典的`update`方法简化代码,是两种常见的方法。对于规模逐渐扩大的项目,将配置信息整理至单独的配置文件(如`config.py`),能提升代码的可读性和可维护性。进一步地,为不同场景创建不同的配置类,如开发、测试和部署配置,可以更好地适应项目需求的变化。
建议创建一个存储通用配置的基类,并为特定场景(如开发和测试)创建继承基类的配置类,以实现最佳实践。通过`from_object()`方法导入配置,使得项目结构更加清晰,便于管理。
了解大型项目结构、扩展的初始化以及使用程序工厂函数创建程序实例等内容,将在后续文章中详细探讨。在此基础上,关注高质量的Flask和Web开发原创内容,有助于深入学习和实践。
flask是什么意思
Flask是一种轻量级的Web应用框架。Flask是一个基于Python语言的Web框架,主要用于构建Web应用程序。它具有灵活性和可扩展性强的特点,特别适合快速开发和迭代。以下是关于Flask的详细解释:
Flask的特点
1. 轻量级:与其他一些重量级的Web框架相比,Flask更加轻量级。它提供了最小的核心功能集,专注于Web应用的核心部分,如路由、模板渲染和请求处理等。这使得Flask可以快速启动和运行简单的Web应用。
2. 灵活性:Flask的设计注重可扩展性和灵活性。它提供了各种扩展来支持额外的功能,如数据库集成、表单处理、用户认证等。开发者可以根据自己的需求选择合适的扩展来构建应用。
3. 简单易用:Flask的学习曲线相对平缓,易于上手。对于Python开发者来说,由于其语法简洁且直观,他们可以迅速开始构建Web应用。
Flask的应用场景
Flask广泛应用于各种规模的Web开发项目中。由于其轻量级和灵活性,它特别适用于初创公司和小型项目。此外,对于大型项目,开发者也可以利用Flask的扩展机制来构建复杂的应用程序。无论是构建简单的个人博客还是复杂的企业级应用,Flask都是一个很好的选择。
总结
Flask是一种用于构建Web应用程序的轻量级Python框架。它具有灵活性和可扩展性强的特点,易于学习和使用。无论是小型项目还是大型应用,Flask都能提供良好的开发体验。
使用Flask-Avatars在Flask项目里设置头像
Flask-Avatars是Flask项目中常用的扩展之一,主要用来实现头像的设置。
在大多数Web程序中,头像的设置都是必不可少的。根据项目的需求不同,有的项目可以选择使用Gravatar提供的头像服务,而有的项目则可能需要提供自定义头像设置。Flask-Avatars几乎满足了所有常见的头像需求。
Flask-Avatars的GitHub主页为:github.com/greyli/flask...
安装Flask-Avatars需要使用pip进行安装。与其它扩展类似,你需要实例化从flask_avatars导入的Avatars类,并传入app实例。如果你使用工厂函数创建程序实例,那么这里也可以不传入程序实例app,在工厂函数中对这个avatars对象调用init_app()方法时再传入app实例。
Flask-Avatars内置了几个默认头像,可以用来作为用户注册后的初始头像,或是作为博客评论者的头像。在模板中调用avatars.default()即可获取URL。你可以通过size参数来设置尺寸,默认为m,其他可选值有l和s。
在模板中调用avatars.gravatar()方法并传入Email散列值即可获取Gravatar的头像URL。Email散列值可以通过特定的方式获取。
Robohash是一个生成随机机器人头像的服务。在模板中调用avatars.robohash()并传入随机文本作为参数即可获取Robohash的头像URL。
Flask-Avatars通过Avatars.io提供了社交头像获取服务,支持Facebook、Twitter、Instagram和Gravatar。通过在模板中调用avatars.social_media()方法并传入用户名(username)即可获取对应的头像URL,通过size参数可以设置尺寸,可选值为small、medium和large。通过platform参数可以设置平台,默认为twitter,可选值为twitter、facebook、instagram和gravatar。
Gravatar服务可能会有不稳定的情况,此时可以在本地为用户生成头像(identicon)。通过avatar.generate()可以创建三个尺寸的头像,并保存到指定的位置。你可以将这个文件名保存到数据库中,并创建一个视图函数来提供头像文件。
Flask-Avatars基于Jcrop提供了头像裁剪功能。具体步骤可以参考文档中的相关部分。下面是示例程序中的裁剪页面。
Flask-Avatars支持的配置列表如下所示。Flask-Avatars的Git仓库中包含三个实例程序,你可以通过特定的方式来运行实例程序。