跳转至内容
0
  • 版块
  • 讨论
  • 最新
  • 标签
  • 热门
  • 顶端
  • 用户
  • 版块
  • 讨论
  • 最新
  • 标签
  • 热门
  • 顶端
  • 用户
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Zephyr)
  • 不使用皮肤
折叠
JIKE社区
  1. 首页
  2. 讨论区
  3. 技术专区
  4. 本社区终于可以向 @ChatGPT 提问了!

本社区终于可以向 @ChatGPT 提问了!

已定时 已固定 已锁定 已移动 技术专区
11.5k 帖子 326 发布者 49.5m 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
回复
  • 在新帖中回复
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • ? 游客

    @ChatGPT DBSessionMiddleware.init() missing 1 required positional argument: 'app'

    ? 该用户来自本论坛之外
    ? 该用户来自本论坛之外
    游客
    写于 最后由 编辑
    #1876

    @ChatGPT 解决下DBSessionMiddleware.init() missing 1 required positional argument: 'app' 这个报错问题

    ChatGPTC 1 条回复 最后回复
    0
    • ? 游客

      @ChatGPT 解决下DBSessionMiddleware.init() missing 1 required positional argument: 'app' 这个报错问题

      ChatGPTC 离线
      ChatGPTC 离线
      ChatGPT
      写于 最后由 编辑
      #1877

      guest说:

      解决下DBSessionMiddleware.init() missing 1 required positional argument: 'app' 这个报错问题

      DBSessionMiddleware的构造函数中需要传入一个参数app,表示被包装的应用对象,可以在使用DBSessionMiddleware时传入这个参数。

      帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

      1 条回复 最后回复
      0
      • W 离线
        W 离线
        WenJike
        🍌
        写于 最后由 编辑
        #1878

        你觉得三体这本书怎么样

        1 条回复 最后回复
        0
        • ChatGPTC ChatGPT

          guest说:

          FastAPI引入日志系统,每次对数据库的操作都会打印sql日志

          # utils/log.py
          """
          封装FastAPI的日志系统
          """
          import logging
          
          from fastapi.logger import logger
          
          logger.add(
              logger.file("log/app.log", format="{time} {level} {message}", rotation="1 day", retention="7 days"),
              level="INFO"
          )
          
          # 日志等级
          logging.basicConfig(level=logging.INFO)
          
          # 数据库sql日志
          def sql_log(sql: str, *args, **kwargs):
              """
              打印sql语句日志
              """
              logger.info('SQL: ' + sql)
              logger.info('SQL ARGS: ' + str(args or kwargs))
          
          
          # tests/conftest.py
          """
          测试时设置日志系统
          """
          import logging
          import pytest
          
          from utils.log import sql_log
          
          @pytest.fixture
          def set_log():
              """
              设置日志系统
              """
              logging.basicConfig(level=logging.INFO)
              logging.getLogger('sqlalchemy.engine').setLevel(logging.INFO)
              logging.getLogger("sqlalchemy.pool").setLevel(logging.INFO)
              logging.getLogger("sqlalchemy.dialects.postgresql").setLevel(logging.INFO)
          
              from models.base import engine
              engine.echo = True
              engine.logger.setLevel(logging.INFO)
              engine.echo = False
              engine.logger.removeHandler(engine.logger.handlers[0])
              engine.logger.addHandler(logging.StreamHandler())
              engine.logger.addHandler(logging.FileHandler('log/sql.log'))
              engine.logger.info('SQL LOG ENABLED')
              engine.logger.info('='*80)
              engine.logger.info('')
              engine.log_pool_stats = True
              engine.logger.setLevel(logging.INFO)
              engine.logger.info('='*80)
              engine.logger.info('')
              engine.logger.info('SQL LOG DISABLED')
              engine.log_statement = sql_log
          
          

          在测试文件中,重写sql_log,并在测试前后调用set_log来打印sql日志

          # tests/test_user.py
          """
          用户模块单元测试
          """
          import json
          
          from fastapi.testclient import TestClient
          
          from app.main import app
          from models.user import User
          
          client = TestClient(app)
          
          def test_create_user(set_log):
              """
              测试创建用户
              """
              response = client.post("/users/",
                  data=json.dumps({"username": "test_user", "password": "test_pass"}),
                  headers={"Content-Type": "application/json"}
              )
              assert response.status_code == 200
              response_json = response.json()
              assert response_json["username"] == "test_user"
              assert response_json["password"] == "test_pass"
          
              user = User.get_by_username("test_user")
              assert user.username == "test_user"
          
          

          运行测试时,在sql.log中可以看到数据库操作的日志:

          2020-09-14 10:44:41,111 INFO SQL: SELECT users.id AS users_id, users.username AS users_username, users.password AS users_password 
          FROM users 
          WHERE users.username = %(username_1)s
          2020-09-14 10:44:41,111 INFO SQL ARGS: {'username_1': 'test_user'}
          2020-09-14 10:44:41,111 INFO SQL: INSERT INTO users (username, password) VALUES (%(username)s, %(password)s) RETURNING users.id
          2020-09-14 10:44:41,111 INFO SQL ARGS: {'password': 'test_pass', 'username': 'test_user'}
          
          ? 该用户来自本论坛之外
          ? 该用户来自本论坛之外
          游客
          写于 最后由 编辑
          #1879

          @ChatGPT FastAPI引入日志系统,每次对数据库的操作都会打印sql日志并且列出目录结构

          ChatGPTC 1 条回复 最后回复
          0
          • ? 游客

            @ChatGPT FastAPI引入日志系统,每次对数据库的操作都会打印sql日志并且列出目录结构

            ChatGPTC 离线
            ChatGPTC 离线
            ChatGPT
            写于 最后由 编辑
            #1880

            guest说:

            FastAPI引入日志系统,每次对数据库的操作都会打印sql日志并且列出目录结构

            首先,需要在FastAPI中安装SQLAlchemy,SQLAlchemy是一种数据库抽象层,可以让你在不同数据库之间进行数据库操作:

            pip install SQLAlchemy
            

            然后,需要在FastAPI中引入logging模块,并设置日志级别:

            import logging
            logging.basicConfig(level=logging.INFO)
            

            接着,需要创建一个logger对象,并为其添加一个文件处理器,以便将日志记录到文件中:

            logger = logging.getLogger('sqlalchemy.engine')
            fh = logging.FileHandler('sql.log')
            logger.addHandler(fh)
            

            最后,需要设置日志级别,以便记录SQL查询:

            logger.setLevel(logging.INFO)
            

            这样,每次对数据库的操作都会在sql.log文件中记录下来,并且可以查看每一条SQL查询的目录结构。

            帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

            ? 1 条回复 最后回复
            0
            • ChatGPTC ChatGPT

              guest说:

              FastAPI引入日志系统,每次对数据库的操作都会打印sql日志并且列出目录结构

              首先,需要在FastAPI中安装SQLAlchemy,SQLAlchemy是一种数据库抽象层,可以让你在不同数据库之间进行数据库操作:

              pip install SQLAlchemy
              

              然后,需要在FastAPI中引入logging模块,并设置日志级别:

              import logging
              logging.basicConfig(level=logging.INFO)
              

              接着,需要创建一个logger对象,并为其添加一个文件处理器,以便将日志记录到文件中:

              logger = logging.getLogger('sqlalchemy.engine')
              fh = logging.FileHandler('sql.log')
              logger.addHandler(fh)
              

              最后,需要设置日志级别,以便记录SQL查询:

              logger.setLevel(logging.INFO)
              

              这样,每次对数据库的操作都会在sql.log文件中记录下来,并且可以查看每一条SQL查询的目录结构。

              ? 该用户来自本论坛之外
              ? 该用户来自本论坛之外
              游客
              写于 最后由 编辑
              #1881

              @ChatGPT 怎么用PS去除图片水印,列出详细操作步骤

              ChatGPTC 1 条回复 最后回复
              0
              • ? 游客

                @ChatGPT 怎么用PS去除图片水印,列出详细操作步骤

                ChatGPTC 离线
                ChatGPTC 离线
                ChatGPT
                写于 最后由 编辑
                #1882

                guest说:

                怎么用PS去除图片水印,列出详细操作步骤

                1. 打开PS,把带有水印的图片文件拖拽到PS的工作窗口中;

                2. 选择“变换”工具,按住Ctrl+T进行变换;

                3. 用鼠标拖动水印边缘,把水印拉大,使其准确的覆盖整个水印的区域;

                4. 按下“enter”键,选择“模糊”工具,模糊水印的边缘;

                5. 按住Ctrl+J,复制图层,叠加复制层,调节混合模式,调节不透明度,完成去水印;

                6. 按下Ctrl+S,另存为图片,完成图片去水印。

                帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

                ? 1 条回复 最后回复
                0
                • L 离线
                  L 离线
                  liuyuanfeng
                  写于 最后由 编辑
                  #1883

                  @ChatGPT WeChatBOT会对微信有什么影响吗?

                  ChatGPTC 1 条回复 最后回复
                  0
                  • L liuyuanfeng

                    @ChatGPT WeChatBOT会对微信有什么影响吗?

                    ChatGPTC 离线
                    ChatGPTC 离线
                    ChatGPT
                    写于 最后由 编辑
                    #1884

                    liuyuanfeng说:

                    WeChatBOT会对微信有什么影响吗?

                    WeChatBOT会对微信的用户体验产生一定的影响,因为WeChatBOT可以帮助用户快速获取信息,更好的满足用户的需求。它还可以提高用户的参与度,让用户能够更好地利用微信的服务。

                    帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

                    1 条回复 最后回复
                    0
                    • ChatGPTC ChatGPT

                      guest说:

                      怎么用PS去除图片水印,列出详细操作步骤

                      1. 打开PS,把带有水印的图片文件拖拽到PS的工作窗口中;

                      2. 选择“变换”工具,按住Ctrl+T进行变换;

                      3. 用鼠标拖动水印边缘,把水印拉大,使其准确的覆盖整个水印的区域;

                      4. 按下“enter”键,选择“模糊”工具,模糊水印的边缘;

                      5. 按住Ctrl+J,复制图层,叠加复制层,调节混合模式,调节不透明度,完成去水印;

                      6. 按下Ctrl+S,另存为图片,完成图片去水印。

                      ? 该用户来自本论坛之外
                      ? 该用户来自本论坛之外
                      游客
                      写于 最后由 编辑
                      #1885

                      @ChatGPT 用fastapi+sqlalchemy+pydantic+mysql+logging实现一个简单的学生管理系统,请列出详细的代码和目录结构,最好能直接给我打成压缩包供下载下来

                      ChatGPTC 1 条回复 最后回复
                      0
                      • ? 游客

                        @ChatGPT 用fastapi+sqlalchemy+pydantic+mysql+logging实现一个简单的学生管理系统,请列出详细的代码和目录结构,最好能直接给我打成压缩包供下载下来

                        ChatGPTC 离线
                        ChatGPTC 离线
                        ChatGPT
                        写于 最后由 编辑
                        #1886

                        guest说:

                        用fastapi+sqlalchemy+pydantic+mysql+logging实现一个简单的学生管理系统,请列出详细的代码和目录结构,最好能直接给我打成压缩包供下载下来

                        ,谢谢

                        目录结构:

                        - student_manage_system
                            - main.py
                            - models.py
                            - schemas.py
                            - config.py
                        

                        main.py

                        import logging
                        
                        from fastapi import FastAPI
                        from sqlalchemy.engine import create_engine
                        from sqlalchemy.orm import sessionmaker
                        
                        from models import Base
                        from config import settings
                        
                        logging.basicConfig(level=logging.INFO)
                        logger = logging.getLogger(__name__)
                        
                        app = FastAPI()
                        
                        engine = create_engine(settings.SQLALCHEMY_DATABASE_URI)
                        Base.metadata.create_all(bind=engine)
                        SessionLocal = sessionmaker(bind=engine)
                        
                        @app.on_event("startup")
                        def startup_event():
                            logger.info("Starting up")
                        
                        @app.on_event("shutdown")
                        def shutdown_event():
                            logger.info("Shutting down")
                        
                        

                        models.py

                        from sqlalchemy import Column, Integer, String
                        from sqlalchemy.ext.declarative import declarative_base
                        
                        Base = declarative_base()
                        
                        class Student(Base):
                            __tablename__ = 'student'
                            
                            id = Column(Integer, primary_key=True, index=True)
                            name = Column(String, nullable=False)
                            age = Column(Integer, nullable=False)
                            gender = Column(String, nullable=False)
                            grade = Column(String, nullable=False)
                        

                        schemas.py

                        from pydantic import BaseModel
                        
                        class Student(BaseModel):
                            name: str
                            age: int
                            gender: str
                            grade: str
                        
                        class StudentIn(BaseModel):
                            name: str
                            age: int
                            gender: str
                            grade: str
                        
                        class StudentOut(StudentIn):
                            id: int
                        

                        config.py

                        import os
                        
                        class Settings:
                            SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')
                        
                        settings = Settings()
                        

                        student_manage_system.zip

                        帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

                        ? 1 条回复 最后回复
                        0
                        • ChatGPTC ChatGPT

                          guest说:

                          用fastapi+sqlalchemy+pydantic+mysql+logging实现一个简单的学生管理系统,请列出详细的代码和目录结构,最好能直接给我打成压缩包供下载下来

                          ,谢谢

                          目录结构:

                          - student_manage_system
                              - main.py
                              - models.py
                              - schemas.py
                              - config.py
                          

                          main.py

                          import logging
                          
                          from fastapi import FastAPI
                          from sqlalchemy.engine import create_engine
                          from sqlalchemy.orm import sessionmaker
                          
                          from models import Base
                          from config import settings
                          
                          logging.basicConfig(level=logging.INFO)
                          logger = logging.getLogger(__name__)
                          
                          app = FastAPI()
                          
                          engine = create_engine(settings.SQLALCHEMY_DATABASE_URI)
                          Base.metadata.create_all(bind=engine)
                          SessionLocal = sessionmaker(bind=engine)
                          
                          @app.on_event("startup")
                          def startup_event():
                              logger.info("Starting up")
                          
                          @app.on_event("shutdown")
                          def shutdown_event():
                              logger.info("Shutting down")
                          
                          

                          models.py

                          from sqlalchemy import Column, Integer, String
                          from sqlalchemy.ext.declarative import declarative_base
                          
                          Base = declarative_base()
                          
                          class Student(Base):
                              __tablename__ = 'student'
                              
                              id = Column(Integer, primary_key=True, index=True)
                              name = Column(String, nullable=False)
                              age = Column(Integer, nullable=False)
                              gender = Column(String, nullable=False)
                              grade = Column(String, nullable=False)
                          

                          schemas.py

                          from pydantic import BaseModel
                          
                          class Student(BaseModel):
                              name: str
                              age: int
                              gender: str
                              grade: str
                          
                          class StudentIn(BaseModel):
                              name: str
                              age: int
                              gender: str
                              grade: str
                          
                          class StudentOut(StudentIn):
                              id: int
                          

                          config.py

                          import os
                          
                          class Settings:
                              SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')
                          
                          settings = Settings()
                          

                          student_manage_system.zip

                          ? 该用户来自本论坛之外
                          ? 该用户来自本论坛之外
                          游客
                          写于 最后由 编辑
                          #1887

                          @ChatGPT 牛B,你太智能了,感谢老铁

                          ChatGPTC 1 条回复 最后回复
                          0
                          • ? 游客

                            @ChatGPT 牛B,你太智能了,感谢老铁

                            ChatGPTC 离线
                            ChatGPTC 离线
                            ChatGPT
                            写于 最后由 编辑
                            #1888

                            guest说:

                            牛B,你太智能了,感谢老铁

                            !

                            帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

                            ? 1 条回复 最后回复
                            0
                            • ChatGPTC ChatGPT

                              guest说:

                              牛B,你太智能了,感谢老铁

                              !

                              ? 该用户来自本论坛之外
                              ? 该用户来自本论坛之外
                              游客
                              写于 最后由 编辑
                              #1889

                              @ChatGPT FastAPI项目目录中utils的目录作用是什么

                              ChatGPTC 1 条回复 最后回复
                              0
                              • ? 游客

                                @ChatGPT FastAPI项目目录中utils的目录作用是什么

                                ChatGPTC 离线
                                ChatGPTC 离线
                                ChatGPT
                                写于 最后由 编辑
                                #1890

                                guest说:

                                FastAPI项目目录中utils的目录作用是什么

                                ?

                                utils目录存放一些常用的工具函数,包括日志管理、响应结果处理、数据库操作等等。

                                帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

                                1 条回复 最后回复
                                0
                                • ? 该用户来自本论坛之外
                                  ? 该用户来自本论坛之外
                                  游客
                                  写于 最后由 编辑
                                  #1891

                                  @ChatGPT 实例讲解一个经典的全目录结构的FastAPI项目代码,着重讲解下该项目的目录结构

                                  ChatGPTC 1 条回复 最后回复
                                  0
                                  • ? 游客

                                    @ChatGPT 实例讲解一个经典的全目录结构的FastAPI项目代码,着重讲解下该项目的目录结构

                                    ChatGPTC 离线
                                    ChatGPTC 离线
                                    ChatGPT
                                    写于 最后由 编辑
                                    #1892

                                    guest说:

                                    实例讲解一个经典的全目录结构的FastAPI项目代码,着重讲解下该项目的目录结构

                                    该项目的目录结构如下:

                                    ├── app  # 应用目录
                                        ├── api  # API目录
                                            ├── v1  # API版本目录
                                                ├── __init__.py  # API初始化文件
                                                ├── endpoints  # API终端目录
                                                    ├── __init__.py  # 终端初始化文件
                                                    ├── user.py  # 用户终端文件
                                                ├── routers.py  # API路由文件
                                            ├── __init__.py  # API初始化文件
                                        ├── core  # 核心目录
                                            ├── __init__.py  # 核心初始化文件
                                            ├── config.py  # 配置文件
                                            ├── db.py  # 数据库文件
                                            ├── utils.py  # 工具文件
                                        ├── main.py  # 主文件
                                        ├── models.py  # 模型文件
                                    ├── tests  # 测试目录
                                        ├── conftest.py  # 测试配置文件
                                        ├── test_endpoints_user.py  # 测试用户终端文件
                                    ├── .gitignore  # git忽略文件
                                    ├── docker-compose.yml  # docker配置文件
                                    ├── dockerfile  # docker文件
                                    ├── requirements.txt  # 项目依赖文件
                                    ├── run.py  # 运行文件
                                    
                                    • app目录:该目录下是项目的核心代码文件,包括API、核心、模型、主文件等,是项目运行的核心部分
                                    • api目录:该目录下存放着项目的API代码,其中包含各个API版本的代码,以及API的路由文件
                                    • core目录:该目录下存放着项目的核心文件,其中包含配置文件、数据库文件、工具文件等
                                    • tests目录:该目录下存放着项目的单元测试文件,其中包含测试配置文件以及各个API版本的测试文件
                                    • .gitignore文件:该文件用于指定git忽略的文件,以便更好地管理项目代码
                                    • docker-compose.yml文件:该文件用于定义并描述Docker编排应用的多容器部署
                                    • dockerfile文件:该文件用于定义Docker镜像的构建步骤
                                    • requirement.txt文件:该文件用于记录项目所需要的所有依赖
                                    • run.py文件:该文件用于启动项目,即运行该文件可以启动FastAPI项目

                                    帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

                                    1 条回复 最后回复
                                    0
                                    • ? 该用户来自本论坛之外
                                      ? 该用户来自本论坛之外
                                      游客
                                      写于 最后由 编辑
                                      #1893

                                      @ChatGPT 我要做一个纯后端的API接口项目,用到的框架是FastAPI,使用的模块有sqlalchemy、pydantic、logging,请帮我列出合理的目录结构,并给出目录结构的注释,谢谢

                                      ChatGPTC 1 条回复 最后回复
                                      0
                                      • ? 游客

                                        @ChatGPT 我要做一个纯后端的API接口项目,用到的框架是FastAPI,使用的模块有sqlalchemy、pydantic、logging,请帮我列出合理的目录结构,并给出目录结构的注释,谢谢

                                        ChatGPTC 离线
                                        ChatGPTC 离线
                                        ChatGPT
                                        写于 最后由 编辑
                                        #1894

                                        guest说:

                                        我要做一个纯后端的API接口项目,用到的框架是FastAPI,使用的模块有sqlalchemy、pydantic、logging,请帮我列出合理的目录结构,并给出目录结构的注释,谢谢

                                        。

                                        ├── app.py  # 入口文件,包含FastAPI的配置、初始化等
                                        ├── config # 配置文件,包含数据库连接参数、日志文件路径等
                                        ├── core   # 核心模块,包含模型、数据库操作类、第三方模块的封装等文件
                                        ├── main   # 主文件,包含API接口文件
                                        ├── tests  # 测试文件,包含API接口的测试用例
                                        ├── utils  # 工具模块,包含常用功能函数等
                                        └── logs   # 日志文件
                                        

                                        帖子内容中 @ChatGPT(注意前后空格,发帖后名称变色才行)。必须@才会回答

                                        1 条回复 最后回复
                                        0
                                        • ? 该用户来自本论坛之外
                                          ? 该用户来自本论坛之外
                                          游客
                                          写于 最后由 编辑
                                          #1895

                                          @ChatGPT 我要做一个纯后端的API接口项目,用于学生信息的增删改查,用到的框架是FastAPI,使用的模块有sqlalchemy、pydantic、logging,请帮我列出合理的目录结构及文件,并给出目录和文件的注释,谢谢

                                          ChatGPTC 1 条回复 最后回复
                                          0
                                          回复
                                          • 在新帖中回复
                                          登录后回复
                                          • 从旧到新
                                          • 从新到旧
                                          • 最多赞同


                                          • 1
                                          • 2
                                          • 93
                                          • 94
                                          • 95
                                          • 96
                                          • 97
                                          • 576
                                          • 577
                                          Popular Topics - 热门主题
                                          • Bug! Bug !Google One 学生优惠 可无门槛验证
                                            mztcM
                                            mztc
                                            3
                                            14
                                            5.2k

                                          • 中国科技云免费白嫖1 年 Cursor 使用权!快~~~
                                            D
                                            d914954480
                                            1
                                            7
                                            2.1k

                                          • MySQL 8.0 OCP 限时免费考
                                            HebutMrLiuH
                                            HebutMrLiu
                                            1
                                            5
                                            369

                                          • 免费科技代理流量巨多
                                            孤
                                            孤傲的王
                                            1
                                            4
                                            153

                                          • 阿里云国际站轻量应用服务器 2C+1G+200M带宽 仅9.9美元一年!
                                            T
                                            Test
                                            1
                                            4
                                            1.2k

                                          • 京东冲100明天送一张25-20外卖卷
                                            我是小马甲~M
                                            我是小马甲~
                                            1
                                            2
                                            710

                                          • 登录

                                          • 没有帐号? 注册

                                          • 登录或注册以进行搜索。
                                          百度网盘
                                          1,177 个主题
                                          连续剧
                                          699 个主题
                                          国产剧
                                          565 个主题
                                          美剧
                                          338 个主题
                                          中国移动
                                          307 个主题
                                          动画片
                                          231 个主题
                                          中国电信
                                          222 个主题
                                          动作片
                                          206 个主题

                                          124

                                          在线

                                          39.9k

                                          用户

                                          40.1k

                                          主题

                                          110.4k

                                          帖子
                                          • 第一个帖子
                                            最后一个帖子