Web渗透

[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()

  1. 服务器应对文件下载请求
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()
上一篇 下一篇

猜你喜欢

热点阅读