main.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. import time
  2. from datetime import datetime
  3. from fastapi import FastAPI, Form, Request
  4. from fastapi.templating import Jinja2Templates
  5. from fastapi.middleware.cors import CORSMiddleware
  6. from pydantic import BaseModel
  7. from oauth2client.service_account import ServiceAccountCredentials
  8. import os, dataset, json, gspread
  9. from gspread_pandas import Spread, Client
  10. import pandas as pd
  11. app = FastAPI()
  12. directory=os.path.dirname(os.getcwd())
  13. templates = Jinja2Templates(directory)
  14. origins = [
  15. "*"
  16. ]
  17. app.add_middleware(
  18. CORSMiddleware,
  19. allow_origins=origins,
  20. allow_credentials=True,
  21. allow_methods=["*"],
  22. allow_headers=["*"],
  23. )
  24. @app.get("/")
  25. async def read_root(request: Request):
  26. return templates.TemplateResponse("index.html",{"request": request})
  27. @app.post("/submitform")
  28. async def formentry(name: str = Form(...), phone: str = Form(...), loc: str = Form(...), course_name: str = Form(...), bookdate: str = Form(...), booktime: str = Form(...)):
  29. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/violetbeauty?charset=utf8mb4')
  30. request_table = db['booking_info']
  31. time_stamp = datetime.fromtimestamp(time.time())
  32. time_stamp = time_stamp.strftime("%Y-%m-%d %H:%M:%S")
  33. print(time_stamp)
  34. request_table.insert({"name": name, "phone": phone, "location": loc, "course_name":course_name, "book_date": bookdate, "book_time": booktime, "time_stamp": time_stamp})
  35. return 0 # pls make booking success page
  36. # return templates.TemplateResponse("(bookingsuccess.html)",{"request": request})
  37. @app.get("/getbooking_data")
  38. async def getdata():
  39. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/violetbeauty?charset=utf8mb4')
  40. statement = 'SELECT * FROM booking_info ORDER BY time_stamp DESC'
  41. df = pd.DataFrame()
  42. for row in db.query(statement):
  43. date_format = "%Y-%M-%d %H:%M:%S"
  44. fdate = row['time_stamp'].strftime('%Y-%m-%d')
  45. df = df.append({'填單時間':row['time_stamp'],'姓名':row['name'],'電話':str('\'' + row['phone']),'預約體驗店家':row['location'],'選擇課程':row['course_name'],'預約日期':row['book_date'],'預約時間':row['book_time']}, ignore_index=True)
  46. save_sheet(df,'紫晴預約資料','預約資料')
  47. return '資料下載完成'
  48. def save_sheet(df,filename,tabname,startpos='A1'):
  49. scope = ['https://spreadsheets.google.com/feeds',
  50. 'https://www.googleapis.com/auth/drive']
  51. credentials = ServiceAccountCredentials.from_json_keyfile_name('violet-beauty-booking-data-8ef5f0d9a747.json', scope)
  52. gc = gspread.authorize(credentials)
  53. spread = Spread(filename,creds=credentials)
  54. spread.df_to_sheet(df, index=False, sheet=tabname, start=startpos, replace=False)
  55. time_stamp = datetime.fromtimestamp(time.time())
  56. time_stamp = time_stamp.strftime("%Y-%m-%d %H:%M:%S")
  57. spread.sheet.update('I1', '最後更新:' + time_stamp)