ChatGPT写Flask-Demo——有体验地址

news2025/4/10 17:16:29

ChatGPT中API的试用


最近ChatGPT智能AI很火,可以写代码,DEBUG,写简历等等
上去查看了一下,是可以调用API的,本着学习的态度就是用这个款AI辅助我写了一个demo(本人原来对flask只懂一点点)

目录

    • 0x01主页
    • 0x02图片API
    • 0x03上传图片
    • 0x04调用的API自动保存
    • 0x05上传视频
    • 0x06日志功能
    • 0x07目录结构
    • 0x08APP.py
    • 0x09Key.py
    • 0x0A结语


先看效果:

0x01主页

主要功能是验证API,可以用默认的(考虑到多人使用,所以用自己的更好)
在这里插入图片描述

0x02图片API

主要功能就是自带的API,创建图片、变体图片、编辑图片
在这里插入图片描述

0x03上传图片

作为一个网站怎么能没有上传口 =。= 在这里插入图片描述

0x04调用的API自动保存

主要是第二部调用的api创建的图片等进行自动保存
在这里插入图片描述

0x05上传视频

上传视频,AI写的,真牛啊
在这里插入图片描述

0x06日志功能

AI还写了自动后台记录日志功能
在这里插入图片描述

0x07目录结构

在这里插入图片描述

0x08APP.py


@app.route('/')
def index():

    key = {"api":-1}
    if k != "":
        key["key"]=1
    else:
        key["key"]=0

    logger.info(f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}>")
    return render_template('index.html', key=key)

@app.route('/submit', methods=['POST'])
def submit():
    key = {"api":-1}
    if k != "":
        key["key"] = 1
    else:
        key["key"] = 0
    logger.info(f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}>")
    return render_template('index.html', key=key)


@app.route('/image')
def image1():
    key = {"key":0}
    logger.info(f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}>")
    return render_template('image.html',key=key,key2=key,key3=key)


@app.route('/text')
def text():
    key = -1
    filenames = os.listdir("static\\text\\")
    # 打印文件名
    items_gx = []
    for filename in filenames:
        items_gx.append(f"text/{filename}")
    logger.info(f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}>")
    return render_template('text.html',key=key,items_gx=items_gx)


