jjzjj

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

我重来不说话 2023-12-21 原文

ChatGPT中API的试用


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

目录


先看效果:

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地址:传送门(请勿攻击)

有关ChatGPT写Flask-Demo——有体验地址的更多相关文章

  1. ruby - 从 Ruby 中的主机名获取 IP 地址 - 2

    我有一个存储主机名的Ruby数组server_names。如果我打印出来,它看起来像这样:["hostname.abc.com","hostname2.abc.com","hostname3.abc.com"]相当标准。我想要做的是获取这些服务器的IP(可能将它们存储在另一个变量中)。看起来IPSocket类可以做到这一点,但我不确定如何使用IPSocket类遍历它。如果它只是尝试像这样打印出IP:server_names.eachdo|name|IPSocket::getaddress(name)pnameend它提示我没有提供服务器名称。这是语法问题还是我没有正确使用类?输出:ge

  2. 亚特兰蒂斯的回声(中文版): chatGPT 的杰作 - 2

    英文版英文链接关注公众号在“亚特兰蒂斯的回声”中踏上一段难忘的冒险之旅,深入未知的海洋深处。足智多谋的考古学家AriaSeaborne偶然发现了一件古代神器,揭示了一张通往失落之城亚特兰蒂斯的隐藏地图。在她神秘的导师内森·兰登教授的指导和勇敢的冒险家亚历克斯·默瑟的帮助下,阿丽亚开始了一段危险的旅程,以揭开这座传说中城市的真相。他们的冒险之旅带领他们穿越险恶的大海、神秘的岛屿和充满陷阱和谜语的致命迷宫。随着Aria潜在的魔法能力的觉醒,她被睿智勇敢的QueenNeria的幻象所指引,她让她为即将到来的挑战做好准备。三人组揭开亚特兰蒂斯令人惊叹的隐藏文明,并了解到邪恶的巫师马拉卡勋爵试图利用其古

  3. ruby-on-rails - 验证电子邮件地址是 Paypal 用户 - 2

    我想验证一个电子邮件地址是否是PayPal用户。是否有API调用来执行此操作?是否有执行此操作的ruby​​库?谢谢 最佳答案 GetVerifiedStatus来自PayPal'sAdaptiveAccounts平台会为您做这件事。PayPal没有任何codesamples或SDKs用于Ruby中的自适应帐户,但我确实找到了编写codeforGetVerifiedStatusinRuby的人.您需要更改该代码以检查他们拥有的帐户类型的唯一更改是更改if@xml['accountStatus']!=nilaccount_status

  4. iNFTnews | 周杰伦18年前未发布的作品Demo,藏在了区块链技术里 - 2

    当音乐碰上区块链技术,会擦出怎样的火花?或许周杰伦已经给了我们答案。8月29日下午,B站独家首发周杰伦限定珍藏Demo独家访谈VCR,周杰伦在VCR里分享了《晴天》《青花瓷》《搁浅》《爱在西元前》四首经典歌曲Demo背后的创作故事,并首次公布18年前未发布的神秘作品《纽约地铁》的Demo。在VCR中,方文山和杰威尔音乐提及到“多亏了区块链技术,现在我们可以将这些Demos,变成独一无二具有收藏价值的艺术品,这些Demos可以在薄盒(国内数藏平台)上听到。”如何将音乐与区块链技术相结合,薄盒方面称:“薄盒作为区块链技术服务方,打破传统对于区块链技术只能作为数字收藏的理解。聚焦于区块链技术赋能,在

  5. 西安华为OD面试体验 - 2

    西安华为OD面试体验开始投简历技术面试进展工作进展开始投简历去年一整年一直在考研和工作之间纠结,感觉自己的状态好像当时的疫情一样差劲。之前刚毕业的时候投了个大厂的简历,结果一面写算法的时候太拉跨了,虽然知道时dfs但是代码熟练度不够,放在平时给足时间自己可以调试通过,但是熟练度不够那面试当时就写不出来被刷了。说真的算法学到后期我感觉最重要的是熟练度和背板子(对于我这种普通玩家来说),面试题如果一上来短时间内想不出思路就完蛋了。然后由于当时找的工作不是很理想就又想考研了。但是考研是有风险的,我自我感觉自己可能冲不上那个学校,而找工作一个没成可以继续找嘛。本着抱着试试看的态度在boss上投了简历,

  6. 智能客服 | 浅谈人工智能聊天机器人ChatGPT - 2

    2022年底,OpenAI的预训练模型ChatGPT给人工智能领域的爱好者和研究人员留下了深刻的印象和启发,他展现的惊人能力将人工智能的研究和应用热度推向高潮,网上也充斥着和ChatGPT的各种聊天,他可以作诗、写小说、写代码、讨论疫情问题等。下面就是一些他的神回复:人命关天的坑: 写歌,留给词作者的机会不多了。。。 回答人类怎么样面对人工智能: 什么是ChatGPT?借用网上的一段介绍,ChatGPT是由人工智能研究实验室OpenAI在2022年11月30日发布的全新聊天机器人模型,一款人工智能技术驱动的自然语言处理工具。它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动

  7. 【ChatGPT】ChatGPT 的 N 种用法 - 2

    目录ChatGPT简介技术原理应用未来发展ChatGPT的10 种用法ChatGPT简介ChatGPT是一种基于深度学习的大型语言模型,由OpenAI公司开发。技术原理GPT是GenerativePre-trainedTransformer的缩写,意为生成式预训练变压器。它的技术原理是使用了一个基于注意力机制的变压器(Trans

  8. ruby-on-rails - 从 Geocode 经纬度获取地址 - 2

    对于我的大部分应用程序,我从Geocoder获取城镇/城市的纬度、经度、邮政编码等。我只是投入城市和州,作为返回,我得到了我处于一个有field的场景中。该场所需要一个地址,我正在从另一个来源获取该场所的纬度和经度。使用Geocodergem,我可以通过给地址提供经纬度来获取地址吗? 最佳答案 在Rails控制台中运行。latitude=40.0397longitude=-76.30144geo_localization="#{latitude},#{longitude}"query=Geocoder.search(geo_loca

  9. 「想体验ChatGPT中文聊天?」那快进来,你用不上算我输 - 2

    ♥️作者:白日参商🤵‍♂️个人主页:白日参商主页♥️坚持分析平时学习到的项目以及学习到的软件开发知识,和大家一起努力呀!!!🎈🎈加油!加油!加油!加油🎈欢迎评论💬点赞👍🏻收藏📂加关注+!「想体验ChatGPT中文聊天?」那快进来,你用不上算我输项目场景:项目条件一、那就开始吧1、安装ChatGPT-Desktop2、OpenAPI设置二、使用实例恭喜你!!!配置成功了!!!API和URL都是博主免费提供给大家的!!!恭喜你!!!配置成功了!!!API和URL都是博主免费提供给大家的!!!🎈🎈加油!加油!加油!加油🎈欢迎评论💬点赞👍🏻收藏📂加关注+!项目场景:近几个月可以说ChatGPT是火得一

  10. 半个月狂飙1000亿,ChatGPT概念股凭什么? - 2

    ChatGPT掀起了AI股历史上最疯狂的一轮市值狂飙。自春节后至今,ChatGPT概念股开始了暴走模式,短短半月时间,海天瑞声、开普云等ChatGPT概念股市值累计增加了近1400亿。如此的爆炸效应,得益于ChatGPT所展现出商业化落地的巨大潜力。要知道,在此之前,无论是十年AI投入超千亿的百度,还是困在硬件化里的AI四小龙,都在重复着AI商业化难落地的故事。ChatGPT的出现,让AI从生产力的赋能者直接成为一种创造生产力的工具。随着订阅模式的推出,ChatGPT已经成为第一个以AI技术为核心直接变现的消费者应用。本文持有以下核心观点:1、ChatGPT是AI技术迭代的受益者。过去受限技术

随机推荐