123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- from enum import Enum
- from typing import Optional
- from pydantic import BaseModel
- from fastapi import FastAPI, Query, UploadFile, File
- import dataset,json
- from fastapi import FastAPI
- from fastapi.middleware.cors import CORSMiddleware
- from fastapi.staticfiles import StaticFiles
- import time
- from datetime import datetime
- from PIL import Image
- import io
- from typing import List
- app = FastAPI()
- origins = [
- "http://172.105.205.52",
- "http://172.105.205.52:8000",
- ]
- app.add_middleware(
- CORSMiddleware,
- allow_origins=origins,
- allow_credentials=True,
- allow_methods=["*"],
- allow_headers=["*"],
- )
- serverADDR = '127.0.0.1:8000/'
- cover_img_dir = 'static/cover_img/'
- app.mount("/static/cover_img", StaticFiles(directory="static/cover_img"), name="static/cover_img")
- ##########TAG CRUD################TAG CRUD##################TAG CRUD###########TAG CRUD##################
- class Tag(BaseModel):
- id: int
- name: str
- @app.get("/tags")
- async def get_tags():
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
- statement = 'SELECT id,name FROM tag'
- tags = []
- for row in db.query(statement):
- tags.append({'id':row['id'],'name':row['name']})
- return tags
- @app.post("/tags")
- async def create_tags(tag:Tag):
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
- tag_table = db['tag_table']
- pk = tag_table.insert({'name':tag.name})
- tag.id = pk
- return tag
-
- @app.delete("/tags/{tag_id}")
- async def delete_tags(tag_id:int):
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
- sqls = 'DELETE FROM tag_table WHERE id = '+str(tag_id)
- db.query(sqls)
- sqls = 'DELETE FROM course_tag WHERE tag_id = '+str(tag_id)
- db.query(sqls)
- return 'success'
-
- @app.put("/tags/{tag_id}")
- async def update_tags(tag_id,tag:Tag):
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
- sqls = 'UPDATE tag_table\
- SET name="'+tag.name+'"\
- WHERE id='+tag_id+';'
- db.query(sqls)
- tag.id=tag_id
- return tag
-
- @app.get("/tags/{tag_id}")
- async def get_tags(tag_id):
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
- statement = 'SELECT id,name FROM tag_table where id = '+tag_id
- for row in db.query(statement):
- result = {'id':row['id'],'name':row['name']}
- return result
-
-
-
- ###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########COURSE CRUD###########
- class Course(BaseModel):
- id: int
- title: str
- profile: str
- url: str #course website location url
- cover_img: str #img url form
- teacher_name: str
- teacher_img: str #teacher user image url form
- price: int
- price_discount: int
- hours: float
- units: int
- @app.post("/get_courses")
- async def get_courses(tags:List[int]):
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
- tag_str = '('
- for t in tags:
- tag_str = tag_str + str(t) +','
- tag_str = tag_str[:-1]+')'
- courses = []
- statement = 'SELECT * FROM course_tag '\
- 'INNER JOIN course on course_tag.course_id=course.id '\
- 'INNER JOIN tag on course_tag.tag_id = tag.id '\
- 'WHERE tag.id IN'+tag_str
- for row in db.query(statement):
- courses.append({'id':row['course_id'],'title':row['title'],'url':row['url'],'cover_img':row['cover_img']
- ,'teacher_name':['teacher_name'],'price':row['price'],'price_discount':row['price_discount'],'profile':row['profile']
- ,'cover_img':row['cover_img'],'hours':row['hours'],'units':row['units']})
- return courses
- @app.post("/courses")
- async def create_courses(tags: list,course:Course):
- db = dataset.connect('mysql://choozmo:pAssw0rd@db.ptt.cx:3306/openTalk?charset=utf8mb4')
- #add to course table
- course_table = db['course']
- pk = course_table.insert({'title':course.title,'profile':course.profile,'url':course.url,'cover_img':course.cover_img,'teacher_name':course.teacher_name,
- 'price':course.price,'price_discount':course.price_discount,'hours':course.hours,'units':course.units})
- course.id = pk
- course_tag_table = db['course_tag']
- for tag in tags:
- course_tag_table.insert({'course_id':course.id,'tag_id':tag})
- return {'msg':'新增成功'}
-
- @app.post("/upload_cover_img/")
- async def create_upload_file(file: UploadFile = File(...)):
- img_name = str(time.time()).replace('.','')
- contents = await file.read()
- image = Image.open(io.BytesIO(contents))
- image= image.convert("RGB")
- image.save(cover_img_dir+img_name+'.jpg')
- return {"msg": serverADDR+cover_img_dir+img_name+'.jpg'}
-
|