main.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. from fastapi import FastAPI, Form, Request
  2. from fastapi.encoders import jsonable_encoder
  3. from fastapi.middleware.cors import CORSMiddleware
  4. import dataset
  5. import pandas as pd
  6. from starlette.responses import FileResponse, StreamingResponse
  7. from fastapi.responses import HTMLResponse
  8. from fastapi.staticfiles import StaticFiles
  9. import io
  10. from starlette.responses import RedirectResponse
  11. import codecs
  12. import random
  13. from starlette.status import HTTP_302_FOUND,HTTP_303_SEE_OTHER
  14. import smtplib
  15. import traceback
  16. import os
  17. from email.mime.text import MIMEText
  18. from email.mime.image import MIMEImage
  19. from email.mime.multipart import MIMEMultipart
  20. app = FastAPI()
  21. app.add_middleware(
  22. CORSMiddleware,
  23. allow_origins=['*'],
  24. allow_credentials=True,
  25. allow_methods=["*"],
  26. allow_headers=["*"],
  27. )
  28. def get_db():
  29. # db = dataset.connect('mysql://choozmo:pAssw0rd@139.162.121.30:33306/hhh?charset=utf8mb4')
  30. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/hhh?charset=utf8mb4')
  31. step_questions_table = db['step_questions']
  32. return step_questions_table
  33. def mail_to_user(umail):
  34. print('mail_to_user')
  35. gmail_user = 'edm@choozmo.com'
  36. gmail_password='wqdsyqwvppmubitv'
  37. sent_from = gmail_user
  38. to = [umail]
  39. img_data=None
  40. with open('/tmp/coupon.png', 'rb') as f:
  41. img_data = f.read()
  42. msg = MIMEMultipart()
  43. msg['Subject'] = '幸福空間五萬裝修折價券'
  44. msg['From'] = 'edm@choozmo.com'
  45. msg['To'] = 'jeweiliang@gmail.com'
  46. print('MIMEMultipart')
  47. text = MIMEText("感謝您填寫問卷,敬送您五萬元裝修折價券。")
  48. msg.attach(text)
  49. image = MIMEImage(img_data, name=os.path.basename("c:/tmp/coupon.png"))
  50. msg.attach(image)
  51. try:
  52. print('begin...')
  53. server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
  54. server.ehlo()
  55. server.login(gmail_user, gmail_password)
  56. server.sendmail(sent_from, to, msg.as_string())
  57. server.close()
  58. print ('Email sent!')
  59. except:
  60. traceback.print_exc()
  61. print ('Something went wrong...')
  62. @app.post("/step_questions/submit", response_class=RedirectResponse)
  63. async def submit(request: Request):
  64. form_data = await request.form()
  65. # form_data = request.form()
  66. email=form_data.get('q3')
  67. result = {
  68. 'sex': form_data.get('q1'),
  69. 'phone': form_data.get('q2'),
  70. 'email': email,
  71. 'building_case_name': form_data.get('q4'),
  72. 'building_case_type': form_data.get('q5'),
  73. 'decoration_style': ','.join(form_data.getlist('q6')),
  74. 'decoration_budget': ','.join(form_data.getlist('q7')),
  75. 'decoration_size': ','.join(form_data.getlist('q8')),
  76. }
  77. print(result)
  78. get_db().insert(result)
  79. # fr=codecs.open('static/index_complete.html','r','utf-8')
  80. # lines=fr.read()
  81. # fr.close()
  82. # response = RedirectResponse(url='/a1/index_complete.html')
  83. # lines="""<html><body onload="document.location.replace( '/a1/index_complete.html?par={0}');">
  84. # </body></html>"""
  85. # return RedirectResponse(url='/a1/index_complete.html')
  86. # return HTMLResponse(content=lines.format(str(random.randint(100000,999999))), status_code=200)
  87. mail_to_user(email)
  88. return RedirectResponse(url="/a1/index_complete_msg.html", status_code=HTTP_302_FOUND)
  89. # return result
  90. app.mount("/a1", StaticFiles(directory="static"), name="static")
  91. @app.get("/a1")
  92. async def redirect():
  93. # url = app.url_path_for("/a1/index.html")
  94. response = RedirectResponse(url='/a1/index.html')
  95. return response
  96. #@app.get("/a1", response_class=HTMLResponse)
  97. #@app.get("/a1", response_class=HTMLResponse)
  98. #async def read_items():
  99. # return """
  100. # <html>
  101. # <head>
  102. # <title>Some HTML in here</title>
  103. # </head>
  104. # <body>
  105. # <h1>Look ma! HTML!</h1>
  106. # </body>
  107. # </html>
  108. # """
  109. @app.get("/step_questions")
  110. async def get_step_question(request: Request):
  111. db_data = list(get_db().find())
  112. df = pd.DataFrame(db_data, columns=db_data[0].keys())
  113. stream = io.StringIO()
  114. df.to_csv(stream, index = False)
  115. # response = StreamingResponse(data_frame.to_csv(index=False), media_type="text/csv")
  116. response = StreamingResponse(iter([stream.getvalue()]), media_type="text/csv")
  117. response.headers["Content-Disposition"] = "attachment; filename=export.csv"
  118. return response