Flask Web开发实战总结笔记1

一、请求响应循环,即由客户端发起请求,web服务端收到请求后向客户端响应的循环过程

二、HTTP请求

  1. 请求报文由请求方法,URL,协议版本,header,内容实体组成。

  2. request对象,属于flask的一个类,可以通过该对象的属性(如url,host,args.get)或方法(get_data(),get_json())获得请求的url或数据等。

  3. 在flask中处理请求

    1.路由匹配(app.url_map),定义了URL规则与视图函数的映射关系,使用flask routes可以查看路由表

    2.设置监听的http方法,以app.route()作为装饰器时,在里面用"method"作为参数设置监听http方法

    3.URL处理,这里为使用变量转换器(<转换类型:变量名>)将变量进行类型转换

    4.请求钩子,用于注册请求不同阶段中的回调函数,分别为:

    ​ before_first_request

    ​ before_request

    ​ after_this_request

    ​ after_request

    ​ teardown_request

    一共5个,作为装饰器实现

三、HTTP响应

  1. 响应报文由协议版本,状态码,原因短语,响应首部和响应主体组成。常见的状态码如200(正常)、302(重定向)、404(找不到资源)、500(内部服务器错误)等。

  2. 在flask中生成响应

    1.重定向,通过redirect()方法把当前的视图函数重定向到另一个url(可以结合url_for(“端点”)获得重定向目的url)

    2.错误响应,通过abort(状态码) 返回一个错误响应

  3. 响应格式(MIME),通过make_response()生成响应对象response后,对该response的属性mimetype设置。有4种类型:

    1.纯文本类型(text/plain)

    2.HTML类型(text/html)

    3.XML类型(application/xml)

    4.JSON类型(application/json,借助jsonify()函数进行序列化)

  4. cookie,用make_response()生成响应对象response后,对该response使用的属性使用set_cookie()方法,设置cookie

  5. session对cookie的数据进行了加密,步骤为:

    1.设置程序密钥,通过app.secret_key配置,或者先在.env文件中写入该变量后,在程序头中通过app.secret_key=os.getenv()获得

    2.模拟用户验证,通过session[“logged_in”]=True表示用户已认证。通过session.pop(“logged_in”)清除该cookie,登出用户

四、flask上下文

  1. 上下文全局变量,运行程序或激活请求时的临时动态全局变量,分两种:

    程序上下文,变量有

    current_app 指向处理请求的当前程序实例

    g 用于存储全局数据,每次请求都会重设

    请求上下文,变量有

    request 封装客户端发出的请求报文数据

    session 存储请求之间的数据,对cookie加密封装

  2. 激活上下文,当启动flask项目时就会激活程序上下文,激活请求时产生的请求上下文的同时也会激活程序上下文,通过app.app_context()对象获取程序上下文,app.test_request_context()临时创建请求上下文,用push()或者pop()显式推送或销毁程序/请求上下文

  3. 上下文钩子,app.teardown_appcontext()作为装饰器实现,在请求销毁结束时注册的回调函数

五、HTTP进阶实践

  1. 重定向回上一个页面,有两个步骤:

    1.获取上一个页面的URL,可以通过request.referrer,或者在url_for里使用定义查询参数next=request.full_path进行重定向

    2.对URL进行安全验证,使用urlparse方法解析URL,解析对象的scheme属性判别协议模式(http或https),netloc属性获取url,判断是否属于程序内部的url

  2. 使用AJAX技术发送异步请求,实现网页的局部更新。具体为使用jQuery函数ajax(),参数有url,type,data,success等。

  3. HTTP服务器端推送,主要有3种:传统轮询,长轮询,Server-Sent Events(SSE)

  4. Web安全防范。

    1.注入攻击,可通过ORM,验证输入类型,参数化查询及转义特殊字符进行防范

    2.XSS攻击,可通过HTML转义(escape()方法)或验证用户输入

    3.CSRF攻击,通过正确使用HTTP方法,CSRF令牌校验进行防范

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值