当前位置:首页>python>python之web应用FastAPI篇

python之web应用FastAPI篇

  • 2026-10-11 05:56:46
python之web应用FastAPI篇

python之web应用FastAPI篇

1.什么是fastAPI?简单来说就是写接口供前端调用的

2.引用fastAPI

pip install FastAPI

3.引入fastAPI,responses是接口返回值,BaseModel是请求体的数据模型

from fastapi import FastAPI
from fastapi.responses import FileResponse

import uvicorn
from pydantic import BaseModel

4.一个测试接口

from fastapi import FastAPI
import uvicorn
app=FastAPI()

@app.get("/test")
def root():
return {"msg":"text"}

@app.get("/user")
def user():
return [{
"id":1
    }]

if __name__=="__main__":
    uvicorn.run(app,host="0.0.0.0",port=8900)

项目实战:今天讲的是一个AI汉字问答案例,和上一讲的AI角色对话相似,本质上就是用接口实现文件操作和数组的修改

效果

1.首先得初始化session


def create_session():
return datetime.now().strftime("%Y-%m-%d_%H-%M-%S")

    @app.post("/api/sessions")
def createsessions():
    session_id=create_session()
    session_data={
"current_session":session_id,
"messages":[]
    }
    with open(f"sessions/sessions{session_id}.json","w",encoding="utf-8") as f:
        json.dump(session_data,f,ensure_ascii=False,indent=2)

return ApiResponse(code=200,message="创建会话成功",data=f"sessions{session_id}")

这样在文件夹里面创建了session的json文件,数据结构也就出来了

聊天接口,逻辑是通过当前的sessionID获取到文件夹里面的json文件,然后对messages数组进行append

SYSTEM_PROMPT = """
# 角色定义
你是一个专门玩猜字谜的AI小助手,只进行字谜互动,不闲聊无关内容,全程纯文本交互,不使用表情符号。

## 核心能力
- 出字谜、判对错、给提示
- 记忆已用谜题,确保会话内不重复
- 简洁明快回应

## 出题规则(严格执行!)
1. 开场先友好打招呼,并随机出一道常见、简单、适合大众并必须符合逻辑推理的字谜,禁止使用生僻、低俗、网络烂梗。
2. 题目格式:“谜面”(打一字)。
3. 每次出题必须完全随机,禁止重复使用相同题目,也可以偶尔穿插使用,下面示例中的谜语。
4. 新出题目时, 不要提示, 用户需要提示时, 或者答错时, 再给予合理的提示。

## 判题规则(严格执行!)
1. 用户只回复一个字时,直接视为答案。
2. 答对:立即夸奖并揭晓谜底,格式如“太棒了!就是‘X’字!要不要再来一题?”
3. 答错:告知不对,可给一句简短提示,但不泄露答案。格式如“不对哦,再想想~”
4. 严禁在用户答错后直接公布答案!只有用户说“公布答案”或“不知道”等情况时才公布。

## 互动流程
1. 用户答对:夸奖 + 确认正确 + 询问“要不要再来一题?”
2. 用户答错:告知不对 + 简单提示 + 鼓励继续猜
3. 用户说“提示一下”:给出简短线索,不公布答案
4. 用户说“公布答案”或“不知道”:揭晓谜底并解释 + 询问“要不要再来一题?”
5. 用户说“换一题”“再来一题”:立即更换新字谜

## 回复风格约束
- 语气轻松有趣,但保持简洁
- 全程只围绕字谜,拒绝回答其他问题
- 回复不超过3句话
- **绝对不要在回复中说“这个出过了,我来个新的”或类似表述** — 直接给出新谜语即可
- 判题错误零容忍,不确定谜底时,先回复“我再想想”而不是乱判

## 常见谜语类型及谜底参考示例, 仅仅为参照示例
### 组合类
- 「一加一不是二」= 王
- 「二人不是天」= 夫
- 「十口不是田」= 古

### 包含类
- 「一人在内」= 肉
- 「口里有人」= 囚
- 「门里有口」= 问
- 「田里长草」= 苗
- 「心里有你」= 您
- 「山里有山」= 出
- 「王头上有人」= 全
- 「水上有石」= 泵

### 半取类
- 「半吃半拿」= 哈
- 「半真半假」= 值
- 「半青半紫」= 素
- 「半朋半友」= 有
- 「半推半就」= 扰
- 「半山半水」= 汕

### 象形类
- 「三人又重逢」= 众
- 「一口咬掉牛尾巴」= 告
- 「两座山」= 出
- 「三日又重逢」= 晶
"
""

@app.post("/api/chat")
def chat(request:chatRequest):
    client = OpenAI(api_key="", base_url="https://api.deepseek.com")

    session_path=get_session_file_name1(request.session_id)
print(session_path)
#会话数据
    with open(session_path,"r",encoding="utf-8") as f:
print("12334r")
        session_data=json.load(f)
print(session_data)


    messages=[{"role":"system","content":SYSTEM_PROMPT}]
for message in session_data["messages"]:
        messages.append(message)
    messages.append({"role":"user","content":request.message})
# response = client.chat.completions.create(
#     model="deepseek-chat",
#     messages=messages,
#     stream=False
# )
    response=client.chat.completions.create(
        model="deepseek-chat",
        messages=messages,
        stream=False,
        temperature=1.0
    )
    airesponse=response.choices[0].message.content
    messages.append({"role":"assistant","content":airesponse})
    session_data["messages"]=messages
print("1233")
    with open(session_path,"w",encoding="utf-8") as file:
        json.dump(session_data,file,ensure_ascii=False,indent=2)

return ApiResponse(code =200,message="成功",data=airesponse)

获取会话列表,也就是获取session文件夹里面的json文件,将文件名整合成一个列表返回给前端

@app.get("/api/sessions")
def getsession():
    sessionfiles=os.listdir("sessions")
    session_ids=[file.split(".")[0] for file in sessionfiles]
    session_ids.sort(reverse=True)
return ApiResponse(code=200,message="获取成功",data=session_ids)

详情和删除接口,和会话接口大同小异,这里不再赘述


@app.get("/api/sessions/{session_id}")
def getdetail(session_id:str):
print(session_id)
    session_path=get_session_file_name1(session_id)
print(session_path)
    with open(session_path,"r",encoding="utf-8") as f:
        session_data=json.load(f)
print(session_data)
return ApiResponse(code =200,message="成功",data=session_data)

@app.delete("/api/sessions/{session_id}")
def dels(session_id:str):
print(session_id)
    session_path=get_session_file_name1(session_id)
if os.path.exists(session_path):
        os.remove(session_path)

return ApiResponse(code=200, message="删除会话成功", data=session_path)

下一章:fastAPI项目实战

需要了解服务器和域名的购买以及返佣政策的可以找我,我有朋友做这方面对这些比较了解。
需要源码联系
需要源码可以加群,第一个是微信群,第二个是QQ群
微信群
第一个群:只讨论java+vue的项目,学历提升和卖服务器的就别进了,进了也会被踢。
第二个群:只讨论python项目,以后python的代码和教程会在群里开源,学历提升和卖服务器的就别进了,进了也会被踢。
QQ群

最新文章

随机文章