main.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  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. from fastapi.staticfiles import StaticFiles
  9. import time
  10. from datetime import datetime
  11. from PIL import Image
  12. import io
  13. app = FastAPI()
  14. origins = [
  15. "http://172.105.205.52",
  16. "http://172.105.205.52:8000",
  17. ]
  18. app.add_middleware(
  19. CORSMiddleware,
  20. allow_origins=origins,
  21. allow_credentials=True,
  22. allow_methods=["*"],
  23. allow_headers=["*"],
  24. )
  25. serverADDR = '127.0.0.1:8000/'
  26. cover_img_dir = 'static/cover_img/'
  27. app.mount("/static/cover_img", StaticFiles(directory="static/cover_img"), name="static/cover_img")
  28. ##########TAG CRUD################TAG CRUD##################TAG CRUD###########TAG CRUD##################
  29. class Tag(BaseModel):
  30. id: int
  31. name: str
  32. @app.get("/tags")
  33. async def get_tags():
  34. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  35. statement = 'SELECT id,name FROM tag'
  36. tags = []
  37. for row in db.query(statement):
  38. tags.append({'id':row['id'],'name':row['name']})
  39. return tags
  40. @app.post("/tags")
  41. async def create_tags(tag:Tag):
  42. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  43. tag_table = db['tag_table']
  44. pk = tag_table.insert({'name':tag.name})
  45. tag.id = pk
  46. return tag
  47. @app.delete("/tags/{tag_id}")
  48. async def delete_tags(tag_id:int):
  49. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  50. sqls = 'DELETE FROM tag_table WHERE id = '+str(tag_id)
  51. db.query(sqls)
  52. sqls = 'DELETE FROM course_tag WHERE tag_id = '+str(tag_id)
  53. db.query(sqls)
  54. return 'success'
  55. @app.put("/tags/{tag_id}")
  56. async def update_tags(tag_id,tag:Tag):
  57. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  58. sqls = 'UPDATE tag_table\
  59. SET name="'+tag.name+'"\
  60. WHERE id='+tag_id+';'
  61. db.query(sqls)
  62. tag.id=tag_id
  63. return tag
  64. @app.get("/tags/{tag_id}")
  65. async def get_tags(tag_id):
  66. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  67. statement = 'SELECT id,name FROM tag_table where id = '+tag_id
  68. for row in db.query(statement):
  69. result = {'id':row['id'],'name':row['name']}
  70. return result
  71. ###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########
  72. class Course(BaseModel):
  73. id: int
  74. title: str
  75. profile: str
  76. url: str #course website location url
  77. cover_img: str #img url form
  78. teacher_name: str
  79. teacher_img: str #teacher user image url form
  80. price: int
  81. price_discount: int
  82. hours: int
  83. units: int
  84. '''
  85. @app.get("/courses")
  86. async def get_courses(tags:List[int]):
  87. courses = []
  88. statement = 'SELECT * from course_table where id IN'+course_id_string
  89. for row in db.query(statement):
  90. courses.append({'id':row['id'],'title':row['title'],'url':row['url'],'img':row['img']
  91. ,'teacher_name':['teacher_name'],'teacher_img':row['teacher_img'],'price':row['price']
  92. ,'hours':row['hours'],'units':row['units']})
  93. return courses
  94. '''
  95. @app.post("/courses")
  96. async def create_courses(tags: list,course:Course):
  97. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  98. #add to course table
  99. course_table = db['course']
  100. pk = course_table.insert({'title':course.title,'profile':course.profile,'url':course.url,'cover_img':course.cover_img,'teacher_name':course.teacher_name,
  101. 'price':course.price,'price_discount':course.price_discount,'hours':course.hours,'units':course.units})
  102. course.id = pk
  103. course_tag_table = db['course_tag']
  104. for tag in tags:
  105. course_tag_table.insert({'course_id':course.id,'tag_id':tag})
  106. return {'msg':'新增成功'}
  107. @app.delete("/courses/{course_id}")
  108. async def delete_course(course_id:int):
  109. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  110. sqls = 'DELETE FROM course_table WHERE id = '+str(course_id)
  111. db.query(sqls)
  112. sqls = 'DELETE FROM course_tag WHERE course_id = '+str(course_id)
  113. db.query(sqls)
  114. return "success"
  115. @app.put("/courses/{course_id}")
  116. async def update_course(course_id,course:Course):
  117. db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
  118. sqls = 'UPDATE course_table\
  119. SET title="'+course.title+'", url="'+course.url+'", hours='+str(course.hours)+',\
  120. teacher_name="'+course.teacher_name+'", price='+str(course.price)+', units='+str(course.units)+'\
  121. WHERE id='+str(course_id)+';'
  122. db.query(sqls)
  123. course.id=course_id
  124. return course
  125. @app.post("/upload_cover_img/")
  126. async def create_upload_file(file: UploadFile = File(...)):
  127. img_name = str(time.time()).replace('.','')
  128. contents = await file.read()
  129. image = Image.open(io.BytesIO(contents))
  130. image= image.convert("RGB")
  131. image.save(cover_img_dir+img_name+'.jpg')
  132. return {"msg": serverADDR+cover_img_dir+img_name+'.jpg'}