Flask入门request session cookie(二)
1 HTTP方法分类
1 GET
浏览器告知服务器:只获取页面上的信息并发给我。这是最常用的方法。
2 HEAD
浏览器告诉服务器:欲获取信息,但是只关心消息头 。应用应像处理 GET 请求一样来处理它,但是不分发实际内容。在Flask中你完全无需人工干预
3 POST
浏览器告诉服务器:想在URL上 发布新信息。并且服务器必须确保数据已存储且仅存储一次。这是 HTML 表单通常发送数据到服务器的方法。
4 PUT
类似 POST 但是服务器可能触发了存储过程多次,多次覆盖掉旧值。你可能会问这有什么用,当然这是有原因的。考虑到传输中连接可能会丢失,在 这种 情况下浏览器和服务器之间的系统可能安全地第二次接收请求,而 不破坏其它东西。因为 POST 它只触发一次,所以用 POST 是不可能的。
5 DELETE
删除给定位置的信息。
6 OPTIONS
给客户端提供一个敏捷的途径来弄清这个 URL 支持哪些 HTTP 方法。 从 Flask 0.6 开始,实现了自动处理。
2 访问请求数据request
@app.route('/request/')
def get_http_message():
print('获取完整的请求url',request.url)
print('获取去掉get传参的url',request.base_url)
print('获取主机名部分的url',request.host_url)
print('获取路由地址',request.path)
print('获取请求的方法',request.method)
print('获取get传参',request.args['name'])
print('获取get传参',request.args.get('name','该key不存在'))
request.args.getlist(key) #当key值存在相同时
print('获取form表单传递过来的数据',request.form)
print('获取form表单文件上传的数据',request.files)
print('获取请求头信息',request.headers)
print('获取cookie信息',request.cookies)
print('获取传递过来的json',request.json)
return 'request对象'
应用到验证登录界面
from flask import Flask,request
@app.route('/login', methods=['POST', 'GET'])
def login():
error = None
if request.method == 'POST':
if valid_login(request.form['username'],
request.form['password']):
return log_the_user_in(request.form['username'])
else:
error = '不合法username/password'
return render_template('login.html', error=error)
当访问form中属性不存在时,会抛出一个特殊的 KeyError 异常,你可以像捕获标准的 KeyError 一样来捕获它,不捕获它会显示一个 HTTP 400 Bad Request 错误页面。
因此可以采用args属性来访问URL中提交的参数
value = request.args.get('name','')
推荐使用该方式访问URL,因为用户可能会修改 URL,向他们展现一个 400 bad request 页面会影响用户体验。
3 文件上传
HTML表单中指定enctype = 'multipart/form-data'属性,已上传的文件存储在内存中或者文件系统的临时位置,可以通过request.files来进行访问,每个上传的文件都会存储在这个字典里.
from flask import request,Flask
@app.route('/upload',methods=['GET','POST'])
def upload_file():
if request.method == 'POST':
file = request.files['file_name'] #文件存储是一个字典,采用键值对方式取值
flie.save('/usr/local/file.py') #可以保存到本地文件系统
#如果你要把文件按客户端提供的文件名存储在服务器上,文件名的访问最好采用secure_filename
file.save('/usr/local/file.py'+ secure_filename(file.filename))
4 静态文件URL
一般Web应用会需要静态文件渲染页面,通常是CSS与JavaScript文件.Flask的实现方法是在包中或者模块的所在目录创建一个名为static的文件夹,在应用中通过/static访问.
给静态文件生成url
url_for('static',filename='style.css')
对应文件就存储在static/style.css
5 会话之session与cookie
5.1 cookie之参数设置
cookie常见参数设置:
response.set_cookie(
key, #键
value, #值
max_age,#以秒为单位的cookie存活时间
expires,失效时间需要datetime的对象
path = '/',存储的路径
)
5.2 cookie之三板斧
- 设置cookie: set_cookie
@app.route('/set_cookie/')
def set_cookie():
response = make_response('设置cookie')
response.set_cookie('name','zhangsan') #不设置存活时间 默认为当期浏览会话结束
response.set_cookie('name','zhangsan',max_age=10) #设置存活时间为None
expires = time.time()+10
response.set_cookie('name','zhangsan',expires=expires) #设置存活时间为时间戳的秒数
return response
- 获取cookie:request.cookie
@app.route('/get_cookie/')
def get_cookie():
print(request.cookies)
var = request.cookies.get('name','获取不到name的值')
return '获取cookie的值为{}'.format(var)
- 移除cookie: delete_cookie
@app.route('/del_cookie/')
def del_cookie():
response = make_response('清除cookie')
response.delete_cookie('name') #移除cookie的值
expiraes = time.time()-10
response.set_cookie('name','',expires=expires) #不设置存活时间 默认为当期浏览会话结束
return response
5.3 session之三板斧
- 设置session
@app.route('/set_session/')
def set_session():
#设置session的持久化
session.permanent = True
#设置session存活时间为10分钟
app.permanent_session_lifetime = timedelta(minutes=10)
session['username'] = 'wangwu'
return '设置session'
- 获取session
#获取session
@app.route('/get_session/')
def get_session():
val = session.get('username','username值不存在')
return '获取的seesion的值为{}'.format(val)
- 移除session
#移除session
@app.route('/del_session/')
def del_session():
username = session.pop('username')
return '删除了session中{}的值'.format(username)
附:以登录注册作为例子
from flask import Flask, session, redirect, url_for, request
app = Flask(__name__)
@app.route('/login', methods=['GET', 'POST'])
@app.route('/')
def index():
#登录用户显示login username
if 'username' in session:
return 'login {}'.format(session['username'])
return '还未登录'
def login():
#登录界面
if request.method == 'POST':
session['username'] = request.form['username']
return redirect(url_for('index'))
return 'method is support'
@app.route('/logout')
def logout():
#注销退出登录
session.pop('username', None)
return redirect(url_for('index'))
app.secret_key = 'a3f:4AD3/3yXR~XHH!jm[s]daLWX/,?RT'
if __name__ == '__main__':
app.run()
Flask入门request session cookie(二)的更多相关文章
- flask中的session cookie 测试 和 项目中的用户状态保持
# -*- coding:utf-8 -*- # Author: json_steve from flask import Flask, current_app, make_response, req ...
- Flask入门很轻松 (二)
转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959454.html 请求钩子 在客户端和服务器交互的过程中,有些准备工作或扫尾工作需要处理,比 ...
- 记录:http协议+response+request+session+cookie
1.http协议 http协议也叫作超文本传输协议,定义了浏览器向怎样向服务器请求资源和服务器怎样将资源传给浏览器.http协议是面向事务的应用层协议,是万维网能够传递资源的可靠保障. 目前http协 ...
- flask 入门 之 Python Shell (二)
创建迁移仓库: 1.安装工具: pip install flask_migarte 2.代码: #encoding:utf-8 from flask_sqlalchemy import SQLAlch ...
- Flask 上下文管理-- (session,request,current_app的传递)--类似本地线程实现,以及多app应用
Flask session,request,current_app的传递 请求上下文的作用 -- 封装请求相关得数据(request,session) 请求上下文 request session re ...
- Flask入门系列(转载)
一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...
- 第一篇 Flask基础篇之(配置文件,路由系统,模板,请求响应,session&cookie)
Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收http请求并对请求进行预处理,然后 ...
- JavaWeb学习记录总结(二十九)--Servlet\Session\Cookie\Filter实现自动登录和记住密码
一.Servlet package autologin.servlet.login; import java.io.IOException;import java.security.MessageDi ...
- Flask框架里的cookie和session
# -*- encoding: utf-8 -*- #cookie 相关的操作,依赖与make_response库,调用cookie依赖request模块 from flask import Flas ...
随机推荐
- 【2-SAT】【并查集】NOIp模拟题 植树方案 题解
一个类似2-SAT的思想,但是简化了很多.只需要用到并查集实现. 题目描述 企鹅国打算种一批树.所谓树,就是由$N$个结点与$N-1$条边连接而成的连通无向图.企鹅国的国王对于这些树有下列要求 ...
- 并排的两个div之间会有空隙
两个并排的DIV会有如下图所示的空隙 是因为 代码中 两个DIV之前有个 ’回车‘ 这么写就OK了 可是为什么会有这种问题呢,是因为浏览器将 空格.回车.tab键等字符都当做一个空格处理,所以当你回车 ...
- Chapter 6
6.1 顶点与输入布局 Direct3D 的顶点可以包含除空间坐标外的其他数据.如: struct Vertex1 { XMFLOAT3 Pos; XMFLOAT4 Color; }; struct ...
- Eclipse for PHP Developers 配置记录
[原文发表在 http://osworld.sinaapp.com/post/18.html] 图都粘贴不了,直接看上面的原文吧~~~ 我比较懒,还是比较依赖IDE环境做开发的.所以为了学PHP开发, ...
- Mybatis 问题梳理
问题一:There is no getter for property ... 接口 **Mapper.java 中执行方法: public List<E> listOption(Stri ...
- Python爬虫常用之PyQuery
PyQuery是解析页面常用的库.是python对jquery的封装.下面是一份解析基本页面的代码.后期用到复杂或者实用的方式再增加. from pyquery import PyQuery as p ...
- 如何写一个简单的webserver(一):最简实现
本文主要讲述如何用C/C++在Linux环境下写一个简单的支持并发的web服务器,并不考虑服务器的健壮性.安全性.性能等一系列因素. 在本文中,该服务器仅支持GET请求. 项目地址:https://g ...
- mysql 锁问题 (相同索引键值或同一行或间隙锁的冲突)
1.使用相同索引键值的冲突 由于mysql 的行锁是针对索引加的锁,不是针对记录加的锁,所以虽然是访问不同行的记录,但如果是使用相同的索引键,是会出现锁冲突的.设计时要注意 例如:city表city_ ...
- 使用PagerSlidingTabStrip实现顶部导航栏
使用PagerSlidingTabStrip配合ViewPager实现顶部导航栏. 效果图如下: PagerSlidingTabStrip是github上的一个开源项目,项目地址如下 ...
- Unity 判断Animatior是否播放完
public Animator animator; void Start() { animator = this.GetComponent<Animator>(); } void Upda ...