继续用之前代码比较乱,我们新建一个项目名为third_template,项目中此时依然只放一个main.py

目录

1 响应

1.1 返回模板

1.1.1 使用模板 render_template()

1.1.2  以变量名的形式向模板传递参数

1.1.3  以字典的方式向模板传递参数

1.2  重定向 redirect()

1.3  返回JSON

1.4  自定义状态码与响应头

1.4.1  自定义状态码

1.4.2  自定义响应头

1.4.3  make_response方式

2  cookie

2.1  设置

2.2  读取

2.3  删除

3  session

3.1  设置

3.2  获取

4  异常处理

4.1  中止 abort()

4.2  捕获错误装饰器 errorhandler()

4.2.1  装饰状态码

4.2.2  装饰错误信息

5  请求钩子


1 响应

1.1 返回模板

1.1.1 使用模板 render_template()

模板是页面文件,文件格式有html,js等,我们首先创建一个文件夹templates,然后创建一个名为hello_world的html文件

  • 如果不想改代码的话名称一定要使用templates

输入名称创建完毕后,我们文件会有这样的内容

我们把Title换成hello world,body上写上你好

之后我们回到main.py,加一个路由与视图

这时候我们开启服务,然后访问

发现可以访问,并且与我们输入的内容相同

1.1.2  以变量名的形式向模板传递参数

我们也可以向模板中传入一些信息,我们修改一下模板

我们可以通过两个大括号加变量名的形式把内容传进来,我们现在回到main.py中定义变量

我们访问一下

1.1.3  以字典的方式向模板传递参数

那么我们想像django那样,用字典的方式传参,那么我们应该这样做

  • 我们字典中的变量名要与模板中的变量名相同

我们访问一下

发现没有问题

1.2  重定向 redirect()

如果我将 地址a 重定向为 地址b ,那么当我访问 地址a 的时候就会跳转到 地址b

我们如果输入 www.360buy.com 这个地址,就会跳转到 www.jd.com 这个就是重定向

我们写一个看看

运行之后访问127.0.0.1/redirect,访问后浏览器会弹出百度的页面,在pycharm中会返回状态码302

1.3  返回JSON

我们写一下路由与视图

访问之后可以看到我们的json数据

1.4  自定义状态码与响应头

1.4.1  自定义状态码

我们在要返回的内容后加上自己想要的状态码就行了,我当前令其状态码为888

我们访问一下

1.4.2  自定义响应头

响应头信息以字典的方式传递,在状态码后加入字典即可

访问后我们通过浏览器看一下响应头

发现我们给的字典已经传入进去了,如果只想定义响应头也是可以的

如果写反了是不行的,会报500

响应头可以通过字典传递多个属性

1.4.3  make_response方式

我们也可以这样自定义状态码与响应头

  • 在这里状态码只传数字也可以

我们访问一下

发现我们自定义的状态码和响应头都在其中

2  cookie

cookie是储存在用户本地上的数据,一般用来辨明用户身份

2.1  设置

我们可以通过make_response中的set_cookie设置cookie

我们访问一下

发现可以看到cookie的数据,我们也可以在这里查看cookie

在这里可以看到我们cookie的信息

在信息下方会有cookie的有效期,默认是浏览会话结束时失效,我们将这种cookie称为临时cookie

我们可以通过max_age参数,来设置cookie的有效期,我们现在设置为3600秒(一小时)

访问之后我们看一下cookie

我们观察响应头可以发现设置cookie实则是在响应头中加入了Set-Cookie这个属性

2.2  读取

一般来讲我们都是通过一个路由把cookie给出去,然后再到另一个路由中读cookie,我们现在写一个视图使用request.cookies.get()读cookie

我们现在访问一下

那我们现在在浏览器中给浏览器删了

删除之后我们再访问一下

2.3  删除

我们可以让有这个cookie时怎么做,没有这个cookie时就做另一件事,所以在服务端删除cookie也是很有必要的

