python flask基础总结 HTTP

flask 是pythonweb框架之一 相比于django之类的重型框架 已经为你配置好很多内容 flask可以作为微型框架 微不代表他小 而是代表他的内容可以被你自己定义
响应和请求
我们在布置web服务器后 用户访问一个url 浏览器便会生成相对应的HTTP请求 由互联网发送到web服务器 服务器接收请求 flask根据请求的url执行对应的视图函数 视图函数运行并返回相对应的结果 包含html浏览器识别的语言 便是响应 浏览器在接收到响应 最终把响应的结果解析并渲染后的页面呈现给用户
url 组成部分 http://127.0.0.1/hello?name=tom

url组成内容
http://为协议字符串 有http https 等
127.0.0.1为服务器的地址 如果配置了域名 可以为 www.baidu.com
/hello?name=tom资源路径 在视图函数的路由地址 也包含reques字段

HTTP请求
请求报文中含有 |请求方法 url 协议版本 头字段

请求组成请求内容
请求方式get post put等
请求url路由地址
请求头字段headers { 请求包含的内容字段 }
报文主题name = tom&id = 123456

在请求requset中封装了请求的内容 通过导入flask.requset包 用 requset.args[‘key’]来获取字段的内容.
常见的request方法有

方法说明
args储存解析后查询的字符串 可以通过键值对获取相应的键值
cookies包含请求提交的cookies字典
data字符串形式的储存数据
endpoint请求对应的端点值
form解析后的表单数据 比如请求输入的表单内容为查询
get_data请求的默认读取字节字符串
get_json解析json并返回数据
headers头字段
method请求的方法
referrer请求发起源url
scheme请求发起url的协议
user_agent用户代理 客户端主机内容操作系统等

路由映射 每个url地址对应一个视图函数 其映射关系储存在url_map中 当请求出现的时候flask会根据请求的url找到相对应的视图函数 如果没有此视图函数 flask会自动返回一个404错误请求
url_map示例

EndpointMethodsRule
helloGET/hello
hiGET/hello
registerPOST/register

url中还包含了了其他内容 可以作为动态访问的地址 /time/flask处理url地址的时候 解析< >中的内容 并把内容转化为int类型

转换器类型内容
string字符串
int整型
float浮点
pathfile地址

请求钩子
flask对于客户端访问url之前可以支持预处理 就是请求钩子
before_first_request : 在处理第一个请求之前运行
before_request : 在处理请求之前运行
after_request : 处理请求之后 没有异常抛出 运行
teardown_request : 即使有未处理的异常抛出 也会运行
after_this_request : 在指定的请求结束之后运行

使用方式和app.route(’/’)相同每个钩子可以处理多个请求 作为装饰器在函数的上方使用
使用场景

before_first_request : 数据库初始化操作 添加管理员等
before_request : 用户记录时间 验证等
after_request : 数据库保存操作
teardown_requset : 回调数据库

请求钩子的运行顺序
在这里插入图片描述

HTTP响应
响应报文

组成内容
响应状态码200 301 404 502 等
响应头{date:1111, sever:1111222} 等
报文主体响应的字段或者html

状态码常见的有

状态码内容
200被正常处理
201请求被处理,并创建资源
204请求正常但是没有内容返回
301永久重定向
302临时重定向
304重定向到缓存的资源
400请求无效 存在错误
401请求需要认证
403请求被拒绝
404请求错误 未找到正确的url地址
500服务器错误

用户如果正常访问到正确的url地址 , flask自动调用make_response返回正确的状态码 默认为200
如果想重定向自定义地址 开发人员可以调用redirect() 函数来重定向 重定向的目标第一个参数为url地址 默认状态码为302 第二个参数可以传入301 修改为永久重定向 如果在程序内重定向到其他视图 在redirect( )函数中添加url_for( ) 传入url地址
使用示例

from flask import Flask, redirect, url_for

@app.route('/hi')
def hi():
	return redierct(url_for('hello')) # 重定向到/hello

@app.route('/hello')
def hello():
	return '<p>hello boy</p>'

