P26-P34 third_template

继续用之前代码比较乱,我们新建一个项目名为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.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方式

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

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

我们访问一下

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

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类的有错误信息,其余都没有错误信息 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suyuoa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值