Flask框架简实例介绍

发布时间:2024-07-17 16:02:00

Flask是一个轻量级的Python Web框架,被称为微型框架。它提供了一个稳健的核心,并通过扩展实现其他功能,这使得Flask既灵活又易于使用。

1. 简单实例:Hello World网页

  • 目的:创建一个简单的Hello World网页,用于展示Flask的基本用法。

  • 步骤

  1. 导入Flask模块。

  2. 创建一个Flask应用实例。

  3. 定义一个路由和对应的视图函数,用于处理请求并返回响应。

  4. 运行应用。

Flask框架的优势

  • 轻量级:Flask保持核心功能简单,易于理解和使用。

  • 灵活性:通过扩展机制,可以根据项目需求添加所需功能。

  • 社区支持:Flask拥有庞大的社区和丰富的文档,便于学习和解决问题。

from flask import Flask,request
import time, datetime, requests,json,os
from urllib.parse import urlparse, parse_qs
from selenium import webdriver
app=Flask(__name__)

'''
需要扩展包:
 pip install flask  -i https://pypi.tuna.tsinghua.edu.cn/simple

'''

@app.route('/')
def index():
    password = request.args.get("password")
    url      = request.args.get("url")
    if not password:
        return api_return(401, 'Password is null')
    if not url:
        return api_return(401, 'url is null')

    if  password != 'c32':
        return api_return(401, 'Password Is Error')
    else:
        try:
            apk = milu_apk_url(url)
            data = {'apk': apk,'status':'ok'}
            if apk:
                if apk==2:
                    data = {'apk': '', 'status': 'no'}
                    return api_return(200, 'success', 0, data)
                milu_apk_del(apk)
                return api_return(200,'success',0, data)
            else:
                return api_return(404, '获取下载包异常', 0, {})
        except Exception as e:
            return api_return(404, str(e), 0, {})
def api_return(code=200,message='success',count=0,data={}):
    result = {
        'code' : code if code is not None else '0',
        'msg'  : message if message is not None else 'success',
        'count': count if count is not None else '0',
        'data' : data if data is not None else [],
    }
    return json.dumps(result)

def milu_apk_del(apk):
    parsed_url = urlparse(apk)
    path = parsed_url.path
    filename = path.split('/')[-1]
    file_path = 'C:/Users/Administrator/Downloads/'+filename
    # 文件存在,删除它
    if os.path.exists(file_path):
        os.remove(file_path)
    if os.path.exists(file_path+'.crdownload'):
        os.remove(file_path+'.crdownload')

def milu_apk_url(url):
    is_webdriver = False
    i = 0
    while True:
        if i>3:
            return False
        headers = {
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3',
            'Custom-Header': 'Custom-Value',
            'Host': 'and.milu.com'
        }
        response = requests.get(url, headers=headers, allow_redirects=False)
        if response.status_code == 302:
            return response.headers['Location']
        elif '游戏已经下线' in response.content.decode('utf-8'):
            return 2
        else:
            if is_webdriver == False:
                opt = webdriver.ChromeOptions()
                # opt.add_argument("--headless")
                # opt.add_argument("--no-sandbox")
                # opt.add_argument("--disable-gpu")
                # opt.add_argument("--disable-dev-shm-usage")
                # # opt.add_argument('--host-resolver-rules=MAP report.huatuo.qq.com 127.0.0.1')
                # opt.add_argument('--hide-scrollbars')
                # opt.add_argument('blink-settings=imagesEnabled=false')
                browser = webdriver.Chrome(options=opt)
                browser.get(url)
                time.sleep(10)  # 加载等待
                is_webdriver = True

        time.sleep(5)
        i = i+1



if __name__ == "__main__":
    app.debug = True
    app.run(host='0.0.0.0', port=1216)