这几天看了2章Flask Web开发实战,记录一下自己的学习感悟以免后续有所遗忘了
这本书非常厚,不过从目录来看,大约只有前3分之1的内容是Flask框架的一些知识要点,后面基本上是一些项目的实例,有之前使用Django框架的基础,对于这本书的阅读也是相对比较轻松。
第一章主要讲述的还是一些环境配置相关的问题,重点主要有两个
一个是如何写出一个最基础的程序hello,flask!
和django有所不同,flask框架的路由和函数都写在了一个py文件里
只需要在py文件的开头创建一个程序实例,然后在函数的上方写上@app.route()这样的路由即可
第二个就是关于URL与端点
在url_for()里面写上视图函数的名称就能得到对应的url
第二章讲的是Flask与HTTP,我想摘录一些有价值的内容
首先是URL变量转换器,形式为:<int:year>这样
然后是关于请求钩子(Hook),可以用它来对请求进行预处理和后处理
然后是关于重定向,在return的时候用redirect,在里面写上要跳转的地址即可,也可以与url_for搭配使用
之后的重点就是Cookie和Session
如果想要在响应里添加一个cookie,最方便的方法是使用Response类提供的set_cookie()方法。要使用这个方法,我们需要先使用make_response()方法手动生成一个响应对象。
而session比起cookie更加安全
首先要设置程序秘钥app.secret_key=xxx,通过session['logged_in']=True这样的形式来设置session
用户登出的时候可以通过session.pop()来删除session
上下文全局变量
为什么request明明只是从Flask导入的一个全局对象,为什么在处理请求时,视图函数里的request会自动包含对应请求的数据?这是因为Flask会在每个请求产生后自动激活当前请求的上下文,激活请求上下文后,request被设为临时全局可访问。当请求上下文被激活后,程序上下文也自动被激活。
对于这一部分内容我有所疑问,于是让gpt为我进行讲解
想象一下,你在一个图书馆工作,这个图书馆非常特殊:每当一个读者来借书时,图书馆都会为这位读者创建一个专属的工作区域。这些工作区域就像“请求上下文”,而图书馆的整体管理系统则类似于“程序上下文”。
求上下文(Request Context):
当一个读者进入图书馆时,图书馆会为他分配一个工作区域,这个区域里有他的借书记录、当前借的书籍等等。这就像Flask中的请求上下文,当每个请求进来时,Flask会为这个请求“创建”一个专属的上下文环境。在这个环境里,像request这样的全局对象就被“设置”成和当前请求相关的数据,比如请求的URL、表单数据、用户的会话信息等。
你可以把request对象看作是这位读者的工作区域中的借书记录。只要你在这个区域里工作,你就能看到和这位读者相关的所有信息。但如果没有进入这个区域,你就无法看到这些信息。
程序上下文(Application Context):
图书馆不仅要为每位读者提供工作区域,还要有一个整体的管理系统来维护图书馆的运营,比如图书馆的开放时间、所有书籍的分类信息等等。这就是程序上下文,它涉及到整个Flask应用的状态和配置,比如数据库连接、全局设置等。
在Flask中,程序上下文和请求上下文是紧密相关的,但它们分别管理不同的内容。程序上下文是整个应用的状态,而请求上下文则是特定请求的状态。
之后提到了HTTP进阶的一些内容
关于如何重定向到上一个页面,有2种方法
第一种(不常用)是通过referrer来获取上一个页面
return redirect(request.referrer)
第二种是利用查询参数
在url中加入包含当前页面url的参数next
url_for('dosomething',next=request.full_path)
这样在重定向的时候可以return redirect(request.args.get(next),url_for('hello'))
在重定向的时候还需要进行安全验证
在返回数据的时候,可以通过jsonify()来返回json数据
记录的比较乱,看完以后如果不复习的话感觉马上就会又忘掉了,所以16号白天决定还是再复习一下看过的内容
然后再继续往下看