main.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. from enum import Enum
  2. from typing import Optional
  3. from pydantic import BaseModel
  4. from fastapi import FastAPI, Query, UploadFile, File
  5. import dataset,json
  6. from fastapi import FastAPI
  7. from fastapi.middleware.cors import CORSMiddleware
  8. app = FastAPI()
  9. origins = [
  10. "http://172.105.205.52",
  11. "http://172.105.205.52:8000",
  12. ]
  13. app.add_middleware(
  14. CORSMiddleware,
  15. allow_origins=origins,
  16. allow_credentials=True,
  17. allow_methods=["*"],
  18. allow_headers=["*"],
  19. )
  20. app.mount("/static/img", StaticFiles(directory="static/img"), name="static/img")
  21. ##########TAG CRUD################TAG CRUD##################TAG CRUD###########TAG CRUD##################
  22. class Tag(BaseModel):
  23. id: int
  24. name: str
  25. @app.get("/tags")
  26. async def get_tags():
  27. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  28. course_table = db['course_table']
  29. print(course_table.columns)
  30. statement = 'SELECT id,name FROM tag'
  31. tags = []
  32. for row in db.query(statement):
  33. tags.append({'id':row['id'],'name':row['name']})
  34. return tags
  35. @app.post("/tags")
  36. async def create_tags(tag:Tag):
  37. tag_table = db['tag_table']
  38. pk = tag_table.insert({'name':tag.name})
  39. tag.id = pk
  40. return tag
  41. @app.delete("/tags/{tag_id}")
  42. async def delete_tags(tag_id:int):
  43. sqls = 'DELETE FROM tag_table WHERE id = '+str(tag_id)
  44. db.query(sqls)
  45. sqls = 'DELETE FROM course_tag WHERE tag_id = '+str(tag_id)
  46. db.query(sqls)
  47. return 'success'
  48. @app.put("/tags/{tag_id}")
  49. async def update_tags(tag_id,tag:Tag):
  50. sqls = 'UPDATE tag_table\
  51. SET name="'+tag.name+'"\
  52. WHERE id='+tag_id+';'
  53. db.query(sqls)
  54. tag.id=tag_id
  55. return tag
  56. @app.get("/tags/{tag_id}")
  57. async def get_tags(tag_id):
  58. statement = 'SELECT id,name FROM tag_table where id = '+tag_id
  59. for row in db.query(statement):
  60. result = {'id':row['id'],'name':row['name']}
  61. return result
  62. ###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########
  63. class Course(BaseModel):
  64. id: int
  65. title: str
  66. url: str #course website location url
  67. cover_img: str #img url form
  68. teacher_name: str
  69. teacher_img: str #teacher user image url form
  70. price: int
  71. price_discount: int
  72. hours: int
  73. units: int
  74. '''
  75. @app.get("/courses")
  76. async def get_courses(tags:List[int]):
  77. courses = []
  78. statement = 'SELECT * from course_table where id IN'+course_id_string
  79. for row in db.query(statement):
  80. courses.append({'id':row['id'],'title':row['title'],'url':row['url'],'img':row['img']
  81. ,'teacher_name':['teacher_name'],'teacher_img':row['teacher_img'],'price':row['price']
  82. ,'hours':row['hours'],'units':row['units']})
  83. return courses
  84. '''
  85. @app.post("/courses")
  86. async def create_courses(tags: list,course:Course):
  87. return {'msg':'新增成功'}
  88. @app.delete("/courses/{course_id}")
  89. async def delete_course(course_id:int):
  90. sqls = 'DELETE FROM course_table WHERE id = '+str(course_id)
  91. db.query(sqls)
  92. sqls = 'DELETE FROM course_tag WHERE course_id = '+str(course_id)
  93. db.query(sqls)
  94. return "success"
  95. @app.put("/courses/{course_id}")
  96. async def update_course(course_id,course:Course):
  97. sqls = 'UPDATE course_table\
  98. SET title="'+course.title+'", url="'+course.url+'", hours='+str(course.hours)+',\
  99. teacher_name="'+course.teacher_name+'", price='+str(course.price)+', units='+str(course.units)+'\
  100. WHERE id='+str(course_id)+';'
  101. db.query(sqls)
  102. course.id=course_id
  103. return course
  104. @app.post("/uploadfile/")
  105. async def create_upload_file(file: UploadFile = File(...)):
  106. img_name = str(time.time()).replace('.','')
  107. try:
  108. contents = await file.read()
  109. image = Image.open(io.BytesIO(contents))
  110. image= image.convert("RGB")
  111. image.save(img_upload_folder+img_name+'.jpg')
  112. except:
  113. return {'msg':'檔案無法使用'}
  114. return {"msg": 'www.choozmo.com:8168/'+tmp_img_sub_folder+img_name+'.jpg'}