1.FLASK简单的示例
test.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from flask import Flask
#导入Flask
app = Flask(__name__)
#创建一个Flask实例
#设置路由,即url
@app.route('/')
@app.route('/index')
#url对应的函数
def index():
return "hello world"
#这个不是作为模块导入的时候运行,比如这个文件为aa.py,当python aa.py就执行这个代码。如果是在其他文件import的话,不执行这个文件。(这个属于python的基础知识)
if __name__ == '__main__':
# 设置监听地址 端口
app.run(host="0.0.0.0",port=50000)
python test.py
* Running on http://0.0.0.0:50000/ (Press CTRL+C to quit)
测试:
curl 10.227.101.154:50000/
hello world
2.FLASK中的请求应用示例
#!/usr/bin/env python
import json
#导入Flask
app = Flask(__name__)
#创建一个Flask实例
#设置路由,即url
@app.route('/')
@app.route('/index')
#url对应的函数
def index():
return "hello world"
@app.route('/login',methods=['POST', 'GET'])
def login():
error=None
if request.method == 'POST':
req = json.loads(request.data)
if 'username' in req:
return "name: " + req['username']
elif request.method == "GET":
return "it is get"
#这个不是作为模块导入的时候运行,比如这个文件为aa.py,当python aa.py就执行这个代码。如果
是在其他文件import的话,不执行这个文件。(这个属于python的基础知识)
if __name__ == '__main__':
app.run(host="0.0.0.0",port=50000)
1.路由
使用路线()装饰器把函数绑定到URL
例:
@app.route('/')
def index():
return 'Index Page'
2.变量规则
可以在URL中添加变量,并设置参数类型
@app.route('/user/<username>')
def show_user_profile(username):
# show the user profile for that user
return 'User %s' % username
@app.route('/post/<int:post_id>')
def show_post(post_id):
# show the post with the given id, the id is an integer
return 'Post %d' % post_id
@app.route('/path/<path:subpath>')
def show_subpath(subpath):
# show the subpath after /path/
return 'Subpath %s' % subpath
3. URL后加/和不加的区别
@app.route('/projects/')
def projects():
return 'The project page'
@app.route('/about')
def about():
return 'The about page'
project()可以被/ projects和/ projects /访问
about()只能被/ about访问,/ about /访问会报404错误
4.http方法
默认情况下路由只响应GET请求,可以使用路线()装饰器的方法参数来处理HTTP方法
from flask import request
@app.route('/login', methods=['GET', 'POST'])
def login():
if request.method == 'POST':
return “post”
else:
return "get"
5.请求对象
6.文件
文件上传
使用请求的文件属性
@ app.route('/ upload',methods = ['GET','POST'])#上传文件
def upload_file():
if request.method == 'POST':
if 'file' not in request.files:
return "23"
f = request.files['file']
f.save('/uploaded_file.json')
return "upload sucessful"
如果想要知道文件上传之前其在客户端系统中的名称,使用可以 filename
属性。但是请牢记这个值是可以伪造的,永远不要信任这个值。如果想要把客户端的文件名作为服务器上的文件名,可以通过WERKZEUG的提供 secure_filename()
函数:
from werkzeug.utils import secure_filename
f = request.files['file']
f.save('/' + secure_filename(f.filename))
文件下载
def get(self):
path = "/virus/etc/sip_analysis_config/config"
filename = 'exampel.xls'
download_name = "user_asset"
if os.path.isfile(os.path.join(path, filename)):
response = send_from_directory(path, filename, as_attachment=True)
response.headers["Content-Disposition"] = "attachment;" "filename*=UTF-8''{0}.xls".format(
urllib.quote(download_name.encode('utf-8')))
response.headers["Content-Type"] = "application/x-xls"
return response
else:
return abort(404)
7.cookie
什么是饼干吗?如果单单从数据结构的角度来说,它可以被理解成用来保存数据的一个字典,由一组组键值对组成。如果从作用上来说,我们知道的的Http协议是一种无状态的协议。什么叫无状态呢,就是本次的客户端请求不会保留上一次客户端请求的状态,简单点说就是这样会要求我们每次在浏览器中点开一个网站的链接都会输一次账户和密码.cookie就是用来解决这个问题的。
为了解决上述问题,我们第一次登录web服务器,服务端就会在它的响应中的Set-Cookie字段中发送一些键值对,这就包括一个会话ID以及其他一些信息(也包括我们自定义的cookie中的键值对),并告诉客户端在本地缓存这个cookie。然后客户端以后进行链接时每次都会发送这个会话ID,服务器一看是哪个会话ID就知道是哪个客户端发起的链接了,就不会要求我们再次输账户和密码验证了。
设置的cookie
@ app.route('/ cookie')
def cookie_test():
response = make_response(“set cookies”');
response.set_cookie('Name','Hyman')
返回回复
设置cookie的时常
outdate = datetime.datetime.today()+ datetime.timedelta(days = 30)
response.set_cookie('Name','Hyman',expires = outdate)
获取cookie
@ app.route('/ get_cookie')
def get_cookie():
name = request.cookies.get('Name')
返回名称
删除的cookie
共有三种方法可以删除一个cookie的:
(1)可以通过在浏览器中设置来清除cookie。
(2)使用Response的set_cookie进行清除
@ app.route('/ del_cookie')
def del_cookie():
response = make_response('delete cookie')
response.set_cookie('Name','',expires = 0)
返回响应
(3)使用Response的delete_cookie方法。
@ app.route('/ del_cookie2')
def del_cookie2():
response = make_response('delete cookie2')
response.delete_cookie('Name')
返回响应
8.重定向
@ app.route(“/ index.html”,methods = [“GET”])
def login_redirect():
return redirect(“https://soc.sangfor.com.cn/”)
9.session
设置会话
从烧瓶中导入会话
app.secret_key = 'fkdjsafjdkfdlkjfadskjfadskljdsfklj'
#session
#设置会话
@ app.route( '/ set_session')
DEF set_session():
会话[ 'UID'] = '1223'
返回'设置会话'
设置sesison存活时间
#setposition session设置过期时间
@ app.route('/ set_session /')
def set_session():
#开启会话持久化存储
session.permanent = True
#设置会话存活时间为1分钟如果不给当期的存活时间则为1个月
app.permanent_session_lifetime = timedelta(seconds = 60)
session ['uid'] ='1'
返回'设置会话'
获取会话
#获取会话
@ app.route('/ get_session /')
def get_session():
返回'uid的值为{}'。format(session.get('uid'))
删除会话
#删除session
@ app.route('/ del_session /')
def del_session():
#删除key为uid的会话值
#session.pop('uid')
#删除所有会话
session.clear()
返回'删除成功'