[Python] Flask框架基础使用
2020-05-12 本文已影响0人
半为花间酒
转载请注明:陈熹 chenx6542@foxmail.com (简书号:半为花间酒)
若公众号内转载请联系公众号:早起Python
内容是以前的学习笔记,内容不全,主观性较大,部分基础知识未展示
通用知识
1. 广度优先
class Queue: # 建队列
def __init__(self):
self.st = [] # python中列表是队列
def fetch(self): # 出列
return self.st.pop(0)
def enter(self,obj): # 入列
self.st.append(obj)
def empty(self):
return len(self.st) == 0
深度优先和广度优先简单认知区别就在于取出元素
深度优先取最后一个,广度优先取第一个
2. 深度优先
递归的程序是采用深度优先
class Stack: # 建栈
def __init__(self):
self.st = [] # python中列表是栈
def pop(self): # 出栈
return self.st.pop()
def push(self,obj): # 压栈
self.st.append(obj)
def empty(self):
return len(self.st) == 0
Flask框架
1. 简易框架
import flask
app = flask.Flask(__name__) # 初始化flask对象
# flask框架开头
@app.route('/') # 指明路由器地址
def test():
try:
with open("test.html",'r') as file:
data = file.read()
return data
except Exception as error:
return str(error)
if __name__ == '__main__':
app.run()
2. 服务器获取GET发送的请求
import flask
# 路由器指定中默认methods=["GET"]
province = flask.request.args.get('province')
city = flask.request.args.get('city')
# 第二种形式
province = flask.request.args.get('province') if 'province' in flask.request.args else ''
第二种写法可防止出现异常,避免客户端不提交特定关键字而报错
3. 服务器获取POST发送的请求
客户端最终以表单form形式post
import flask
app = flask.Flask(__name__)
@app.route('/',methods=["POST"])
def index():
province = flask.request.form.get('province') if 'province' in flask.request.form else ''
city = flask.request.form.get('city') if 'city' in flask.request.form else ''
if __name__ == '__main__':
app.run()
如果是get和post混合,则路由指定改为:
@app.route('/',methods=["GET","POST"])
同时flask.request.args.get()
和flask.request.form.get()
实际可以改为:
flask.request.values.get()
- 服务器应对文件下载请求
import flask
import os
app = flask.Flask(__name__)
@app.route('/')
def download():
if 'fileName' not in flask.request.values:
return '图像.jpg' # 客户端第一次请求时返回下载的文件名
else:
fileName = flask.request.values.get('fileName')
data = b'' # 创建空的二进制
try:
if fileName != '' and os.path.exists(fileName): # 请求存在且服务器磁盘文件存在
with open(fileName,'rb') as file: # 以二进制读取
data = file.read()
return data # 返回二进制
except Exception as error:
return str(error).encode() # 异常也以二进制返回
if __name__ == '__main__':
app.run()
5. 服务器应对文件上传请求
import flask
app = flask.Flask(__name__)
@app.route('/upload',methods=["POST"])
def upload():
try:
if 'fileName' in flask.request.values:
fileName = flask.request.values.get('fileName') # get方法获取地址中文件名
data = flask.request.get_data() # 必须是纯二进制数据
with open(f'upload {fileName}','wb') as file:
file.write(data)
msg = 'OK'
else:
msg = 'False'
except Exception as error:
msg = str(error)
return msg
if __name__ == '__main__':
app.run()
6. 服务器利用文档创建表格
import flask
import os
app = flask.Flask(__name__)
@app.route('/')
def show():
if os.path.exists('student.txt'):
st = '<h3>学生信息表</h3>'
st = st + '<table border="1",width="300">'
with open("student.txt",'rt') as file:
while True:
s = file.readline().strip('\n')
if s == '':
break
s = s.split(',')
st += '<tr>'
for i in range(len(s)):
st += '<td>' + s[i] + '</td>'
st += '</tr>'
st += '</table>'
return st
if __name__ == '__main__':
app.run()