06 2022 档案
摘要:import traceback def fun(a,b): return a/b try: fun(1,0) except Exception as e: traceback.print_exc() #或者得到堆栈字符串信息 info = traceback.format_exc() print(
阅读全文
摘要:frame表单 frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素; (HTML语言中,frame/iframe标签为表单框架) 为什么要学习frame表单切换 说明:在WebDriver类库中封装了HTML页面中使用frame表单框架技术定位的方法 方法: - d
阅读全文
摘要:1. 元素等待 1.1 什么是元素等待? 概念:WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程; 1.2 为什么要设置元素等待? 1. 由于网络速度原因 2. 电脑配置原因 3. 服务器处理请求原因 WebDriver元素等待有几种类型呢? 1.3 元素等待类型 1. 显式
阅读全文
摘要:分支 作用: 区分生产环境代码以及开发环境代码 研究新的功能或者攻关难题 解决线上bug 特点: 项目开发中公用分支包括master、dev 分支master是默认分支,用于发布,当需要发布时将dev分支合并到master分支 分支dev是用于开发的分支,开发完阶段性的代码后,需要合并到master
阅读全文
摘要:标签 当某一个大版本完成之后,需要打一个标签 作用: 记录大版本 备份大版本代码 模拟经理打标签 1.进入到经理的本地仓库test007 cd Desktop/manager/test007/ 2.经理在本地打标签 git tag -a 标签名 -m '标签描述' 例: git tag -a v1.
阅读全文
摘要:代码冲突 提示:多人协同开发时,避免不了会出现代码冲突的情况 原因:多人同时修改了同一个文件 危害:会影响正常的开发进度 注意:一旦出现代码冲突,必须先解决再做后续开发 代码冲突演练 1.张三先编辑login.py文件代码 进入张三本地仓库:cd Desktop/zhangsan/test007 拉
阅读全文
摘要:多人协同开发 1.代码编辑界面介绍:此处使用gedit做演示 代码编辑界面左边为模拟经理的操作 代码编辑界面右边为模拟张三的操作 2.模拟张三先编辑login.py文件代码 进入张三本地仓库:cd Desktop/zhangsan/test007 编辑代码:num1 = 10 本地仓库记录版本:gi
阅读全文
摘要:克隆项目 准备经理的文件 Desktop/manager/ 准备张三的文件 Desktop/zhangsan/ 经理的工作 立项:克隆远程仓库+配置身份信息+创建项目+推送项目到远程仓库 1.克隆远程仓库的命令 cd Desktop/manager/ git clone https://github
阅读全文
摘要:Git远程仓库Github 提示:Github网站作为远程代码仓库时的操作和本地代码仓库一样的,只是仓库位置不同而已! 准备Git源代码仓库 https://github.com/ 准备经理的文件 Desktop/manager/ 准备张三的文件 Desktop/zhangsan/ 创建远程仓库 以
阅读全文
摘要:Git单人本地仓库操作 课程目标:学习常用的Git终端命令 提示:本地仓库是个.git隐藏文件 以下为演示Git单人本地仓库操作 1.创建项目 在桌面创建test文件夹,表示是工作项目 Desktop/test/ 2.创建本地仓库 进入到test,并创建本地仓库.git 新创建的本地仓库.git是个
阅读全文
摘要:工作区暂存区和仓库区 工作区 对于添加、修改、删除文件的操作,都发生在工作区中 暂存区 暂存区指将工作区中的操作完成小阶段的存储,是版本库的一部分 仓库区 仓库区表示个人开发的一个小阶段的完成 仓库区中记录的各版本是可以查看并回退的 但是在暂存区的版本一旦提交就再也没有了
阅读全文
摘要:Git Git 是目前世界上最先进的分布式版本控制系统(没有之一) 作用 源代码管理 为什么要进行源代码管理? 方便多人协同开发 方便版本控制 Git管理源代码特点 1.Git是分布式管理.服务器和客户端都有版本控制能力,都能进行代码的提交、合并、 2.Git会在根目录下创建一个.git隐藏文件夹,
阅读全文
摘要:新版本的差异 Selenium 4 移除了对旧协议的支持,并在引擎盖下默认使用 W3C WebDriver 标准。对于大多数情况,此实施不会影响最终用户,主要的例外是Capabilities和Actions类。 1、capabilities的更新 如果测试功能的结构不符合 W3C,可能会导致会话无法
阅读全文
摘要:定位方式分类-汇总: 1). id、name、class_name:为元素属性定位 2). tag_name:为元素标签名称 3). link_text、partial_link_text:为超链接定位(只针对a标签) 4). Xpath:为元素路径定位 5). Css:为CSS选择器定位 1.1
阅读全文
摘要:创建集群 redis的安装包中包含了redis-trib.rb,⽤于创建集群 接下来的操作在172.16.179.130机器上进⾏ 将命令复制,这样可以在任何⽬录下调⽤此命令 sudo cp /usr/share/doc/redis-tools/examples/redis-trib.rb /usr
阅读全文
摘要:学习目标 能够根据课件中的步骤搭建 Redis 的主从 主从概念 ⼀个master可以拥有多个slave,⼀个slave⼜可以拥有多个slave,如此下去,形成了强⼤的多级服务器集群架构 master用来写数据,slave用来读数据,经统计:网站的读写比率是10:1 通过主从配置可以实现读写分离 m
阅读全文
摘要:一、安装gcc依赖由于 redis 是用 C 语言开发,安装之前必先确认是否安装 gcc 环境(gcc -v),如果没有安装,执行以下命令进行安装 [root@localhost local]# yum install -y gcc 二、下载并解压安装包[root@localhost local]#
阅读全文
摘要:在引入蓝图概念之前,先分析app注册路由的原理 app注册路由的基本原理 ## demo.py from flask import Flask app = Flask(__name__) @app.route("/") # 调用app.route方法 def index(): return 'pas
阅读全文
摘要:https://chromedriver.storage.googleapis.com/index.html https://registry.npmmirror.com/binary.html
阅读全文
摘要:信号机制 Flask信号机制 Flask信号(signals, or event hooking)允许特定的发送端通知订阅者发生了什么(既然知道发生了什么,那我们可以根据自己业务需求实现自己的逻辑)。 Flask提供了一些信号(核心信号)且其它的扩展提供更多的信号。 信号依赖于Blinker库。 p
阅读全文
摘要:在开发过程中,需要修改数据库模型,而且还要在修改之后更新数据库。最直接的方式就是删除旧表,但这样会丢失数据。 更好的解决办法是使用数据库迁移框架,它可以追踪数据库模式的变化,然后把变动应用到数据库中。 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移。并且集成到Flask-Scr
阅读全文
摘要:常见关系模板代码 以下罗列了使用关系型数据库中常见关系定义模板代码 一对多 示例场景: 用户与其发布的帖子(用户表与帖子表) 角色与所属于该角色的用户(角色表与多用户表) 示例代码 class Role(db.Model): """角色表""" __tablename__ = 'roles' id
阅读全文
摘要:flask系列(1-1)-Flask简介 flask系列(1-2)-虚拟环境 flask系列(1-4)-相关配置参数
阅读全文
摘要:后台 from flask import Flask, render_template, request, flash, redirect, url_for from flask_sqlalchemy import SQLAlchemy from flask_wtf import FlaskForm
阅读全文
摘要:数据库基本操作 在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前,要先将数据添加到会话中然后调用 commit() 方法提交会话。 在 Flask-SQLAlchemy 中,查询操作是通过 query 对象
阅读全文
摘要:Flask-SQLAlchemy安装及设置 SQLALchemy 实际上是对数据库的抽象,让开发者不用直接和 SQL 语句打交道,而是通过 Python 对象来操作数据库,在舍弃一些性能开销的同时,换来的是开发效率的较大提升 SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层
阅读全文
摘要:ORM ORM 全拼Object-Relation Mapping. 中文意为 对象-关系映射. 主要实现模型对象到关系数据库数据的映射. 比如:把数据库表中每条记录映射为一个模型对象 ORM图解 优点 : 只需要面向对象编程, 不需要面向数据库编写代码. 对数据库的操作都转化成对类属性和方法的操作
阅读全文
摘要:CSRF CSRF全拼为Cross Site Request Forgery,译为跨站请求伪造。 CSRF指攻击者盗用了你的身份,以你的名义发送恶意请求。 包括:以你名义发送邮件,发消息,盗取你的账号,甚至于购买商品,虚拟货币转账...... 造成的问题:个人隐私泄露以及财产安全。 CSRF攻击示意
阅读全文
摘要:Web表单 Web 表单是 Web 应用程序的基本功能。 它是HTML页面中负责数据采集的部件。表单有三个部分组成:表单标签、表单域、表单按钮。表单允许用户输入数据,负责HTML页面数据采集,通过表单将用户输入的数据提交给服务器。 在Flask中,为了处理web表单,我们可以使用 Flask-WTF
阅读全文
摘要:模板中特有的变量和函数 你可以在自己的模板中访问一些 Flask 默认内置的函数和对象 config 你可以从模板中直接访问Flask当前的config对象: {{config.SQLALCHEMY_DATABASE_URI}} sqlite:///database.db request 就是fla
阅读全文
摘要:包含 Jinja2模板中,除了宏和继承,还支持一种代码重用的功能,叫包含(Include)。它的功能是将另一个模板整个加载到当前模板中,并直接渲染。 include的使用 {% include 'hello.html' %} 包含在使用时,如果包含的模板文件不存在时,程序会抛出TemplateNot
阅读全文
摘要:模板继承 模板继承是为了重用模板中的公共内容。一般Web开发中,继承主要使用在网站的顶部菜单、底部。这些内容可以定义在父模板中,子模板直接继承,而不需要重复书写。 标签定义的内容 {% block top %} {% endblock %} 相当于在父模板中挖个坑,当子模板继承父模板时,可以进行填充
阅读全文
摘要:模板代码复用 在模板中,可能会遇到以下情况: 多个模板具有完全相同的顶部和底部内容 多个模板中具有相同的模板代码内容,但是内容中部分值不一样 多个模板中具有完全相同的 html 代码块内容 像遇到这种情况,可以使用 JinJa2 模板中的 宏、继承、包含来进行实现 宏 对宏(macro)的理解: 把
阅读全文
摘要:控制代码块 控制代码块主要包含两个: - if/else if /else / endif - for / endfor if语句 Jinja2 语法中的if语句跟 Python 中的 if 语句相似,后面的布尔值或返回布尔值的表达式将决定代码中的哪个流程会被执行: {%if user.is_log
阅读全文
摘要:自定义过滤器 过滤器的本质是函数。当模板内置的过滤器不能满足需求,可以自定义过滤器。自定义过滤器有两种实现方式: 一种是通过Flask应用对象的 add_template_filter 方法 通过装饰器来实现自定义过滤器 重要:自定义的过滤器名称如果和内置的过滤器重名,会覆盖内置的过滤器。 需求:添
阅读全文
摘要:过滤器 过滤器的本质就是函数。有时候我们不仅仅只是需要输出变量的值,我们还需要修改变量的显示,甚至格式化、运算等等,而在模板中是不能直接调用 Python 中的某些方法,那么这就用到了过滤器。 使用方式: 过滤器的使用方式为:变量名 | 过滤器。 {{variable | filter_name(*
阅读全文
摘要:模板的使用 在项目下创建 templates 文件夹,用于存放所有的模板文件,并在目录下创建一个模板html文件 temp_demo1.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</
阅读全文
摘要:Jinja2模板引擎简介 模板 在前面的示例中,视图函数的主要作用是生成请求的响应,这是最简单的请求。实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本。本节学到的模板,它的作用即是承担视图函数的另一个作用,即返回响应内容
阅读全文
摘要:Flask-Script 扩展 通过使用Flask-Script扩展,我们可以在Flask服务器启动的时候,通过命令行的方式传入参数。而不仅仅通过app.run()方法中传参,比如我们可以通过: python hello.py runserver -host ip地址 以上代码告诉服务器在哪个网络接
阅读全文
摘要:Session 对于敏感、重要的信息,建议要存储在服务器端,不能存储在浏览器中,如用户名、余额、等级、验证码等信息 在服务器端进行状态保持的方案就是Session Session依赖于Cookie session数据的获取 session:请求上下文对象,用于处理http请求中的一些数据内容 @ap
阅读全文
摘要:上下文 上下文:相当于一个容器,保存了 Flask 程序运行过程中的一些信息。 Flask中有两种上下文,请求上下文和应用上下文 请求上下文(request context) 思考:在视图函数中,如何取到当前请求的相关数据?比如:请求地址,请求方式,cookie等等 在 flask 中,可以直接在视
阅读全文
摘要:Cookie Cookie:指某些网站为了辨别用户身份、进行会话跟踪而储存在用户本地的数据(通常经过加密)。 复数形式Cookies。 Cookie最早是网景公司的前雇员Lou Montulli在1993年3月的发明。 Cookie是由服务器端生成,发送给客户端浏览器,浏览器会将Cookie的key
阅读全文
摘要:状态保持 因为 http 是一种无状态协议,浏览器请求服务器是无状态的。 无状态:指一次用户请求时,浏览器、服务器无法知道之前这个用户做过什么,每次请求都是一次新的请求。 无状态原因:浏览器与服务器是使用 socket 套接字进行通信的,服务器将请求结果返回给浏览器之后,会关闭当前的 socket
阅读全文
摘要:request request 就是flask中代表当前请求的 request 对象,其中一个请求上下文变量(理解成全局变量,在视图函数中直接使用可以取到当前本次请求) 常用的属性如下: 属性说明类型 data 记录请求的数据,并转换为字符串 * form 记录请求中的表单数据 MultiDict
阅读全文
摘要:装饰器路由具体实现梳理 Flask有两大核心:Werkzeug和Jinja2 - Werkzeug实现路由、调试和Web服务器网关接口 - Jinja2实现了模板。 Werkzeug是一个遵循WSGI协议的python函数库 - 其内部实现了很多Web框架底层的东西,比如request和respon
阅读全文
摘要:请求勾子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比如: 在请求开始时,建立数据库连接; 在请求开始时,根据需求进行权限校验; 在请求结束时,指定数据的交互格式; 为了让每个视图函数避免编写重复功能的代码,Flask提供了通用设施的功能,即请求钩子。 请求钩子是通过装饰器的形式
阅读全文
摘要:异常捕获 HTTP 异常主动抛出 abort 方法 抛出一个给定状态代码的 HTTPException 或者 指定响应,例如想要用一个页面未找到异常来终止请求,你可以调用 abort(404)。 参数: code – HTTP的错误状态码 # abort(404) abort(500) 抛出状态码的
阅读全文
摘要:虚拟环境 为什么要搭建虚拟环境? 在开发过程中, 当需要使用python的某些工具包/框架时需要联网安装 比如联网安装Flask框架flask-0.10.1版本 sudo pip install flask==0.10.1 提示:使用如上命令, 会将flask-0.10.1安装到/usr/local
阅读全文
摘要:Flask简介 Web应用程序的本质 Web(World Wide Web)诞生最初的目的,是为了利用互联网交流工作文档。 Web框架 什么是Web框架? 协助开发者快速开发 Web 应用程序的一套功能代码 开发者只需要按照框架约定要求,在指定位置写上自己的业务逻辑代码 例如:在某个区需要成立一家医
阅读全文
摘要:正则匹配路由 在 web 开发中,可能会出现限制用户访问规则的场景,那么这个时候就需要用到正则匹配,根据自己的规则去限定请求参数再进行访问 具体实现步骤为: 导入转换器基类:在 Flask 中,所有的路由的匹配规则都是使用转换器对象进行记录 自定义转换器:自定义类继承于转换器基类 添加转换器到默认的
阅读全文
摘要:视图常用逻辑 返回 JSON 重定向 url_for 自定义状态码 返回JSON 在使用 Flask 写一个接口时候需要给客户端返回 JSON 数据,在 Flask 中可以直接使用 jsonify 生成一个 JSON 的响应 # 返回JSON @app.route('/demo4') def dem
阅读全文
摘要:路由基本定义 明确路由定义的参数,请求方式指定 PostMan 的使用 指定路由地址 # 指定访问路径为 demo1 @app.route('/demo1') def demo1(): return 'demo1' 给路由传参示例 有时我们需要将同一类 URL 映射到同一个视图函数处理,比如:使用同
阅读全文
摘要:from flask import Flask app = Flask(__name__) @app.route("/") def index(): return "hello" if __name__ == '__main__': app.run() Flask程序所在的包(模块),传 __nam
阅读全文