flask入门(二)
程序员文章站
2022-04-09 14:12:43
1 HTTP方法分类 2 访问请求数据request 3 文件上传 4 静态文件URL 5 会话之session与cookie 5.1 cookie之参数设置 5.2 cookie之三板斧 设置cookie: set_cookie 获取cookie:request.cookie 移除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()
上一篇: python-正则表达式
下一篇: Rails命令行常用操作命令简明总结