admin_step1.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from fastapi import APIRouter, Depends, Form, Request
  2. from fastapi.responses import HTMLResponse, RedirectResponse
  3. from sqlalchemy.orm import Session
  4. from database import SessionLocal
  5. router = APIRouter(prefix="/admin/step1", tags=["step1"])
  6. def get_db():
  7. db = SessionLocal()
  8. try:
  9. yield db
  10. finally:
  11. db.close()
  12. @router.get("", response_class=HTMLResponse)
  13. def step1_page(request: Request, db: Session = Depends(get_db)):
  14. rows = db.execute("""
  15. SELECT * FROM step1_attr
  16. ORDER BY base_template_id, attr_key, sort_order
  17. """).fetchall()
  18. html = """
  19. <h2>Step1 模板配置</h2>
  20. <form method="post" action="/admin/step1/add">
  21. 模板ID:<input name="base_template_id"><br>
  22. 属性Key:<input name="attr_key"><br>
  23. 属性名:<input name="attr_name"><br>
  24. 值ID:<input name="value_id"><br>
  25. 值名称:<input name="value_name"><br>
  26. 必填:<input name="required" value="1"><br>
  27. 多选:<input name="is_multi" value="0"><br>
  28. <button type="submit">新增</button>
  29. </form>
  30. <hr>
  31. """
  32. last_tpl = None
  33. for r in rows:
  34. if r.base_template_id != last_tpl:
  35. html += f"<h3>模板 {r.base_template_id}</h3>"
  36. last_tpl = r.base_template_id
  37. html += f"""
  38. <div>
  39. [{r.attr_name}] {r.value_name}
  40. </div>
  41. """
  42. return html
  43. @router.post("/add")
  44. def add_step1(
  45. base_template_id: int = Form(...),
  46. attr_key: str = Form(...),
  47. attr_name: str = Form(...),
  48. value_id: int = Form(...),
  49. value_name: str = Form(...),
  50. required: int = Form(1),
  51. is_multi: int = Form(0),
  52. db: Session = Depends(get_db)
  53. ):
  54. db.execute("""
  55. INSERT INTO step1_attr
  56. (base_template_id, attr_key, attr_name, value_id, value_name, required, is_multi)
  57. VALUES
  58. (:tpl,:k,:n,:vid,:vname,:r,:m)
  59. """, {
  60. "tpl": base_template_id,
  61. "k": attr_key,
  62. "n": attr_name,
  63. "vid": value_id,
  64. "vname": value_name,
  65. "r": required,
  66. "m": is_multi
  67. })
  68. db.commit()
  69. return RedirectResponse("/admin/step1", status_code=302)