
Python全栈
本专栏面向Python零基础读者,从基本语法写起,介绍了数据结构和算法、数据库优化、Linux命令、高级编程技巧和Web安全攻防、项目前导,讲解两大Web框架:Flask和Django。后进入Python爬虫、数据分析和机器学习入门阶段,基本覆盖Python全部内容,并提供面试技巧,助力全栈。
东哥说AI
AI超级个体:专注AI智能体、AI编程、大模型部署定制、RPA等前沿技术应用。
分享AI玩法、变现思路。
关注东哥不迷路,创富路上大踏步。
展开
-
Python全栈(十二)数据分析之2.matplotlib子图绘制及组件
Matplotlib是Python基础绘图库,用于将数据可视化,通过pip安装。绘图前需要figure创建图片,也可以在图片中创建子图,并给子图绘图;还可以调用subplots创建子图。折线图可以显示数据的变化趋势,通过plot绘制,通过show展示图片,也可以自定义绘图样式。可以设置坐标刻度、旋转、刻度标签,还可以设置坐标轴标签、标题和网格,还能将生成的图片保存到本地。matplotlib默认不显示中文,需要配置:rc方法设置font参数;rcParams定义字体;FontProperties定义。原创 2020-11-18 14:57:57 · 793 阅读 · 0 评论 -
Python全栈(十二)数据分析之1.数据分析介绍和Jupyter的基本使用
数据分析是用适当的方法数据进行分析,并提取有用信息、形成结论,包括明确目的、准备数据、数据解析等步骤,与数据挖掘有异同;数据分析有岗位的要求,是机器学习和数据科学的基础;可以使用工具或者编程语言进行数据分析;学习数据分析应该重视基础、归纳总结和坚持三多原则;发展方向包括业务型和技术型,侧重点有所不同。Jupyter Notebook是交互式的在线编辑器;使用前需要安装;先在命令行中启动;可以进行文件操作、编辑和运行代码等;还可以使用快捷键,包含命令模式和编辑模式,还可以通过多种方式查看模块的文档说明。原创 2020-11-04 09:20:44 · 731 阅读 · 2 评论 -
Python全栈(十一)Django项目之5.用户登录基本实现
用户登录需要发送请求、并接受校验参数,返回响应并进行持久化;参数包括用户名、密码和是否记住。后端使用authenticate验证用户,可以将错误信息传递到前端显示;嗨可以自定义用户认证后端,进而实现多种认证方式,此时需要重写authenticate方法。首页用户名展示有多种方式:上下文处理器auth传递变量user,不利于首页静态化;发送Ajax请求有延迟;Vue读取cookie渲染用户信息效率更高。原创 2020-10-24 10:14:47 · 1372 阅读 · 5 评论 -
Python全栈(十一)Django项目之4.短信验证码前端逻辑实现和注册性能优化
前端首先需要通过Vue绑定,并实现发送验证码的逻辑和视图。为防止恶意攻击,需要限制用户短信验证码的发送频率,通过设置标志变量实现,前后端同时完善相关逻辑;并在表单中验证短信验证码,同时对比和显示错误信息,还可以将相关信息保存到日志中。普通Redis一般多个请求不能同时进行,此时可以使用pipeline来实现多次发送和返回。发送短信时会有延迟,此时可以异步发送短信,具体是通过生产者消费者模式来解耦;Celery可以实现生产者消费者模式、提升效率;实现步骤包括创建实例并配置、定义任务、启动服务和调用任务。原创 2020-10-17 20:44:55 · 498 阅读 · 3 评论 -
Python全栈(十一)Django项目之3.图形验证码实现逻辑和短信验证码初步实现
后端实现图形验证码验证时,需要先使用第三方包生成验证码,同时保存到Redis中,最后响应到前端注册页,需要配置好Redis;前端需要生成uuid,并获取验证码图片和显示,还需要对验证码长度进行验证。短信验证码逻辑为接收参数并校验,在校验成功、图形验证码正确时生成短信验证码并保存、响应;发送短信选择容联云通讯平台,可以进行开发调试,需要安装依赖库;同时为了多人发送短信而需要多次初始化类导致的内存占用问题,封装了短信发送的单例类。按照实现逻辑实现后端视图,并返回相应状态;为了避免硬编码,专门定义常量文件。原创 2020-10-07 16:00:15 · 1444 阅读 · 6 评论 -
Python全栈(十一)Django项目之2.用户注册功能实现
前端需要完善来实现验证,注册页面实现Vue属性,包括v-model、@blur和v-show等;定义Vue实现data和方法的定义,用于验证数据的合法性,还要保证只有验证成功后才能提交。验证字段有两种方式:后端form表单实现自定义验证,视图实现注册业务逻辑,验证成功则新建用户;前端Ajax实现验证,实现请求成功和失败的业务处理,需要后端定义接口。使用Redis实现状态保持,通过自带的login()方法实现,将用户信息写入session;将后端的Form错误信息显示到注册页面,向前端页面传递变量即可。原创 2020-10-05 17:06:38 · 1556 阅读 · 6 评论 -
Python全栈(十一)Django项目之1.项目搭建和用户注册逻辑
需求分析可以确定项目的业务流程和业务需求;项目主要包括首页、个人信息页等;项目分为用户、商品等模块,可以解耦和管理。项目采用前后端不分离模式;部署到Nginx,访问时可以根据不同的请求返回不同的结果。项目需要创建虚拟环境和安装所需库;需要配置开发环境的配置文件;进行MySQL配置;进行Redis配置;配置工程日志;配置静态资源文件和模板文件;配置时区。创建和配置用户app;实现用户注册页面。Django自带用户认证系统;提供了默认用户模型类;也可以自定义用户模型类。用户注册逻辑较多;需要用户注册接口。原创 2020-10-04 16:59:59 · 2424 阅读 · 9 评论 -
Python全栈(十)Django框架之14.文件上传、登录状态和上下文处理器
普通方式文件上传需要后端接收和存储文件,前端定义相关标签和属性;使用模型上传直接使用FileField,还可以指定保存路径,包括upload_to和MEDIA_ROOT两种;可以限制文件扩展名来提高安全性;可以上传图片。cookie保存在浏览器,访问时会携带,session一般保存在服务器,浏览器访问时会根据id查询;可以设置、获取和删除cookie;session一般通过request.session操作,可以修改存储方案。上下文处理器可以定义变量,使之能在全局模板中使用;也可以自定义上下文处理器。原创 2020-09-30 11:33:54 · 2336 阅读 · 7 评论 -
Python全栈(十)Django框架之13.表单使用和数据验证
Django表单提供了渲染模板和验证数据的功能;定义表单类后,需要在视图中进行初始化并传递到模板,同时POST方法实现处理数据的逻辑。常用字段包括CharField等,有自己的属性;常用验证器包括RegexValidator等,实现更复杂的逻辑。有时候还需要自定义验证来实现对一个字段或多个字段的验证,需要通过方法实现;可以提取或自定义获取错误信息。ModelForm可以避免代码重复,Form类中直接定义Meta类绑定模型和指定验证字段;验证成功后直接调用save方法保存数据,也可以验证并保存部分字段。原创 2020-09-28 17:02:30 · 2126 阅读 · 8 评论 -
Python全栈(十)Django框架之12.HTTP对象、类视图和分页
WSGIRequest对象包括了客户端上传的所有信息,包括path、method、GET、is_secure等属性和方法;HttpResponse对象携带信息返回客户端,有content等属性和方法;JsonResponse对象用于返回json数据到客户端。类视图需要继承自View并实现相应的请求方法,可以提交数据、传递参数;TemplateView用于返回模板。ListView用于以列表形式展示数据,可以结合Paginator和Page实现分页。错误信息需要自定义模板显示;也可以创建app处理错误。原创 2020-09-27 17:16:21 · 1208 阅读 · 3 评论 -
Python全栈(十)Django框架之11.ORM迁移、请求限制和重定向
makemigrations用于生成迁移脚本,可以指定app、文件名和生成空脚本;migrate用于将脚本文件映射到数据库,可以指定app、文件名进行映射,也可以只添加记录;showmigrations用于查看迁移文件;sqlmigrate用于查看sql语句。迁移版本不对应时,需要删除迁移文件、app对应的记录,再重新生成迁移脚本,并使用--fake-initial进行映射。根据已有的表自动生成模型,包括生成模型、修正模型、映射模型等。限制请求方法可以使用装饰器。重定向可以从一个页面跳转到另一个页面。原创 2020-09-24 21:54:11 · 640 阅读 · 1 评论 -
Python全栈(十)Django框架之10.ORM模型对象和QuerySet方法
模型.objects的类型是Manager,继承自BaseManager的from_queryset方法,实现动态添加属性和方法到类中。exclude方法排除满足条件的数据;order_by方法根据字段进行排序;values方法指定字段提取数据并返回字典;values_list方法返回元组;create方法创建数据并保存;get_or_create方法先查询数据,不存在则创建;exists方法判断数据是否存在;update方法更新数据;提取部分数据用切片;QuerySet对象不一定马上执行SQL语句。原创 2020-09-24 10:41:55 · 1099 阅读 · 1 评论 -
Python全栈(十)Django框架之9.聚合函数和表达式
使用聚合函数来统计数据信息:Avg函数用于求平均值,返回的结果是字典,可以先过滤再使用聚合函数;aggregate返回字典,只有1个键值对,annotate返回QuerySet,可以进行分组和联合查询;Count用于获取对象的个数,指定distinct参数为True可以进行不重复计数;Max和Min用于获取对象的最大值和最小值;Sum用于求对象的总和,可以综合使用、实现各种需求。F表达式可以实现批量操作,而不需要先读取、再遍历操作、最后保存;Q表达式可以进行与运算、或运算和非运算,或者几种运算的结合。原创 2020-09-21 17:27:52 · 600 阅读 · 2 评论 -
Python全栈(十)Django框架之8.外键约束和查询操作
两个表之间可以通过外键建立联系;插入数据时应保证数据在父模型中存在;ORM可以简化外键数据查询;不同app之间建立外键关系需要添加app名;存在自关联外键时,to参数为self或模型名;删除存在外键关系的父模型数据有多种方式,包括级联、受保护、设为空值等操作。exact用于精确查询,iexact使用like;contains用于模糊查询且区分大小写,icontains不区分,get和filter有区别;in用于查询值是否在某个容器中;比较包括大小和范围;日期和时间查询包括date、year和time。原创 2020-09-19 15:09:35 · 1205 阅读 · 1 评论 -
Python全栈(十)Django框架之7.ORM常用字段、属性和Meta配置
ORM常用字段包括AutoField、BigAutoField、BooleanField、CharField、DateTimeField、EmailField、TextField、URLField等,不同的字段对应着不同的数据类型,可以实现不同的需求。字段常见参数有:null指定是否允许为空;db_column自定义字段名;default设置默认值;unique设置字段值唯一。模型的Meta子类可以设置属性实现控制模型特性:db_table用于自定义表名;ordering用于设置查询数据时的排序方式。原创 2020-09-17 11:21:55 · 1060 阅读 · 4 评论 -
Python全栈(十)Django框架之6.ORM模型基本使用
ORM模型一般是放在app目录下的models.py文件中,并且需要安装app,字段有很多类型,也有很多属性;数据库映射步骤包括配置数据库、定义模型、安装app、生成迁移脚本文件、执行迁移脚本文件进行映射等步骤,在新增字段重新映射时应该设置默认值或者允许为空。添加数据直接对数据模型初始化;查询数据有三种方式:根据主键查询、根据过滤条件查询和查询全部数据,分别调用不同的方法;删除数据调用delete方法;更新数据是给对象属性重新赋值。使用ORM改写视图函数逻辑,重新实现图书管理系统,比原生SQL更方便。原创 2020-09-14 13:51:22 · 2084 阅读 · 11 评论 -
Python全栈(十)Django框架之5.原生SQL语句使用和ORM简介
使用Django操作数据库时,需要安装驱动,包括mysqlclient等;Django使用MySQL需要配置。Django中使用原生SQL语句就是使用Python DB API来操作,视图中使用connection创建游标,并执行SQL语句,有多种方法和属性可以使用。图书管理系统需要先实现并展示图书列表;可以使用模板继承,还需加入CSRF,视图函数中根据请求方法分别实现请求逻辑;实现详情;实现删除;实现修改。原生SQL语句存在很多问题,ORM把表映射成类、把记录作为实例、把字段作为属性,具有很多优点。原创 2020-09-11 20:45:08 · 2020 阅读 · 2 评论 -
Python全栈(十)Django框架之4.过滤器、结构优化和静态资源文件
过滤器一般用于对传递到模板中的变量进行一定的处理:包括add、cut、date、default、first、last、floatformat、join、safe、slice、striptagstruncatechars等常见过滤器,各有其功能。一般网页都具有一定的结构,包括头部、主体、底部等部分,需要对模板结构进行优化:引入模板可以抽离重复代码、提高代码复用性;模板继承具有更大的扩展性,可以在block中扩展。Django中加载静态资源文件一般需要进行配置,同时分为app内和项目中,可根据据需要选择。原创 2020-09-05 21:56:10 · 1928 阅读 · 5 评论 -
Python全栈(十)Django框架之3.Django模板简单使用
在实际开发中,视图函数中需要返回模板,DTL是Django自带的模板,可以传递参数、数据动态化,渲染模板有两种方式:render_to_string和render,可根据需要选择,还需要配置模板路径。在查找模板时,先在DIRS中查找,再在安装的APP中查找,如果都找不到会抛出异常。视图中用context参数向模板中传递变量并渲染,可以传递多种变量类型。if标签用于条件判断;for标签用于循环,有很多属性;url标签用于反转路由,可以传递参数;with标签给变量重命名;autoescape标签设置转义。原创 2020-08-28 17:00:22 · 1117 阅读 · 3 评论 -
Python全栈(十)Django框架之2.URL与视图
在视图中完成业务逻辑;url需要映射;在路由中传入路径参数,参数名和参数数量要保持一致,关键字参数使用get方法获取。URL模块化需要用到include函数;内置转换器可以限制数据类型。reverse方法可以对路由名反转得到路由;应用命名空间可以使各个应用不混乱,实例命名空间可以使多个实例不混乱;反转传参是路径参数时需要通过kwargs传递,是关键字参数时直接拼接字符串。可以设置URL默认参数,在访问路由中未添加参数也可访问到网页,通过给一个视图函数定义两个路由实现;re_path方法支持正则表达式。原创 2020-08-24 21:51:58 · 1323 阅读 · 10 评论 -
Python全栈(十)Django框架之1.Django初体验
虚拟环境安装不同版本的库,满足不同项目的需求,之间相互独立;安装虚拟环境可以使用pipenv等:在使用之前需要先安装,包括创建、切换、退出等命令,创建好之后需要在PyCharm中进行配置。Django框架遵循MVT,开发原则是快速开发和DRY。创建项目包括命令行和IDE创建两种方式;运行也包括这两种方式;项目结构包括交互文件、设置文件、路由配置文件和部署文件;为了实现功能,需要创建app。创建视图函数时需要满足两个条件,并配置路由,可以在每个app中分别实现视图;可以根据需要开启和关闭DEBUG模式。原创 2020-08-22 20:00:36 · 2261 阅读 · 7 评论 -
Python全栈(九)Web前端基础之6.JQuery的基本使用
JQuery是一个高效、精简、功能丰富的JS工具库,包括压缩版和未压缩版,可以下载本地导入或使用CDN,比原生JS简洁。JQuery选择器规则与CSS相同,包括对id、类、标签等的选择;还有has、not、eq等过滤器;包括prev、next等选择器转移;可以根据长度判断是否找到元素。常见属性包括val、prop、attr等;操作样式类名包括添加类、移除类、切换类。事件包括得失焦点、鼠标事件和DOM事件等。JQuery可以实现淡入淡出、显示隐藏、展开卷起等特殊效果;调用animate方法实现动画效果。原创 2020-08-21 20:13:10 · 1602 阅读 · 1 评论 -
Python全栈(九)Web前端基础之5.JS获取节点和常见事件
通过顶层document节点获取节点可以通过id、标签名、name属性和class属性4种方式获取,获取节点样式,行内样式和其他样式的获取方式不同;通过父节点获取可以获取所有后代HTML和文本、第一个和最后一个子节点3种情况。常见的鼠标事件包括点击、双击、被按下、松开、移到上方、离开等事件,鼠标事件还可以获取相对于可视区、页面和事件源的位置。JS表单事件包括获取焦点、失去焦点、输入、内容改变等事件。键盘事件包括点击、按下、松开等事件。可以使用JS阻止浏览器的默认行为;封装函数可以简化代码、提高复用性。原创 2020-08-20 21:57:49 · 1395 阅读 · 5 评论 -
Python全栈(九)Web前端基础之4.CSS盒模型和JS基础
CSS对HTML元素生成了一个所占空间的矩形元素框,称为盒模型;border表示边框,包括边框宽度、边框风格、边框颜色等;padding是指元素内容到border之间的距离,有4种设置方式;margin是指盒子与盒子之间的距离;overflow定义了溢出元素内容区的内容会如何处理。JS分为3个发展阶段;包括3个组成部分。JS有2种引入方式;JS中有数据类型,用var定义变量,标识符也有一定的命名规则;BOM:浏览器可以通过3种方式向用户显示信息;DOM打通HTML和CSS与JS的壁垒,将节点分为3类。原创 2020-08-17 20:39:37 · 1371 阅读 · 5 评论 -
Python全栈(九)Web前端基础之3.CSS常见样式和选择器
CSS常见文本样式包括颜色、大小、字体等,颜色有4种表示形式;列表常见样式包括类型、图片和位置等;背景样式包括颜色、图片、重复方式、位置;浮动主要为了脱离文档流的垂直排列、变为行内元素,存在高度塌陷问题,有3种解决办法。元素选择器是已经存在的标签的元素名称;使用id选择器给某一唯一元素设置格式;给某一类标签设置同一个样式使用类选择器;匹配所有元素使用通配选择器;群组选择器可以抽离相同样式;包含选择器给某元素的子元素设置样式;伪类选择器可以向超链接添加特殊效果;选择器优先级行内样式最高,通配选择器最低。原创 2020-08-16 21:58:45 · 3203 阅读 · 2 评论 -
Python全栈(九)Web前端基础之2.HTML高级标签和CSS介绍
div标签与其内的内容组成块元素、表示一块内容,没有具体的语义,唯一的格式就是换行,常结合CSS用于页面布局,span标签与其内的内容形成行内元素,没有具体的语义,常用于修改段落中的局部样式;表格标签分为table标签、tr一行、td(th)一列(表头),整个表格和单元格有很多属性进行样式定义;表单标签form一般用来与用户交互并提交数据,根据不同的输入类型有很多的子标签。CSS即层叠样式表,有美化网页、分离样式和内容、提高开发效率的功能;引入方式包括行内样式、嵌入式和外联式3种,其中外联式最常使用。原创 2020-08-15 10:10:37 · 1318 阅读 · 2 评论 -
Python全栈(九)Web前端基础之1.Web前端介绍和HTML基本标签
web1.0时代的网页多是静态网页,缺乏交互性;web2.0时代及以后,出现动态网页;HTML即超文本标记语言,不同的格式用不同的标签来标记,具有不同的语义,HTML具有其自身的特点;编辑器可以选择Sublime、VSCode等,Sublime安装之后需要安装一些常用的插件才能进行更加高效的开发。一个HTML文件包括头部和主体部分,标签有单标签、双标签等,还有很多属性。厂家俺的基础标签包括基础标签、段落标签、水平线标签、修饰标签、特殊符号、列表标签、图片标签和超链接标签等,很多标签都有自己特定的属性。原创 2020-08-10 16:02:21 · 1294 阅读 · 11 评论 -
Python全栈(八)Flask项目实战之13.项目部署
论坛项目中很多地方都用到了Ajax,即异步JavaScript和XML,可以部分更新网页,提高网页效率。部署项目时,对于个人或小微企业,一般采用云服务器即可,一般选择CentOS系统,需要通过安全组设置开放常用端口,还需要拍快照保存服务器状态,连接工具使用XShell;需要进行MySQL的安装和配置,并安装Redis。需要安装虚拟环境,上传代码使用FileZilla,并安装依赖库;启动项目前需要删除文件、重新映射数据库。实际生产中部署项目使用Nginx和uwsgi,来提高项目并发性能,满足高并发需求。原创 2020-07-06 18:51:58 · 1265 阅读 · 4 评论 -
Python全栈(八)Flask项目实战之12.前台页面完善
首页可以根据不同的板块和排序方式进行显示,要想两者同时满足,需要在指定路由时传入参数,即模板和视图函数都需要进行修改。使用celery可以实现多任务、提高发送效率,Python中使用需要安装,在一个函数中实现任务,在另一个文件中执行,并在命令行中开启监控。Flask项目中使用celery需要初始化,传入参数,并在视图函数中导入,要注意循环引用的问题。阅读数可以通过增加一个字段来实现,只要访问一次视图函数,对应阅读数即加1;评论数也要增加一个字段。点赞功能也需要增加字段并新建表,并通过Ajax传递数据。原创 2020-07-05 20:43:37 · 2069 阅读 · 1 评论 -
Python全栈(八)Flask项目实战之11.帖子管理和帖子分页
帖子详情页面的评论使用百度富文本编辑器,可以定制文本编辑页面,需要创建模板、完善视图函数,要实现通过点击文章链接就自动跳转到文章详情页。后台帖子管理主要有两个功能,即加精(取消加精)和移除,需要创建保存精华帖的模型,并完善视图函数和模板以实现加精与取消加精之间的切换,删除是假删,即将is_delete字段设为1。发布帖子需要先创建模型,并实现表单验证,并完善模板和视图函数,还需要实现根据不同板块选择在主页显示不同的文章。前台帖子分页需要使用插件,完善模板和视图函数,并创建测试数据,还可以根据需要定制。原创 2020-07-04 09:40:36 · 1224 阅读 · 2 评论 -
Python全栈(八)Flask项目实战之10.前台发布帖子和后台帖子管理页面搭建
通过完善模板和视图函数在前台显示相关信息,轮播图和板块显示出来,并点击板块会有颜色显示,地址中参数值也会变化。创建相关JS、模板和视图函数,并且需要通过装饰器实现登录验证,并创建钩子函数用于在上下文保存前台用户。需要创建模型保存博客数据,并进行映射。文章的发布需要表单验证,并且需要实现业务逻辑,可以使用重定向和Ajax两种方式返回;还需要进一步实现在编辑器中上传本地图片并保存到七牛云,并抽离抽离重复Ajax代码。文章发布之后还需要在前台显示出来,即完善模板和视图函数,还需要进行后台帖子管理页面的搭建。原创 2020-07-02 20:32:30 · 1458 阅读 · 4 评论 -
Python全栈(八)Flask项目实战之9.CMS七牛云上传和板块管理
将后台轮播图数据展示到前台需要在视图函数中查询,并在模板中修改。图片文件上传到七牛云需要在视图函数中生产token,并在JS文件中实现上传的数据传递和逻辑处理;JS文件中setUp()是对七牛云的初始化。板块管理是管理帖子的分类,需要实现模板并通过JS文件实现,需要创建板块数据模型,并进行数据库的映射。实现展示和增加板块需要先定义验证表单,并在视图函数中增加业务处理逻辑,具体操作是通过JS实现的;修改板块也是通过JS实现的,需要进行表单验证;删除也是通过表单验证。帖子的编辑通过Editor.md实现。原创 2020-06-29 21:59:18 · 1095 阅读 · 5 评论 -
Python全栈(八)Flask项目实战之8.CMS后台轮播图管理
首先在前一节的基础上调整轮播图的样式,并且实现模板继承。后台管理轮播图,还要新增管理轮播图权限,新建js文件用于Ajax传递数据,并且开发出轮播图管理的基本雏形。在添加轮播图时有两种实现方式,本地上传采用上传到第三方平台。添加轮播图时需要创建模型,并且映射到数据库中,并新增表单类进行验证,还需要将数据同步到管理页面。编辑轮播图也是通过JS实现的,修改数据也需要进行表单验证;删除banner也是通过JS实现的,还可以通过增加字段来实现假删除。图片上传平台使用七牛云,需要创建对象存储空间并使用SDK实现。原创 2020-06-27 21:05:10 · 1906 阅读 · 2 评论 -
Python全栈(八)Flask项目实战之7.前台注册和登录功能
在完善注册功能时,将生成的图形验证码和短信验证码保存到Redis中,以在指定时间内有效,并定义表单来验证各个字段和验证码的正确性,注册成功后数据插入数据表。如果注册页是从某一个页面跳转来的,还要实现注册完后跳转回该页面,这主要是通过request.referrer来实现的,并且需要判断地址是否是站内的地址、保证安全性。登录功能也需要通过表单对各字段进行验证,并在视图文件中实现视图类和业务逻辑,也需要实现在登录之后的页面跳转。在搭建首页页面时,首先需要利用模板定义导航栏,在此基础上实现轮播图的动态效果。原创 2020-06-25 18:37:37 · 1904 阅读 · 3 评论 -
Python全栈(八)Flask项目实战之6.前台注册功能开发
后台的整体页面和基本架构已经搭建好,转到前台开发。首先对前台用户模型进行定义,属性比后台用户更多,在manage.py中进行映射。在相应目录下创建模板文件、css和js文件,视图文件中实现视图类;再实现图形验证码类,用于生成带随机验证码和干扰线的图片。在试图文件中实现生成随机图片验证码并添加到注册页,再通过JS控制点击更换图片。发送短信验证码一般通过使用第三方服务、调用SDK实现,并在公共文件夹视图文件实现具体功能。在模板中加入CSRF保护,通过表单对注册请求进行验证,还要对JS文件加密来提高安全性。原创 2020-06-24 16:30:01 · 1409 阅读 · 3 评论 -
Python全栈(八)Flask项目实战之5.CMS后台权限验证
本节主要实现权限验证。首先需要在manage.py中实现添加用户角色的功能,并在命令行中添加用户。接着在模型文件中实现获取用户权限和判断权限的功能,并在manage.py中添加函数进行验证,再进一步实现将用户添加到角色的功能。先对个人中心页面进行完善,并实现右上角显示权限最大的角色,有两种方式,接着实现根据不同的用户权限来显示不同的管理页面的功能,这是通过在模板中进行条件判断实现的。最后逐步实现左侧管理栏所有功能对应的视图函数和模板,还需要创建用于验证权限的装饰器来装饰视图函数,以达到验证权限的功能。原创 2020-06-19 21:14:31 · 1689 阅读 · 4 评论 -
Python全栈(八)Flask项目实战之4.CMS后台修改邮箱和权限介绍
先将公共代码抽离;发送邮件需要进行配置,要初始化Mail模块,在视图文件中定义视图函数进行邮件发送测试。修改邮箱也要用Ajax实现,还需要实现生成指定位数验证码的函数,试图文件中定义视图类发送验证码;还需要使用Redis保存验证码和设置有效期,定义专门函数实现该功能。在表单文件中定义专门验证修改邮箱的表单,在视图文件的修改邮件视图中实现修改邮箱和异常处理的功能。本项目中使用二进制的与和或运算实现权限管理,用户与角色之间为多对多关系,角色与权限之间也为多对多关系。先建立相关模型,再将模型映射到数据库中。原创 2020-06-05 21:40:10 · 2098 阅读 · 10 评论 -
Python全栈(八)Flask项目实战之3.CMS后台修改密码
CMS后台修改密码需要先创建模板文件,也是继承自父模板,父模板的meta元素中放入csrf验证,视图函数文件中增加视图类,并通过ajax实现局部更新。在表单文件中增加对修改密码提交数据的验证,在试图文件中实现post方法,返回json格式数据。创建testful.py用于实现返回json数据的封装,视图文件中直接调用函数,还可以抽离表单类,返回错误信息时调用方法。sweetalert可以美化在提交数据时返回提示信息的弹框,可以根据需要选择不同的提示框。修改邮箱界面需要创建模板,在视图文件中增加视图类。原创 2020-05-29 11:17:54 · 3254 阅读 · 11 评论 -
Python全栈(八)Flask项目实战之2.CMS后台功能开发
用户登录验证需要实现表单验证,视图类中使用post函数实现表单提交,还需要进行邮箱和密码的验证。在用户名或密码验证失败或表单验证失败时应返回模板,get和post方法可以进行统一。登录验证有两种实现方式,使用钩子函数和使用装饰器,都可以单独建立文件,建议使用钩子函数;CSRF保护可以保证表单请求的真实可靠,模板表单中也要增加验证。后台页面基本实现包括模板和静态文件;用户名渲染在钩子函数中定义,并绑定到g对象;注销通过清空session和重定向实现。使用模板实现后台个人信息页面;通过模板继承来简化代码。原创 2020-05-23 11:47:56 · 2587 阅读 · 5 评论 -
Python全栈(八)Flask项目实战之1.项目搭建
一个Flask项目的首要工作是要根据需要创建好项目目录,本项目实现简单的论坛平台,后台管理cms和前台front分离实现,以优化代码结构,创建程序主入口文件、静态资源文件目录和模板目录,还需要创建配置文件、中间文件、数据库映射文件和前后台分离目录,目录下创建表单文件、模型文件和视图文件。CMS管理员定义模型,在manage.py中导入模型,并通过给函数添加装饰器实现在命令行中添加用户,在保存密码时需要经过加密,以提高安全性。CMS登录模板可以借助BootStrap等提供的模板,以实现更美观的前端页面。原创 2020-05-18 21:53:22 · 4178 阅读 · 12 评论