update
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
114
app/main.py
114
app/main.py
@@ -1,4 +1,5 @@
|
|||||||
from fastapi import FastAPI, HTTPException, Depends
|
from sqlite3 import IntegrityError
|
||||||
|
from fastapi import BackgroundTasks, FastAPI, HTTPException, Depends, Query
|
||||||
from fastapi.responses import JSONResponse, PlainTextResponse
|
from fastapi.responses import JSONResponse, PlainTextResponse
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from typing import List, Optional, Any
|
from typing import List, Optional, Any
|
||||||
@@ -6,12 +7,20 @@ from typing import List, Optional, Any
|
|||||||
from app import models, schemas, crud
|
from app import models, schemas, crud
|
||||||
from app.database import SessionLocal, engine
|
from app.database import SessionLocal, engine
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
from PIL import Image
|
||||||
|
import qrcode
|
||||||
|
import os
|
||||||
|
from fastapi.responses import FileResponse
|
||||||
|
from fastapi.staticfiles import StaticFiles
|
||||||
|
|
||||||
# 初始化数据库
|
# 初始化数据库
|
||||||
models.Base.metadata.create_all(bind=engine)
|
models.Base.metadata.create_all(bind=engine)
|
||||||
|
|
||||||
app = FastAPI()
|
app = FastAPI()
|
||||||
|
|
||||||
|
# 挂载 images 文件夹
|
||||||
|
app.mount("/images", StaticFiles(directory="images"), name="images")
|
||||||
|
|
||||||
# 允许所有来源跨域访问(不推荐用于生产环境)
|
# 允许所有来源跨域访问(不推荐用于生产环境)
|
||||||
origins = ["*"]
|
origins = ["*"]
|
||||||
|
|
||||||
@@ -34,17 +43,33 @@ def get_db():
|
|||||||
db.close()
|
db.close()
|
||||||
|
|
||||||
|
|
||||||
@app.get("/")
|
# @app.get("/")
|
||||||
def root():
|
# def root():
|
||||||
return {"message": "Hello World"}
|
# return {"message": "Hello World"}
|
||||||
|
|
||||||
|
|
||||||
@app.get("/hello")
|
@app.get("/hello")
|
||||||
def hello():
|
def hello():
|
||||||
return {"message": "Hello World"}
|
response = f"你好,\n..........................\n一名开发者\n副业:跨境电商\n#公众号:异度世界\n..........................\n回复关键词,了解更多:\n1. 微信机器人\n2. 数字游民\n3. 加群\n..........................\n[该消息是接受好友自动回复]"
|
||||||
|
return PlainTextResponse(content=response)
|
||||||
|
|
||||||
|
|
||||||
|
def create_user_task(db: Session, user: schemas.UserCreate):
|
||||||
|
try:
|
||||||
|
existing_user = db.query(
|
||||||
|
models.User).filter(models.User.wxid == user.wxid).first()
|
||||||
|
if existing_user:
|
||||||
|
# 可以选择更新用户信息或返回错误
|
||||||
|
# print("用户已存在")
|
||||||
|
return "用户已存在"
|
||||||
|
db.add(user)
|
||||||
|
db.commit()
|
||||||
|
except IntegrityError:
|
||||||
|
db.rollback()
|
||||||
|
print("用户已存在")
|
||||||
|
return "用户已存在"
|
||||||
|
|
||||||
|
|
||||||
# @app.get("/add", response_model=schemas.User)
|
|
||||||
@app.get("/add")
|
@app.get("/add")
|
||||||
def add_user(nickname: Optional[Any] = None,
|
def add_user(nickname: Optional[Any] = None,
|
||||||
remark: Optional[Any] = None,
|
remark: Optional[Any] = None,
|
||||||
@@ -53,23 +78,21 @@ def add_user(nickname: Optional[Any] = None,
|
|||||||
gender: Optional[Any] = None,
|
gender: Optional[Any] = None,
|
||||||
friendaddtime: Optional[Any] = None,
|
friendaddtime: Optional[Any] = None,
|
||||||
openid: Optional[Any] = None,
|
openid: Optional[Any] = None,
|
||||||
db: Session = Depends(get_db)):
|
db: Session = Depends(get_db),
|
||||||
crud.create_user(db=db,
|
background_tasks: BackgroundTasks = None):
|
||||||
user=schemas.UserCreate(nickname=nickname,
|
|
||||||
remark=remark,
|
|
||||||
wechat_number=wechat_number,
|
|
||||||
wxid=wxid,
|
|
||||||
gender=gender,
|
|
||||||
friendaddtime=friendaddtime,
|
|
||||||
openid=openid))
|
|
||||||
# response=f'''{nickname}你好,\n我是机器人助理\n一名开发者,副业:跨境电商,#公众号:异度世界'''
|
|
||||||
# headers = {"Content-Type": "application/json"}
|
|
||||||
# return JSONResponse(content=response, headers=headers)
|
|
||||||
|
|
||||||
response = f"{nickname}你好,\n我是机器人助理\n一名开发者,副业:跨境电商,#公众号:异度世界"
|
|
||||||
return PlainTextResponse(content=response)
|
|
||||||
|
|
||||||
# return '{nickname}你好,\n我是机器人助理\n一名开发者,副业:跨境电商,#公众号:异度世界'
|
user_data = schemas.UserCreate(nickname=nickname,
|
||||||
|
remark=remark,
|
||||||
|
wechat_number=wechat_number,
|
||||||
|
wxid=wxid,
|
||||||
|
gender=gender,
|
||||||
|
friendaddtime=friendaddtime,
|
||||||
|
openid=openid)
|
||||||
|
if background_tasks:
|
||||||
|
background_tasks.add_task(create_user_task, db, user_data)
|
||||||
|
|
||||||
|
response = f"{nickname}你好,\n..........................\n一名开发者\n副业:跨境电商\n#公众号:异度世界\n..........................\n回复关键词,了解更多:\n1. 微信机器人\n2. 数字游民\n3. 加群\n..........................\n[该消息是接受好友自动回复]"
|
||||||
|
return PlainTextResponse(content=response)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/users/")
|
@app.get("/users/")
|
||||||
@@ -102,3 +125,50 @@ def update_user(identifier: str,
|
|||||||
raise HTTPException(status_code=404, detail="User not found")
|
raise HTTPException(status_code=404, detail="User not found")
|
||||||
|
|
||||||
return crud.update_user(db=db, user=user, user_update=user_update)
|
return crud.update_user(db=db, user=user, user_update=user_update)
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/generate_qr")
|
||||||
|
def generate_qr(wxid: Optional[str] = Query(None), db: Session = Depends(get_db)):
|
||||||
|
# 选择网络图片
|
||||||
|
# return FileResponse('images/111.png')
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
url = "https://web.hackrobot.cn"
|
||||||
|
if wxid:
|
||||||
|
url += f"?wxid={wxid}"
|
||||||
|
|
||||||
|
# 创建二维码
|
||||||
|
qr = qrcode.QRCode(version=1, box_size=5, border=2) # 调整二维码大小
|
||||||
|
qr.add_data(url)
|
||||||
|
qr.make(fit=True)
|
||||||
|
img = qr.make_image(fill='black', back_color='white')
|
||||||
|
|
||||||
|
# 保存二维码图像
|
||||||
|
qr_image_path = f"images/{wxid}-qr_code.png"
|
||||||
|
img.save(qr_image_path)
|
||||||
|
|
||||||
|
# 加载原图
|
||||||
|
group_image_path = "images/group.jpg"
|
||||||
|
|
||||||
|
# 在原图上添加二维码(右下角)
|
||||||
|
group_image = Image.open(group_image_path)
|
||||||
|
qr_image = Image.open(qr_image_path)
|
||||||
|
|
||||||
|
# 将二维码放置在右下角
|
||||||
|
qr_image = qr_image.resize((200, 200)) # 调整二维码大小
|
||||||
|
qr_position = (group_image.width - qr_image.width - 50, group_image.height - qr_image.height - 50) # 距离20像素
|
||||||
|
# 在原图上添加二维码
|
||||||
|
group_image.paste(qr_image, qr_position)
|
||||||
|
|
||||||
|
|
||||||
|
# 保存合成的图像
|
||||||
|
combined_image_path = f"images/combined_{wxid}.jpg"
|
||||||
|
group_image.save(combined_image_path)
|
||||||
|
# 压缩图片
|
||||||
|
group_image.save(combined_image_path, "JPEG", quality=10) # 85 是压缩质量,可根据需要调整
|
||||||
|
|
||||||
|
# 删除二维码文件
|
||||||
|
os.remove(qr_image_path)
|
||||||
|
print(combined_image_path)
|
||||||
|
return FileResponse(combined_image_path)
|
||||||
Reference in New Issue
Block a user