-
guest说:
生成一个纯后端的API接口,用于学生信息管理,用FastAPI+mysql+sqlalchemy+pydantic+logging,用到yield db,要求项目结构中有Models目录,Routers目录,Schemas目录,Logs目录,Config目录,Tests目录,并给出每个文件详细的代码编写,
实现学生信息管理的全部功能
一、项目结构
Project ├───Models // ORM 模型 │ └───model.py ├───Routers // 路由 │ └───router.py ├───Schemas // 数据模型 │ └───schema.py ├───Logs // 日志 │ └───log.py ├───Config // 配置文件 │ └───config.py └───Tests // 测试 └───test.py
二、模型文件(Models/model.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, autoincrement=True) name = Column(String(50), nullable=False) age = Column(Integer) gender = Column(String(10))
三、路由文件(Routers/router.py)
# 导入相关模块 from typing import List from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from sqlalchemy import create_engine from . import models, schemas # 创建路由 router = APIRouter() # 连接数据库 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/student_info') # 获取session def get_db(): db = Session(bind=engine) try: yield db finally: db.close() # 获取所有学生信息 @router.get('/get_all_student', response_model=List[schemas.Student]) def get_all_student(db: Session=Depends(get_db)): students = db.query(models.Student).all() return students # 添加学生信息 @router.post('/add_student', response_model=schemas.Student) def add_student(student: schemas.Student, db: Session=Depends(get_db)): student_model = models.Student(name=student.name, age=student.age, gender=student.gender) db.add(student_model) db.commit() db.refresh(student_model) return student_model # 修改学生信息 @router.put('/update_student/{student_id}', response_model=schemas.Student) def update_student(student_id: int, student: schemas.Student, db: Session=Depends(get_db)): student_model = db.query(models.Student).filter(models.Student.id == student_id).first() student_model.name = student.name student_model.age = student.age student_model.gender = student.gender db.commit() db.refresh(student_model) return student_model # 删除学生信息 @router.delete('/delete_student/{student_id}', response_model=schemas.Student) def delete_student(student_id: int, db: Session=Depends(get_db)): student_model = db.query(models.Student).filter(models.Student.id == student_id).first() db.delete(student_model) db.commit() return student_model
四、模型文件(Schemas/schema.py)
# 导入相关模块 from pydantic import BaseModel # 创建学生信息模型 class Student(BaseModel): name: str age: int gender: str
五、日志文件(Logs/log.py)
# 导入相关模块 import logging # 设置日志等级、格式、文件名 logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', filename='logs/student_info.log')
六、配置文件(Config/config.py)
# 数据库连接配置 DATABASE_CONFIG = { 'host': 'localhost', 'user': 'root', 'password': '123456', 'db': 'student_info' }
七、测试文件(Tests/test.py)
# 导入相关模块 import json import unittest from fastapi.testclient import TestClient from routers import router # 测试类 class TestStudent(unittest.TestCase): # 测试初始化 def setUp(self): self.client = TestClient(router) # 测试获取所有学生信息 def test_get_all_student(self): response = self.client.get('/get_all_student') self.assertEqual(response.status_code, 200) # 测试添加学生信息 def test_add_student(self): data = { 'name': '张三', 'age': 18, 'gender': '男' } response = self.client.post('/add_student', data=json.dumps(data)) self.assertEqual(response.status_code, 200) # 测试修改学生信息 def test_update_student(self): data = { 'name': '李四', 'age': 18, 'gender': '男' } response = self.client.put('/update_student/1', data=json.dumps(data)) self.assertEqual(response.status_code, 200) # 测试删除学生信息 def test_delete_student(self): response = self.client.delete('/delete_student/2') self.assertEqual(response.status_code, 200) # 执行测试 if __name__ == '__main__': unittest.main()
-
guest说:
生成一个纯后端的API接口,用于学生信息管理,用FastAPI+mysql+sqlalchemy+pydantic+logging,用到yield db,要求目录结构合理,包含Models目录,routers目录,schemas目录,logs目录,config目录,Tests目录,并给出每个文件详细的代码编写,
路由如下:
- API - Models - student.py - routers - student.py - schemas - student.py - logs - student.log - config - config.py - Tests - test_student.py - main.py
Models/student.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, autoincrement=True) name = Column(String(20)) age = Column(Integer) gender = Column(String(10)) student_id = Column(String(20)) school = Column(String(50)) major = Column(String(20))
schemas/student.py
from pydantic import BaseModel class Student(BaseModel): name: str age: int gender: str student_id: str school: str major: str
routers/student.py
from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from .. import models, schemas from ..database import SessionLocal router = APIRouter() # Dependency def get_db(): db = SessionLocal() try: yield db finally: db.close() @router.get("/") async def get_all_student(db: Session = Depends(get_db)): student = db.query(models.Student).all() return student @router.post("/") async def create_student(student: schemas.Student, db: Session = Depends(get_db)): db_student = models.Student(**student.dict()) db.add(db_student) db.commit() db.refresh(db_student) return db_student @router.get("/{student_id}") async def get_student(student_id: int, db: Session = Depends(get_db)): student = db.query(models.Student).filter(models.Student.id == student_id).first() return student @router.put("/{student_id}") async def update_student(student_id: int, student: schemas.Student, db: Session = Depends(get_db)): db_student = db.query(models.Student).filter(models.Student.id == student_id).first() update_data = student.dict(exclude_unset=True) for key, value in update_data.items(): setattr(db_student, key, value) db.commit() return db_student @router.delete("/{student_id}") async def delete_student(student_id: int, db: Session = Depends(get_db)): student = db.query(models.Student).filter(models.Student.id == student_id).delete() db.commit() return student
config/config.py
SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://:@/'
Tests/test_student.py
from fastapi.testclient import TestClient import pytest from main import app client = TestClient(app) def test_get_all_student(): response = client.get('/student/') assert response.status_code == 200 def test_create_student(): data = { 'name': 'test', 'age': 18, 'gender': 'male', 'student_id': '123456', 'school': 'test school', 'major': 'test major' } response = client.post('/student/', json=data) assert response.status_code == 200 def test_get_student(): response = client.get('/student/1') assert response.status_code == 200 def test_update_student(): data = { 'name': 'test1', 'age': 20, } response = client.put('/student/1', json=data) assert response.status_code == 200 def test_delete_student(): response = client.delete('/student/1') assert response.status_code == 200
from fastapi import FastAPI from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker from loguru import logger from .config import SQLALCHEMY_DATABASE_URI from .routers import student # Initialize the FastAPI app app = FastAPI() # Initialize the database engine = create_engine(SQLALCHEMY_DATABASE_URI) Base = declarative_base() SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) # Configure the logging logger.add("logs/student.log") # Add the routers app.include_router(student.router, prefix='/student')
-
guest说:
生成一个纯后端的API接口,用于学生信息管理,用FastAPI框架+mysql+sqlalchemy+pydantic+logging,要求目录结构合理,包含Models目录,routers目录,schemas目录,logs目录,config目录,Tests目录,并给出每个文件详细的代码编写,并且用到yield db
.commit()
├── config
│ ├── config.py
│ └── logging.conf
├── logs
│ ├── logfile.log
│ └── log_data.log
├── main.py
├── models
│ ├── init.py
│ └── student.py
├── routers
│ └── student_api.py
├── schemas
│ ├── init.py
│ └── student_schema.py
└── tests
└── student_test.pyconfig/config.py
import os
DATABASE_URI = os.environ.get('DATABASE_URI', 'mysql+pymysql://root:xxxx@127.0.0.1:3306/student_db')
config/logging.conf
[loggers]
keys=root[handlers]
keys=consoleHandler[formatters]
keys=simpleFormatter[logger_root]
level=DEBUG
handlers=consoleHandler[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout, )[formatter_simpleFormatter]
format=%(asctime)s [%(levelname)s] [%(name)s] %(message)smain.py
from fastapi import FastAPI
from starlette.requests import Request
from starlette.responses import Response
from starlette.middleware.cors import CORSMiddleware
from starlette.config import Config
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmakerimport logging
读取配置文件
config = Config('.env')
设置日志
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger("app")设置数据库
engine = create_engine(config("DATABASE_URI"))
Base = declarative_base()
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
db = SessionLocal()初始化app
app = FastAPI(debug=True)
允许跨域
app.add_middleware(
CORSMiddleware,
allow_origins=[""],
allow_credentials=True,
allow_methods=[""],
allow_headers=["*"],
)注册路由
from .routers import student_api
app.include_router(student_api.router, prefix="/students")
models/student.py
from sqlalchemy import Column, Integer, String
from . import Baseclass Student(Base):
tablename = 'students'id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String(64), nullable=False) age = Column(Integer, nullable=False) gender = Column(String(64), nullable=False) address = Column(String(128), nullable=False)
schemas/student_schema.py
from pydantic import BaseModel
class StudentSchema(BaseModel):
id: int
name: str
age: int
gender: str
address: strrouters/student_api.py
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from ..models.student import Student
from ..schemas.student_schema import StudentSchemarouter = APIRouter()
@router.get("/", response_model=StudentSchema(many=True))
def get_students(db: Session = Depends(db)):
students = db.query(Student).all()
return students@router.post("/", response_model=StudentSchema())
def create_student(student: StudentSchema, db: Session = Depends(db)):
db_student = Student(**student.dict())
db.add(db_student)
db.commit()
db.refresh(db_student)
return db_student@router.put("/{student_id}", response_model=StudentSchema())
def update_student(student_id: int, student: StudentSchema, db: Session = Depends(db)):
db_student = db.query(Student).filter(Student.id == student_id).first()
db_student.name = student.name
db_student.age = student.age
db_student.gender = student.gender
db_student.address = student.address
db.add(db_student)
db.commit()
db.refresh(db_student)
return db_student@router.delete("/{student_id}", response_model=StudentSchema())
def delete_student(student_id: int, db: Session = Depends(db)):
db_student = db.query(Student).filter(Student.id == student_id).first()
db.delete(db_student)
db.commit()
return db_studenttests/student_test.py
from fastapi.testclient import TestClient
from . main import appclient = TestClient(app)
def test_get_students():
response = client.get("/students/")
assert response.status_code == 200
assert response.json() == []def test_create_student():
response = client.post("/students/", json={
"name": "John",
"age": 23,
"gender": "Male",
"address": "New York"
})
assert response.status_code == 200
assert response.json() == {
"id": 1,
"name": "John",
"age": 23,
"gender": "Male",
"address": "New York"
}def test_update_student():
response = client.put("/students/1", json={
"name": "John Doe",
"age": 24,
"gender": "Male",
"address": "New York"
})
assert response.status_code == 200
assert response.json() == {
"id": 1,
"name": "John Doe",
"age": 24,
"gender": "Male",
"address": "New York"
}def test_delete_student():
response = client.delete("/students/1")
assert response.status_code == 200
assert response.json() == {
"id": 1,
"name": "John Doe",
"age": 24,
"gender": "Male",
"address": "New York"
} -
GEE说:
写15首外面下着小雨,趟在床上睡不着思念心上人的情诗
1、雨声悠悠催人眠,暗夜深处空茫冷。但愿心中的思念,千里之外仍清澈。
2、窗外落雨滴滴答,思念你的心渐渐苦。苦苦相思无处安慰,只能在床上痴痴想。
3、夜深星辰叹流泪,小雨点洒思念痕。睡梦中梦到你身影,想念更深心中痛。
4、小雨淅淅漫天飞,空气中弥漫着温馨。睡不着思念心上人,夜里想你心痒痒。
5、夜深梦中你身影,雨声悠悠令我思念。但知你远在千里外,痴痴的想你欲绝望。
6、窗外漫天飞的雨,滴滴的点点思念苦。两颗心千里之外,深夜安慰无处找。
7、雨声滴答暗夜里,思念深深满心头。你远去却还在心里,心痒痒想你又怎能休?
8、窗外雨声滴答答,心里思念有痴痴味。不能再见只能思念,夜深落泪痛不可言。
9、窗外雨声滴答答,思念你的心依旧痒。久久不能相见,深夜想你心如刀痒。
10、小雨滴答夜深深,思念你的心痒痒发烧。千里之外你还好吗,你的心里是否也想我。
11、夜深星沉月收藏,窗外小雨滴答答。心中痴痴想你,但愿你早日回来。
12、夜色深沉雨声悠,思念你的心痒痒发烧。但愿给你的思念,能抵达千里之外。
13、窗外小雨滴滴答,想念你的心如沸水。夜里想你又怎能休,眼泪潸然滴滴落。
14、夜深月夜雨声悠,思念你的心深深痒。无法忘记你的脸,只能躺在床上想念。
15、雨声滴答漫夜里,思念你心如刀痒。在暗夜里思念你,只能在床上痴痴想。
-
guest说:
pydantic.error_wrappers.ValidationError
error message """ if self.max_length is not None and len(value) > self.max_length: raise ValidationError( f"ensure this value has at most {self.max_length} characters" )
class TextField(Field):
"""TextFieldThis is a Field object for handling text. Args: max_length (int): the maximum length of the text value. """ def __init__(self, max_length: Optional[int] = None): super().__init__(TextValidator(max_length))
class EmailField(Field):
"""EmailFieldThis is a Field object for handling email addresses. """ def __init__(self): super().__init__(EmailValidator())
class URLField(Field):
"""URLFieldThis is a Field object for handling URLs. """ def __init__(self): super().__init__(URLValidator())
-
GEE说:
写5篇1000字左右的厉害了我的国作文
一、厉害了,我的国
厉害了,我的国,拥有五千多年的历史文明,曾经风华绝代的汉文化,展现出悠久的历史文化遗产,令世人惊叹不已。
厉害了,我的国,具有极其优越的地理环境,北方有辽阔的内陆,南方有珠江三角洲,西部有广袤的青藏高原,东部有长江流域,四周环绕着海洋,使中华大地成为一个经济发达的国度。
厉害了,我的国,拥有众多英雄豪杰,他们为了保护国家,不惜拼死守护,他们用自己的血肉,为实现中华民族的梦想而努力奋斗。
厉害了,我的国,拥有众多的伟人,他们贡献了自己的智慧,为国家的发展做出巨大贡献,他们努力创新,给国家带来荣光,他们将永远铭记在心中,中华民族的伟大复兴,是他们的宗旨。
厉害了,我的国,拥有最美的风景,万里江山,碧草如茵,绿树成荫,引人入胜,让人陶醉其中。更有不少的古迹宫殿,满目的历史遗迹,令人震撼。
厉害了,我的国,它是我的家乡,它是我的根,我是中华民族的一员,我要为国家的发展做出自己的贡献,用自己的力量去开拓未来,让中华民族更加伟大壮大。
二、厉害了,我的国
厉害了,我的国,拥有五千多年的历史文明,历经千载而不息,诞生出一代又一代的英雄豪杰,曾经风华绝代的汉文化,展现出悠久的历史文化遗产,令世人惊叹不已。
厉害了,我的国,具有极其优越的地理环境,北方有辽阔的内陆,南方有珠江三角洲,西部有广袤的青藏高原,东部有长江流域,四周环绕着海洋,使中华大地成为一个经济发达的国度。
厉害了,我的国,拥有最完善的法治制度,从古至今,中华民族一直以法治的理念治理国家,每一个时代都有完善的法治体系,使得国家的法律法规有序运行,并为国家的繁荣昌盛做出了重要贡献。
厉害了,我的国,拥有众多伟大的英雄,他们为了保护国家,不惜拼死守护,他们用自己的血肉,为实现中华民族的梦想而努力奋斗,他们是中华民族的英雄,他们的英勇,令世人钦佩不已。
厉害了,我的国,拥有众多的伟人,他们贡献了自己的智慧,为国家的发展做出巨大贡献,他们努力创新,给国家带来荣光,他们将永远铭记在心中,中华民族的伟大复兴,是他们的宗旨。
厉害了,我的国,它是我的家乡,它是我的根,我要为国家的发展做出自己的贡献,用自己的力量去开拓未来,让中华民族更加伟大壮大,厉害了,我的国!
三、厉害了,我的国
厉害了,我的国!中华民族拥有悠久的历史文化,拥有众多伟人英雄,拥有灿烂的国粹,拥有众多美丽的风景。
厉害了,我的国!拥有优越的地理环境,有辽阔的内陆,有广袤的青藏高原,有珠江三角洲,有长江流域,有四周环绕的海洋,使中华大地成为一个经济发达的国度。
厉害了,我的国!拥有完善的法治制度,从古至今,中华民族一直以法治的理念治理国家,每一个时代都有完善的法治体系,使得国家的法律法规有序运行,并为国家的繁荣昌盛做出了重要贡献。
厉害了,我的国!拥有众多英雄豪杰,他们为了保护国家,不惜拼死守护,他们用自己的血肉,为实现中华民族的梦想而努力奋斗。他们是中华民族的英雄,他们的英勇,令世人钦佩不已。
厉害了,我的国!拥有众多的伟人,他们贡献了自己的智慧,为国家的发展做出巨大贡献,他们努力创新,给国家带来荣光,他们将永远铭记在心中,中华民族的伟大复兴,是他们的宗旨。
厉害了,我的国,拥有最美的风景,万里江山,碧草如茵,绿树成荫,引人入胜,让人陶醉其中,更有不少的古迹宫殿,满目的历史遗迹,令人震撼。
厉害了,我的国,它是我的家乡,它是我的根,我是中华民族的一员,我
-
GEE说:
写篇1000字左右的《厉害了我的国》作文
厉害了我的国
每当谈到我的国家,我就会把它比作一座宏伟的宝塔,充满着崭新的期望,充满着新的希望。它是一座宏伟的宝塔,由无数的伟大人物建造而成,它包含了无数的伟大梦想,文化,历史,科学,技术,教育,经济,宗教,社会,政治等等,构成了宏伟的宝塔。
厉害了我的国,我的国家有着悠久的历史,在历史的洪流中,它以其杰出的统治者,文化,历史,科学技术,宗教,经济,政治等各个方面的成就和发展,赢得了世界的尊重和赞誉。现在,我们的国家不仅在经济上发展迅速,而且在文化,社会,政治,宗教,科学技术等各个方面都取得了长足进步,越来越多的外国人看到中国的繁荣昌盛,赞叹不已。
厉害了我的国,我们有着优秀的科学家,比如钱学森,科学的发展更是惊人,科学的发展得到了极大的促进,使我们的生活更加便利,更加美好。另外,我们的文化也是世界上最古老,最伟大的文化,我们的文化被世界各地的人们接受,被广泛传播,并得到赞赏。
厉害了我的国,我们的政治正在走向民主,社会正在不断进步,中国正在发展成为一个繁荣昌盛的国家,改革开放的政策使我们的社会发展得更快,更好,更完善,使我们的国家成为一个富强的国家。
厉害了我的国,厉害了我的宝塔!我们的国家不仅为世界带来了繁荣,而且为我们带来了希望,使我们的国家在世界上拥有更多的发展机会,更多的发展空间,更多的发展机遇!
-
@ChatGPT 下面的代码报“pydantic.error_wrappers.ValidationError”错误,帮我分析改正下
#models/jsjldw.py
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from config.config import Config
Base = Config.Base
class Jsjldw(Base):
tablename = 'jsjldw'
JSJLDW_DWDM =Column(String,primary_key=True,index=True)
JSJLDW_DWMC =Column(String)
JSJLDW_XSWS =Column(Integer)
JSJLDW_BZ =Column(String)#schemas/jsjldw.py
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from config.config import Config
Base = Config.Base
class Jsjldw(Base):
tablename = 'jsjldw'
JSJLDW_DWDM =Column(String,primary_key=True,index=True)
JSJLDW_DWMC =Column(String)
JSJLDW_XSWS =Column(Integer)
JSJLDW_BZ =Column(String) -
guest说:
下面的代码报“pydantic.error_wrappers.ValidationError”错误,帮我分析改正下
#models/jsjldw.py
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from config.config import Config
Base = Config.Base
class Jsjldw(Base):
tablename = 'jsjldw'
JSJLDW_DWDM =Column(String,primary_key=True,index=True)
JSJLDW_DWMC =Column(String)
JSJLDW_XSWS =Column(Integer)
JSJLDW_BZ =Column(String)#schemas/jsjldw.py
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String
from config.config import Config
Base = Config.Base
class Jsjldw(Base):
tablename = 'jsjldw'
JSJLDW_DWDM =Column(String,primary_key=True,index=True)
JSJLDW_DWMC =Column(String)
JSJLDW_XSWS =Column(Integer)
JSJLDW_BZ =Column(String)#models/jsjldw.py
from pydantic import BaseModelclass Jsjldw(BaseModel):
JSJLDW_DWDM: str
JSJLDW_DWMC: str
JSJLDW_XSWS: int
JSJLDW_BZ: str#schemas/jsjldw.py
from pydantic import BaseModelclass Jsjldw(BaseModel):
JSJLDW_DWDM: str
JSJLDW_DWMC: str
JSJLDW_XSWS: int
JSJLDW_BZ: str -
guest说:
不对
外开放
用户获取接口
获取用户详细信息
获取用户基本信息
请求URL:
http://api.example.com/user/info
请求方式:
- GET
参数:
参数名 必选 类型 说明 user_id 是 int 用户ID 返回示例
{ "errcode": 0, "errmsg": "ok", "data": { "user_name": "张三", "user_age": 20, "user_gender": "男" } }
返回参数说明
参数名 类型 说明 user_name string 用户名称 user_age int 用户年龄 user_gender string 用户性别 -
@ChatGPT 《西游记》是明代吴承恩创作的中国古代第一部浪漫主义章回体长篇神魔小说。该小说主要讲述了孙悟空出世跟随菩提祖师学艺及大闹天宫后,遇见了唐僧、猪八戒、沙僧和白龙马,西行取经,一路上历经艰险,降妖除魔,经历了九九八十一难,终于到达西天见到如来佛祖,最终五圣成真的故事。该小说以“玄奘取经”这一历史事件为蓝本,经作者的艺术加工,深刻地描绘出明代百姓的社会生活状况。《西游记》是中国神魔小说的经典之作,达到了古代长篇浪漫主义小说的巅峰,与《三国演义》《水浒传》《红楼梦》并称为中国古典四大名著。《西游记》自问世以来在民间广为流传,各式各样的版本层出不穷。明代刊本有六种,清代刊本、抄本也有七种,典籍所记已佚版本十三种。鸦片战争以后,大量中国古典文学作品被译为西文,《西游记》渐渐传入欧美,被译为英、法、德、意、西、手语、世(世界语)、斯(斯瓦希里语)、俄、捷、罗、波、日、朝、越等语言。请用300字概括《西游记》第二十二回 八戒大战流沙河 木叉奉法收悟净
-
GEE说:
《西游记》是明代吴承恩创作的中国古代第一部浪漫主义章回体长篇神魔小说。该小说主要讲述了孙悟空出世跟随菩提祖师学艺及大闹天宫后,遇见了唐僧、猪八戒、沙僧和白龙马,西行取经,一路上历经艰险,降妖除魔,经历了九九八十一难,终于到达西天见到如来佛祖,最终五圣成真的故事。该小说以“玄奘取经”这一历史事件为蓝本,经作者的艺术加工,深刻地描绘出明代百姓的社会生活状况。《西游记》是中国神魔小说的经典之作,达到了古代长篇浪漫主义小说的巅峰,与《三国演义》《水浒传》《红楼梦》并称为中国古典四大名著。《西游记》自问世以来在民间广为流传,各式各样的版本层出不穷。明代刊本有六种,清代刊本、抄本也有七种,典籍所记已佚版本十三种。鸦片战争以后,大量中国古典文学作品被译为西文,《西游记》渐渐传入欧美,被译为英、法、德、意、西、手语、世(世界语)、斯(斯瓦希里语)、俄、捷、罗、波、日、朝、越等语言。请用300字概括《西游记》第二十二回 八戒大战流沙河 木叉奉法收悟净
的内容
《西游记》第二十二回八戒大战流沙河木叉奉法收悟净讲述了孙悟空、猪八戒、沙和尚因为拔苗助长而遭到妖怪索命,猪八戒罪过重大,被宝象王抓入流沙河,孙悟空及沙和尚前去救援,但被妖怪逼得无可奈何。木叉提出解救方案,与妖怪比武,若获胜,猪八戒才可放行。孙悟空及沙和尚果断接受,木叉在决斗中凭借超强拳脚,将妖怪击倒,猪八戒被释放。木叉以超自然的力量击败妖怪,且令猪八戒明白了千载难逢的友情,终于收悟净。