@app.route('/test_api',methods=['POST'])
def test_api():
    key = {"key":1}
    timestamp = time.time()
    try:
        org = request.form['org']
        api = request.form['api_key']
        f = open("temp", "w", encoding="utf-8")
        f.write(api)
        f.close()
        openai.organization = org
        openai.api_key_path = "temp"
        api_dict[org] = api
        try:
            k = openai.Model.list()
            key["api"]=1
            f = open("share-api/org", "a+", encoding="utf-8")
            f.write(f"[{timestamp}]{org}\n")
            f.close()
            f = open("share-api/api", "a+", encoding="utf-8")
            f.write(f"[{timestamp}]{api}\n")
            f.close()
        except:
            key["api"]=0
            openai.organization = "org-tuPuSBX5NRzKaE06CVvU2dHD"
            openai.api_key_path = "api_key.txt"
        logger.debug(f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<[{api_dict}>")
        return render_template('index.html', key=key)
    except Exception as e:
        logger.debug(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<[{e}>")
        return e


@app.route('/img_sub1',methods=['POST'])
def img_sub1():
    key ={"key":1}
    keyn = {"key": 0}
    items = []
    try:
        prompt = request.form['prompt']
        size = request.form['size']
        num = int(request.form['num'])
        if int(num) >10:
            for i in range(0,num,10):
                sleep(31)
                ret = openai.Image.create(prompt=prompt, n=10, size=size)
                for i in ret['data']:
                    items.append(i['url'])
        else:
            ret = openai.Image.create(prompt=prompt, n=num, size=size)
            for i in ret['data']:
                items.append(i['url'])
        for i in items:
            md5_name = md5(i)
            response = requests.get(i)
            # 打开图片
            img = Image.open(BytesIO(response.content))
            img.save(f"{save_cimg}{md5_name}.png", optimize=True, quality=50)
            # urllib.request.urlretrieve(i, f"{save_cimg}{md5_name}.png")
        logger.info(f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}>::<{keyn}>::<{items}>")
        return render_template('image.html', key=key,key2=keyn,key3=keyn, items=items)
    except openai.error.OpenAIError as e:
        stat = f"[{e.http_status}]{e.error}"
        logger.debug(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<[{e.http_status}]{e.error}>")
        return stat



@app.route('/img_sub2',methods=['POST'])
def img_sub2():
    key ={"key":1}
    keyn = {"key": 0}
    items = []
    file_src1 = ""
    file_src2 =""
    try:
        image = request.form['main']
        mask = request.form['mask']
        if image=="" or mask =="":
            image = file_src1
            mask = file_src2
        prompt = request.form['prompt']
        size = request.form['size']
        num = int(request.form['num'])
        if int(num) > 10:
            for i in range(0, num, 10):
                sleep(31)
                ret = openai.Image.create_edit(image=image,mask=mask,prompt=prompt, n=int(num), size=size)
                for i in ret['data']:
                    items.append(i['url'])
        else:
            ret = openai.Image.create_edit(image=image,mask=mask,prompt=prompt, n=int(num), size=size)
            for i in ret['data']:
                items.append(i['url'])
        for i in items:
            md5_name = md5(i)
            response = requests.get(i)

            # 打开图片
            img = Image.open(BytesIO(response.content))
            img.save(f"{save_cimg}{md5_name}.png", optimize=True, quality=50)
            # urllib.request.urlretrieve(i, f"{save_cimg}{md5_name}.png")
        logger.info(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}>::<{keyn}>::<{items}>")
        return render_template('image.html',key=keyn, key2=key,key3=keyn,items2=items)
    except openai.error.OpenAIError as e:
        stat = f"[{e.http_status}]{e.error}"
        logger.debug(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<[{e.http_status}]{e.error}>")
        return stat


@app.route('/img_sub3',methods=['POST'])
def img_sub3():
    key ={"key":1}
    keyn = {"key": 0}
    items = []
    file_src3 = ""
    try:
        image = request.form['main']
        if image=="":
            image = file_src3
        size = request.form['size']
        num = int(request.form['num'])
        if int(num) > 10:
            for i in range(0, num, 10):
                sleep(31)
                ret = openai.Image.create_variation(image=image, n=int(num), size=size)
                for i in ret['data']:
                    items.append(i['url'])
        else:
            ret = openai.Image.create_variation(image=image, n=int(num), size=size)
            for i in ret['data']:
                items.append(i['url'])
        for i in items:
            md5_name = md5(i)
            response = requests.get(i)

            # 打开图片
            img = Image.open(BytesIO(response.content))
            img.save(f"{save_cimg}{md5_name}.png", optimize=True, quality=50)
            # urllib.request.urlretrieve(i, f"{save_cimg}{md5_name}.png")
        logger.info(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}>::<{keyn}>::<{items}>")
        return render_template('image.html',key=keyn, key2=keyn, key3=key, items3=items)
    except openai.error.OpenAIError as e:
        stat = f"[{e.http_status}]{e.error}"
        logger.debug(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<[{e.http_status}]{e.error}>")
        return stat

@app.route('/upload_edit1', methods=['POST'])
def upload1():
    # 获取客户端上传的图片
    image = request.files['image']
    # 获取图片的名称
    image_name = image.filename
    dirok= mkdir_date("img\\")
    if dirok != 0:
        # 保存图片到本地
        file_src1 = f"img\\{dirok}\\{image_name}"
        image.save(file_src1)
        logger.info(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{file_src1}>")
        return "上传成功!"
    return "上传失败!"

@app.route('/upload_edit2', methods=['POST'])
def upload2():
    # 获取客户端上传的图片
    image = request.files['image']
    # 获取图片的名称
    image_name = image.filename
    dirok= mkdir_date("img\\")
    if dirok != 0:
        # 保存图片到本地
        file_src2 = f"img\\{dirok}\\{image_name}"
        image.save(file_src2)
        logger.info(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{file_src2}>")
        return "上传成功!"
    return "上传失败!"

@app.route('/upload_edit3', methods=['POST'])
def upload3():
    # 获取客户端上传的图片
    image = request.files['image']
    # 获取图片的名称
    image_name = image.filename
    dirok= mkdir_date("img\\")
    if dirok != 0:
        # 保存图片到本地
        file_src3 = f"img\\{dirok}\\{image_name}"
        image.save(file_src3)
        logger.info(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{file_src3}>")
        return "上传成功!"
    return "上传失败!"


@app.route('/gx_upload', methods=['POST'])
def gx_upload():
    key = 1
    filenames = os.listdir("static\\text\\")
    # 打印文件名
    items_gx = []
    for filename in filenames:
        items_gx.append(f"text/{filename}")
    try:
        # 获取客户端上传的图片
        image = request.files['image']
        # 获取图片的名称
        image_name = image.filename
        filename = md5(str(image_name))
        file_src_gx = f"static\\text\\{filename}.{image_name.split('.')[-1]}"
        image.save(file_src_gx)
        logger.info(
            f"[{request.remote_addr}]::[{request.method}]::{request.url}::{request.args}::<{key}::{file_src_gx}>")
        return render_template('text.html', key=key, items_gx=items_gx)
    except Exception as e:
        print(e)
        return render_template('text.html',key=0,items_gx=items_gx)


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

0x09Key.py


import os
from datetime import datetime
import hashlib
import openai
openai.organization = "org-xxxx"
openai.api_key_path = "api_key.txt"




def mkdir_date(dir):
    nows = datetime.now()
    date_str = nows.strftime('%Y-%m-%d')
    try:
        # 创建文件夹
        os.mkdir(dir+date_str)
        return date_str
    except Exception as e:
        return date_str


def md5(str1):
    m = hashlib.md5()
    m.update(str1.encode('utf-8'))

    return str(m.hexdigest())

0x0A结语

对于一个只会一点点代码水平的人来说,这个AI也是够了,解决能力大于某度,过于强大

源码整合包:传送门

Demo地址:传送门(请勿攻击)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/88342.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于51单片机的数字电压表(ADC0832)(Proteus仿真+程序)

编号&#xff1a;29 基于51单片机的数字电压表&#xff08;ADC0832&#xff09; 功能描述&#xff1a; 本设计由51单片机最小系统ADC0832模块两路模拟量输入模块液晶1602显示模块 1、主控制器是AT89C82单片机 2、ADC0832模数转换器进行A/D转换&#xff0c;读取电压两路数据&a…

栅格瓦片和矢量瓦片

地图瓦片 地图瓦片的诞生 在以前没有瓦片的概念时&#xff0c;由于地图要素多、范围大等特点导致地图数据量很大&#xff0c;如果从浏览器可视化地图就对网络和数据渲染能力有高的要求&#xff0c;所以导致瓦片诞生以前&#xff0c;地图多在pc电脑中桌面软件使用。随着互联网…

【YOLOv5】LabVIEW+YOLOv5快速实现实时物体识别(Object Detection)

前言 前面我们给大家介绍了基于LabVIEWYOLOv3/YOLOv4的物体识别&#xff08;对象检测&#xff09;&#xff0c;今天接着上次的内容再来看看YOLOv5。本次主要是和大家分享使用LabVIEW快速实现yolov5的物体识别&#xff0c;本博客中使用的智能工具包可到主页置顶博客LabVIEW AI视…

一个简单的MATLAB脚本——快速行进算法(FMM))

一个简单的MATLAB脚本——快速行进算法&#xff08;FMM&#xff09; 介绍快速行进算法&#xff08;FMM&#xff09;的简单MATLAB脚本&#xff0c;不到20行代码实现快速行进算法的运算结果&#xff0c;而且计算速度非常快。给了两个实例模型来说明计算结果。 文章目录一个简单的…

unicloud生成微信小程序分享码

一&#xff0c;方案 看了官方的文档&#xff0c;获取小程序码有三种&#xff0c;我采用的是第二种&#xff1a;生成数量不受限制的分享码。 对应的官方文档&#xff1a;https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/qr-code/getUnlimitedQRCode.…

MySQL 锁

在之前的文章有多次提到&#xff0c;MySQL在数据更新和性能优化上会用到锁机制。我们在实际的应用中也经常会遇到锁相关的问题&#xff0c;即使很多时候我们并没有人为的为数据库添加锁&#xff0c;但还是会出现死锁的问题&#xff0c;这是因为在我们操作数据时MySQL隐式的帮我…

java UDP通信程序DatagramSocket数据发送

首先 我们先来了解一下 UDP 首先 他是一种不可靠的网络协议 他在通信的两端 各建立一个 Socke对象 但是他们只是 发送和接收数据的对象 发送端只管发送 不会顾及接收端是否接到 接收到只负责接收数据 而不会给出发送端反馈 因此对于UDP通信的双方而言 是有没什么 客户端和服务…

架构师进阶,微服务设计与治理的 16 条常用原则

今天将从存储的上一层「服务维度」学习架构师的第二项常用能力 —— 微服务设计与治理。 如何设计合理的微服务架构&#xff1f; 如何保持微服务健康运行&#xff1f; 这是我们对微服务进行架构设计过程中非常关注的两个问题。 本文对微服务的生命周期定义了七个阶段&#xf…

正大国际期货:为什么外盘期货顺势交易这么难

要回答“为什么趋势交易这么难&#xff1f;”需要先回答&#xff1a;“为什么交易&#xff1f;”。 你应该为了抓住赚取期望利润的机会而交易&#xff0c;为了长期持续赚钱的目的而交易&#xff0c;而不是为了赚得短期利润的喜悦而交易&#xff0c;也不是为了证明你的市场分析…

音频转文字怎么转?这些方法值得一试

在日常生活中我们经常会遇到要把音频转换成文字的情况&#xff0c;很多小伙伴还在使用传统的方法&#xff0c;一边播放一边记录。虽然这样能解决问题&#xff0c;但是需要花费很多时间&#xff0c;效率特别低。我们不妨尝试使用一些转换软件&#xff0c;这样就能节省很多时间了…

界面组件Kendo UI for Angular——让应用数据显示更直观!(二)

Kendo UI致力于新的开发&#xff0c;来满足不断变化的需求&#xff0c;通过React框架的Kendo UI JavaScript封装来支持React Javascript框架。Kendo UI for Angular是专用于Angular开发的专业级Angular组件&#xff0c;telerik致力于提供纯粹的高性能Angular UI组件&#xff0c…

Word处理控件Aspose.Words功能演示:在 Java 中将 Word DOCX 转换为 Markdown

如今&#xff0c;Markdown ( MD ) 格式被广泛用于编写在线文章、博客和文档。但是&#xff0c;在大型文档的情况下&#xff0c;它的语法变得难以记忆和书写。为方便起见&#xff0c;您可以在 MS Word 中编写内容&#xff0c;然后将DOCX文件转换为 Markdown。为了以编程方式执行…

nacos--基础--5.2.2--集成--SpringCloud--服务注册,发现,负载均衡

nacos–基础–5.2.2–集成–SpringCloud–服务注册&#xff0c;发现&#xff0c;负载均衡 代码位置 https://gitee.com/DanShenGuiZu/learnDemo/tree/master/nacos-learn1、介绍 服务发现客户端 从服务发现中心获取服务列表服务消费 通过负载均衡获取服务地址 2、添加依赖 …

jdk安装配置教程2022年12月最新版

这两天配了好几遍jdk&#xff0c;删了又下下了又删&#xff0c;总结一下&#xff0c;也算有点收获 1. 下载&#xff1a;官网Java Downloads | Oracle jdk1.8在下面&#xff0c;上面是最新的jdk17和jdk19 2.下载完成后&#xff0c;一路安装解压&#xff08;我撞在了C盘&#…

IfcOpenShell简明教程【BIM】

IFC 是用于存储 BIM 数据的 ISO 标准格式。 IfcOpenShell 是一个包含 Python 库的项目&#xff0c;可以用来解析 IFC 文件。 1、下载安装IfcOpenShell 首先&#xff0c;我们需要下载并安装 IfcOpenShell python。 目前没有 IfcOpenShell 的 API 文档&#xff0c;但考虑到它主…

Vector源码解析

Vector源码解析 简介 Vector 是一个古老的 线程安全(内部的核心方法都加了synchronized) 的容器&#xff0c;在 JDK1.0 时就已经存在&#xff0c;到如今已经很少使用。 基本结构与 ArrayList 类似&#xff0c;可以认为是线程安全版本的 ArrayList&#xff0c;但因为 Vector …

BCN-PEG-FITC 环丙烷环辛炔聚乙二醇荧光素 BCN-PEG-荧光素

双环[6,1,0]壬炔 (BCN) &#xff08;环丙烷环辛炔&#xff09;可以通过无铜的点击化学与叠氮化物标记的分子或生物分子反应生成稳定的三氮唑连接。 产品名称 BCN-PEG-FITC 环丙烷环辛炔聚乙二醇荧光素 中文名称 环丙烷环辛炔聚乙二醇荧光素 英文名称 BCN-PEG-FITC 分子…

基于Android的二维码识别系统的研究 与实现

XXXX 本科生毕业设计(论文) 学院(系)&#xff1a; XX 专 业&#xff1a; XX 学 生&#xff1a; XX 指导教师&#xff1a; XX XX 完成日期 年 月 XXX本科生毕业设计&#xff08;论文&#xff09; 基于Android的二维码识别系统的研究 与实现 Research and Implementati…

防重放、防篡改攻击的实现(Java版)

文章目录一、问题描述1、什么是重放攻击、篡改攻击&#xff1f;2、如何模拟重放攻击、篡改攻击&#xff1f;2.1、重放攻击模拟方式2.2、篡改攻击模拟方式二、解决方案三、在项目中使用1、项目简介2、项目实践一、问题描述 1、什么是重放攻击、篡改攻击&#xff1f; 1、重放攻击…

【SSM框架】为集合类型属性赋值

&#x1f353;个人主页&#xff1a;个人主页 &#x1f352;系列专栏&#xff1a;SSM框架 目录 1.为集合类型属性赋值 ①为List集合类型属性赋值 ②为Map集合类型属性赋值 2.p命名空间 3.引入外部属性文件 1.为集合类型属性赋值 ①为List集合类型属性赋值 在Clazz类中添加…