main.py 4.6 KB

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