我们使用delete_cookie删除cookie

运行后首先我们先访问 127.0.0.1/set_cookie 设置一个cookie

之后我们再访问 127.0.0.1/delete_cookie 删除一个cookie

我们发现 到期时间 给了一个奇异的值,我们现在访问 127.0.0.1/load_cookie 看一下

发现那个奇异的值其实代表的就是cookie没了

  • 设置cookie是在响应头加入了Set-cookie这个属性,删除cookie实则就是把Set-cookie这个属性变为空值且有效期会给到要给很早的日期,上面显示的50000多年是解码问题

3  session

首先我们说一下session与cookie的区别

  • 存储位置 理论上session存储在服务器的缓存中,cookie存储在客户端,但是flask在默认情况下使用的是浏览器session,也就是说session与cookie是一样的
  • 作用对象 cookie是针对网站的,session是针对用户的,如果我搞了一个登陆界面,我像让用户在第二次进入登陆界面时不要再登陆一边,那么我就要将用户名与密码数据放在session中而不是cookie中

他们的相同点就是根据不同的信息返回不同的页面,所以在下面我们看到处理方式很相似

在使用session前,我们首先需要设置SECRET_KEY

3.1  设置

我们访问一下

我们在这里可以看到session,这里的密文是配合我们之前设置的SECRET_KEY生成的

也可以在这里看

3.2  获取

我们访问一下

4  异常处理

4.1  中止 abort()

我们现在写这样一组路由和视图

我们正常的访问应该是这样的

那么如果用户不给age,那么它就会报500(服务端错误)

我现在不想让他报500,而是想让他报400(请求端错误),这个时候我们可以使用abort了

我们再错误的访问一次

abort的实际效用实际上是等价这个的

4.2  捕获错误装饰器 errorhandler()

4.2.1  装饰状态码

当我们服务器报了指定的错误时,我们不想让用户看到这样的文字

而是一个固定前端内容,这个时候我们要用到errorhandler()

比如当我们出现404的时候,我们可以让他变的好看一点,我们给它重定向静态文件里的一张图像

  • 视图的参数是一定要给的,名字随便,你可以不调用它,它的内容是报错的信息

我们现在随便输入一个路由访问一下

这个路由我们本来是没有的,应该报404,我们装饰了一下,最终返给200

如果我们是500,那么无论从那个视图中抛出500的错误,都会走到errorhandler这个装饰器的视图

4.2.2  装饰错误信息

如果有错误信息我们也可以装饰,比如除数不能为0的错误(ZeroDivisionError)

我们首先搞个路由与视图制造这种错误,我们一会儿把num2这个变量搞为0他就报错了

下面我们搞一个装饰器

我们先正常访问一遍

发现没什么问题,我们再把num2改为0

python还会有其他的错误,输入jupyter notebook 中运行dir(__builtin__))就可以看到会出现的所有错误,我当前是这些

'ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'WindowsError', 'ZeroDivisionError',

除了这些我们可以给自定义错误,这里要使用关键字raise,在我的这篇文章中有介绍 Python关键字_potato123232的博客-CSDN博客

5  请求钩子

请求钩子处理在客户端与服务器交互过程中的准备工作与扫尾工作,起到中间件的作用,flask一共有下面四种请求钩子

这四个钩子带的运行函数执行顺序是这样的

创建钩子的方式很简单,创建之后的钩子要挂什么代码根据每个项目不同的要求做不同的处理,这里我们把创建钩子的方式写出来

我们用上面的除法视图测一下,故意让除数为0

此时报了一个500,我们看一下终端信息

除了500类的有错误信息,其余都没有错误信息

