admin_step1.py 2.1 KB

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