utils.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. from xpinyin import Pinyin
  2. from fastapi import Request
  3. def generate_english_name(chinese_name: str) -> str:
  4. """
  5. Generate english name from chinese name.
  6. Rule: Surname initial + First name full pinyin.
  7. Example: 张三 -> zsan
  8. """
  9. if not chinese_name:
  10. return ""
  11. p = Pinyin()
  12. # Assuming first char is surname
  13. surname = chinese_name[0]
  14. firstname = chinese_name[1:]
  15. surname_pinyin = p.get_pinyin(surname, "").lower()
  16. firstname_initial = p.get_initials(firstname, "").lower()
  17. return f"{surname_pinyin}{firstname_initial}"
  18. def get_client_ip(request: Request) -> str:
  19. """
  20. Get client IP address from request headers or fallback to client host.
  21. Prioritizes X-Forwarded-For and X-Real-IP headers.
  22. """
  23. forwarded_for = request.headers.get("X-Forwarded-For")
  24. if forwarded_for:
  25. return forwarded_for.split(",")[0].strip()
  26. real_ip = request.headers.get("X-Real-IP")
  27. if real_ip:
  28. return real_ip
  29. return request.client.host if request.client else "0.0.0.0"