P26-P34 third_template相关推荐

  1. atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc...

    atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1 ...

  2. 《JavaWeb视频教程》(p34)

    p34 文件上传及注意问题 1. 上传文件 a. 引入2个jar apache: commons-fileupload.jar组件 commons-fileupload.jar依赖 commons-i ...

  3. P24 p25 p26 p27 p28

    p24 p25 p26 选择结构:if语句:执行满足条件的语句 1.单行格式的if语句: if(条件) {满足条件执行的语句} 2.多行格式的if语句: if(条件)      {条件满足执行的语句} ...

  4. 26.课时26.【Django模版】if标签使用详解(Av61533158,P26)

    if 标签

  5. Qt——P26 Label控件显示图片

    先把图片资源添加到Qt ui界面创建label //利用lable 显示图片ui->label_image->setPixmap(QPixmap(":/picture/abc.p ...

  6. python入门——P34异常处理:你不可能总是对的2

    有时程序会出错,但不会崩溃,我们需要知道哪里出错了,并进行提醒. '''python3 try:检测范围 except Execption[reason]:出现异常后的处理代码 finally:无论如 ...

  7. 【李宏毅2020 ML/DL】P34 More about explainable AI | Attribution, Heatmap, explainable model

    我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的.自己不知道的东西. 已经有人记了笔记(很用心,强烈推荐):https://github.com/Sakura-gh/ML-note ...

  8. 高等数学竞赛题解析教程P26 - 例1.52(浙江2008竞赛题)

    参考答案:

  9. (P26)system v消息队列:msgsnd函数 ,msgrcv函数

    文章目录 1.msgsnd函数 2.msgrcv函数 1.msgsnd函数 功能:把一条消息添加到消息队列中原型:int msgsnd(int msqid, const void *msgp, siz ...

最新文章

  1. 折腾一天总结下安装centos的安装方法。。。
  2. 互联网工作原理(17.网络电视是如何工作的)
  3. ArcGIS Desktop新建postgresql版sde(10.4.1)的连接
  4. 基于IMAGE法的房间回响模型创建、C++代码实现、matlab仿真
  5. 微信小程序之 3d轮播(swiper来实现)
  6. 2013-2014 ACM-ICPC Pacific Northwest Regional Contest题解
  7. 安卓吃鸡玩家专属:教你电脑玩刺激战场匹配手机最简单的方式
  8. cad导入进max线会乱_AutoCAD导入3dmax显示错乱(z轴归零).doc
  9. excel自动排班表_Excel教程:3秒搞定排班表模板
  10. MediaFoundation视频采集
  11. outlook服务器邮件满了怎么办,outlook邮箱满了怎么清理_outlook一直提示邮箱满了如何清理-win7之家...
  12. 【报错】Cannot uninstall ‘certifi‘. It is a distutils installed project and thus we cannot accurately
  13. 【Java】注解入门
  14. 三大运营商的网上流量卡数据对比,看看你会选哪一个?
  15. fastjson转换json字符串key的首字母小写变大写的解决办法
  16. Stata | 简单操作2(display)
  17. c语言二叉树族谱管理系统,数据结构课程设计报告(用二叉树实现家谱管理系统).doc...
  18. 鼠标经过——图片放大效果
  19. WinRAR(去广告)中文繁体
  20. el转义html标签,vue 中el-table转义后台字符

热门文章

  1. 数据分析——数据清洗之文字特征编码
  2. 机器学习中的特征工程——分类变量的处理
  3. 重装系统中遇到的问题:(1)请检查你的介质驱动器,错误代码0x80300024(2)选中的磁盘采用gpt分区形式
  4. JavaFast企业级快速开发平台-常见问题,入门必读
  5. Unity3D 大型游戏 最后一站 源码 部分重点匹配战斗(一)(10)
  6. 世界最大主跨径飞燕式系杆拱桥成功吊装首节主拱
  7. 50条经典管理心理学定律
  8. Brocade SAN交换机型号、switch type对照表、序列号
  9. 64.qt quick-qml使用高德地图插件实现V2版本(新增:位置搜索、路径规划、轨迹编辑等)
  10. 华为 eNSP 高级ACL配置实验