flask 还提供错误码的返回 开发可以调用 abort( ) 传入参数状态码 404 或 403 返回错误 abort( )函数不用return 一旦执行abort 函数 后面的代码将不会继续执行
响应格式
在响应头中定义 content-Type: text/html ; charset=utf-8返回响应内容格式
也可以调用make_response( ) 生成响应对象
在响应的内容中可以有几种类型
纯文本 : text/plain类型
html : text/html 超文本标记语言
xml : application/xml 可扩展标记语言 一般作为ajax请求响应格式
json : application/json JavaScript交换数据格式
此外flask提供函数jsonify( ) 只需传入参数 python就会判断类型自动进行序列化返回正确的格式
cookies
服务器为了储存某些数据 比如认证 浏览器会自动保存 在下一次请求会附带cookie 然后服务端会根据cookie分析是否为本人 或分析用户的喜好等
在flask中 响应中可以添加cookie 方法为Requset类提供set_cookie( )方法
set_cookie( )方法定义了一下属性

属性内容
key
value键对应的值
max_age保存的时间数 默认回话结束关闭后结束
secure若为True 只有https可用
httponly若为True 禁止JavaScript获取cookie

开发人员在查询cookie的时候可以使用request.cookie.get(key,value)获取键值
cookie在文中最重要的作用就是用户在经过登录认证信息 服务端如果验证成功 就会返回一个cookie
比如login_user : tom , password : 123456 响应在被浏览器接收后 就会将cookie 保存在浏览器中 下一次访问便可以判断用户的身份
但是一个安全问题便是 cookie的值是可以手动更改的 如果 服务端直接将cookie设置为明文 那么便可以伪造cookie 的内容来获得网站的权限 为了避免出现此类情况 开发人员需要对cookie的内容进行加密处理 flask提供session对象将cookie数据加密储存
1.设置密钥 通过Flask.secret_key属性或配置setting文件中变量 SECRET_KEY设置密钥 (密钥使用暂时不会再议)
应用上下文和请求上下文
程序在分派请求之前激活应用和请求上下文,请求处理完成后将其删除 应用上下文激活后可以在线程中查找到g 和 current_app 请求上下文被推送后 可以在应用中找到request 和 session 如果没有激活任何一个就会报错
请求在程序中的运行顺序为 :
1.当一个请求出现时 flask 会吧请求实例化 成Request对象 同时激活请求上下文 RequestContext
2.然后检查在_app_ctx中是否有APP对象 如果没有就实例化APP 同时激活应用上下文APPContext 把app推送到 _app_ctx中 这时便可以在应用上下文中找到 g 和 current_app
3.再次检查_app_ctx中是否有APP对象 如果有就把Request推送到 _request_ctx中
4.这时就可以在_request_ctx 中找到Request对象 这时可以在请求上下文中找到 request 和 session
在手动实验推送应用上下文和请求上下文的方法是
app_ctx . push( ) 推送应用上下文
app_ctx . pop( ) 弹出应用上下文

request . push( ) / test_request_context( ) 推送请求上下文
request . pop( ) 弹出请求上下文

上页url操作
用户在登录后需要返回地址
1 . request . referrer 可以获取到上一页的url
2. 可以在url中加入 next 参数
使用方式 return redirect( request . args . get [‘next’]) 或者 return redirect( request . referrer)
获取上一页的url 因为安全问题 需要进行验证操作
url 安全验证:
flask 提供验证安全url的函数 urllib.parse

ref_url = urlparse(request.主机url)
test_url = urlparse(urljoin(request.主机url,传入url))
if ref_url.netloc == test_url.netloc:
	return True

ajax技术
在web中 , 每次用户访问一个地址 浏览器就会发送一个请求给服务端 服务端接收到请求然后经过处理返回相应的字段 html文件 但是如果在同一个页面中 用户如果仅访问一个块的内容 返回给服务端 如果服务端还返回整个网页的html 就会浪费很大的资源 这是 ajax技术便得以应用
ajax可以在使用JavaScript更新页面的时候 改变对应的页面元素
ajax(函数支持的参数)

参数说明
url请求地址
type请求方式
data数据
dataType数据类型
contextType内容类型
complete请求完成后的回调函数
success请求成功后的回调函数
error请求失败后的回调函数

ajax 使用示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>标题</title>
</head>
<body>
<h1>正文字段</h1>
<div class="body">{{ text }}</div>   //这里插入body字段
<script src="jquery-3.3.1.min.js"></script>
<script type="text/javascript">
    $(function () {
        $('#load').click(function () {    //定义函数名称
            $.ajax({
                url:'hello',    //url
                type:'get',    //get方法
                success:function (data) {       //如果响应成功就出发回调函数
                    $('.body').append(data);    //返回响应插入到页面中
                }
            })

        })

    })

这边不熟太懂 后边深入研究ajax
资料来源于李辉-flask开发实战 若侵权 请联系
qq : 1759435876
微信 : 17711405764
我将第一时间删除并道歉 谢谢 !

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值