开发者服务器
- 只适合用来做开发的服务器
- 不能应用于实际项目上
- 优点
- 对开发者比较友好
- 自动重启
- 丰富的日志
- 页面调试
- 缺点
- 性能低
HTTP请求方法
-
GET
- 获取,拿
- 用在从服务器获取数据,获取资源
-
POST
- 提交
- 用来向服务器提交传递(submit)
- 最多用在创建,验证
-
DELETE
- 删除
- 告诉服务器,我要删除某资源
-
PUT
- 放
- 提交
- 用来向服务器提交数据
- 通常PUT用来更新数据
-
PATCH
- 补丁
- 提交
- 用来向服务器提交数据
- 通常PATCH用来差量更新数据
Flask设置请求方法
- 默认支持get请求
- 想要支持自定义请求
@app.route("/xxx/", methods=["GET", "POST"])
路由器router的获取
# python中的写法
@app.route("/register/", methods=["GET", "POST"])
def register():
return
@app.route("/doregister/", methods=["GET", "POST"])
# 路由返回的是字符串,可以在返回值里面直接加标签代码:<a>lable</a>
def do_register():
return
{#html 中的写法#}
<a href="register">login</a>
<form action="/doregister/" method="post">
Flask中的View
-
View中存在两个重要的对象
-
双R
- Request
- 客户端发送的请求
- 里面包含了客户端的各种信息
- Request不是客户端创建的
- 是框架根据客户端的数据(请求报文)创建的
- 属于Flask中的内置对象,不可修改
- 请求的生命周期:从Request开始到Response结束
- Request属性
- url 完整请求地址
- base url去掉GET参数的URL
- host url 只有主机和端口号的URL
- path 请求中的路径
- method 请求方法
- remote addr 请求的客户端地址
- args GET请求参数
- form POST请求参数
- files 文件上传
- headers 请求头
- cookies 请求中的cookie
- Response
- 服务器返回给客户端的数据
- 由开发者创建
- 存在很多种创建方式
- 直接返回字符串
return 'log in success'
- 可以返回模板
return render_template('login.html')
- 直接返回Response对象
- 直接创建 Response()
- 也可以使用 make_response(data, code)
- 第一个参数是内容, 第二个参数是状态码
- 直接返回字符串
- Request
-
响应的类型
-
直观的响应请求
return render_template('index.html')
-
重定向请求
- redirect(’/’) 重定向到根目录(首页)
- url_for 动态获取IP地址
redirect(url_for('do_register'))
do_register 是定义的 router 路由
-
主动终止请求
abort(404)
abort(Response('Hello World'))
# Response包装的一个WSGI应用
-
捕获异常
-
@app.errorhandler(404) def hello(e): return 'LOL'
-
捕获POST和GET请求
- 通过POST获取参数
username = request.form.get('username')
通过form表单来传入参数
- 通过GET获取参数
username = request.args.get('username')
通过args传入参数
- 判断请求
if request.method == 'GET'
if流程控制来处理请求
-
会话技术
-
请求周期非常短
-
HTTP无状态协议
- 协议对于事务处理没有记忆能力
-
HTTP都是短连接
- 客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接
- 从HTTP/1.1起,默认使用TCP来保持长连接,用以保持连接特性
- 客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接
-
分类
-
Cookie
- 客户端会话技术
- 通过Response写到浏览器上,数据都存储在客户端
response.set_cookie(key,value[max_age=None,exprise=None])
request.cookie.get(key)
- 特性
- 默认请求会携带本网站的所有Cookie
- Cookie不能跨网站,不同的域名,不同的ip
- Cookie不能跨浏览器
- Cookie以key-value 存储
- Cookie支持过期
- Flask默认关闭浏览器,Cookie过期
- max_age:整数,指定cookie过期时间,None永不过期
- expries:整数,可以指定具体日期(二选一)
- 删除cookie
response.delete_cookie(key)
- 缺点
- 不安全
- 明文传输
-
Session
-
服务端会话技术
-
数据都存储在服务端
-
特性
-
依赖于Cookie
-
Session以key-value存储
- 设置键值对
session['username'] = 'value'
- 获取键值对
get(key,default=None)
- 删除键值对
pop(key)
- 清除所有
clear()
- 设置键值对
-
相对安全
app.config["SECRET_KEY"] = "secret_key"
-
不能跨网站,不能跨域名
-
支持过期
-
session.permanent = True # permanent_session_lifetime设置过期时间 session.permanent_session_lifetime = timedelta(days=1)
-
-
-
-
Token (不支持Cookie的场景)
- 手机App
- 服务端会话技术
- 自定义的服务端会话技术
- 数据存储,查询,修改,令牌(唯一标识,session_key, session_id)发放完全由服务器控制
-
会话场景
- 需要数据跨越请求存在
- 延长请求中的数据的生命周期