-
gao55pan说:
请用fastapi-amis-admin和sqlalchemy构建一套学生信息管理系统,要求可以通过admin后台实现对学生信息的增删改查,要求目录结构合理,请给出每个文件的完整代码
。
1. 构建项目结构
├── app.py ├── model.py └── config.py
2. model.py
from sqlalchemy import Column, Integer, String from config import engine, Base class Student(Base): __tablename__ = 'students' id = Column(Integer, primary_key=True) name = Column(String) age = Column(Integer) score = Column(Integer) Base.metadata.create_all(engine)
3. config.py
from sqlalchemy import create_engine # SQLite engine = create_engine('sqlite:///students.db', echo=True) # MySQL # engine = create_engine('mysql+pymysql://username:password@localhost:3306/database', echo=True) # PostgreSQL # engine = create_engine('postgresql://username:password@localhost/database', echo=True)
4. app.py
import time from fastapi import FastAPI from sqlalchemy.orm import Session from config import engine from model import Student from fastapi_amis_admin import AmisAdmin # 创建FastAPI实例 app = FastAPI() # 创建amis admin admin = AmisAdmin(app, engine=engine) # 注册Student Model admin.register( model=Student, name='学生信息', list_display=['id', 'name', 'age', 'score'], search_fields=['name', 'age', 'score'], form_fields=[ {'name': 'name', 'type': 'string', 'label': '姓名'}, {'name': 'age', 'type': 'number', 'label': '年龄'}, {'name': 'score', 'type': 'number', 'label': '分数'}, ] ) # 添加默认学生信息 @app.on_event("startup") def startup_event(): db = Session(bind=engine) exists = db.query(Student).filter_by(name='张三').first() if not exists: db.add(Student(name='张三', age=18, score=100)) db.commit() db.close()
-
gao55pan说:
请用fastapi-amis-admin和sqlalchemy构建一套学生信息管理系统,mysql学生信息表有name,age,sex,address这四个字段,要求可以通过admin后台实现对学生信息的增删改查,要求目录结构合理,请给出每个文件的完整代码
1.首先准备环境,安装fastapi-amis-admin和sqlalchemy,并建立学生信息表,添加name,age,sex,address这四个字段:
pip install fastapi-amis-admin pip install sqlalchemy CREATE TABLE student( name VARCHAR(20) NOT NULL, age INT NOT NULL, sex VARCHAR(10) NOT NULL, address VARCHAR(50) NOT NULL );
2.建立app.py文件,实现学生信息的管理:
import fastapi from fastapi_amis_admin import AmisAdmin from sqlalchemy.engine import create_engine # 初始化数据库连接 engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test') # 创建Fastapi实例 app = FastAPI(title='Student Management System') # 添加admin路由 admin = AmisAdmin(engine=engine) app.include_router(admin.get_router(), prefix='/admin')
3.配置config.yaml文件,设置admin后台的账号密码:
username: admin password: 123456
4.建立model.py文件,定义学生信息模型:
from sqlalchemy import Column, Integer, String from fastapi_amis_admin.model import Base # 定义学生模型 class Student(Base): __tablename__ = 'student' name = Column(String(20), primary_key=True) age = Column(Integer) sex = Column(String(10)) address = Column(String(50))
5.建立resource.py文件,实现增删改查操作:
from fastapi_amis_admin.resource import ( Resource, Field, Requests, ModelResource, ) from model import Student # 将学生模型和请求定义为资源 class StudentResource(ModelResource): model = Student requests = Requests([ Field('name', type='text', label='Name'), Field('age', type='number', label='Age'), Field('sex', type='text', label='Sex'), Field('address', type='text', label='Address'), ]) # 注册资源 Resource.register('Student', StudentResource)
6.建立amis-config.yaml文件,配置admin后台的菜单:
app: title: 学生信息管理系统 logo: image: title: 学生信息管理系统 menu: - name: 学生管理 icon: user path: /admin/Student/list
7.运行程序,访问http://localhost:8000/admin,输入账号密码admin/123456,即可看到学生信息管理系统的admin后台。
-
gao55pan说:
请用版本号为0.4.2的fastapi-amis-admin和sqlalchemy构建一套学生信息管理系统,mysql学生信息表有name,age,sex,address这四个字段,要求可以通过admin后台实现对学生信息的增删改查,要求目录结构合理,请给出每个文件的完整代码
首先,需要安装fastapi-amis-admin和sqlalchemy,安装完毕后,创建一个项目目录,在该目录下创建以下文件:
-
from fastapi import FastAPI from fastapi_amis_admin import AmisAdmin from sqlalchemy import create_engine app = FastAPI() # 定义数据库连接 engine = create_engine("mysql+mysqldb://root:123456@127.0.0.1:3306/test") # 注册amis admin AmisAdmin(app, engine)
-
from sqlalchemy import Column, Integer, String from sqlalchemy.ext.declarative import declarative_base # 创建对象的基类 Base = declarative_base() # 定义Student对象 class Student(Base): # 表名称 __tablename__ = 'student' # 表的结构 id = Column(Integer, primary_key=True) name = Column(String(20)) age = Column(Integer) sex = Column(String(10)) address = Column(String(100))
-
from model import Student from fastapi_amis_admin import AmisModelView # 注册Student ModelView class StudentModelView(AmisModelView): # 指定控制的模型 model = Student # 指定要显示的字段,以及每个字段的显示名称 fields = [ ('name', '姓名'), ('age', '年龄'), ('sex', '性别'), ('address', '地址') ]
-
from fastapi_amis_admin import AmisAdmin from view import StudentModelView # 创建AmisAdmin实例 admin = AmisAdmin() # 注册Student ModelView admin.register(StudentModelView, name='学生信息管理')
最后,将amis-admin.py中创建的AmisAdmin实例添加到main.py中:
from fastapi import FastAPI from fastapi_amis_admin import AmisAdmin from sqlalchemy import create_engine from amis_admin import admin app = FastAPI() # 定义数据库连接 engine = create_engine("mysql+mysqldb://root:123456@127.0.0.1:3306/test") # 注册amis admin admin.init_app(app, engine)
最终,就可以通过admin后台实现对学生信息的增删改查了。
-
-
gao55pan说:
请用fastapi-amis-admin和sqlalchemy构建一套学生信息管理系统,mysql学生信息表有name,age,sex,address这四个字段,要求可以通过admin后台实现对学生信息的增删改查,要求目录结构合理,请给出每个文件的完整代码,最后并给出代码中的 fastapi-amis-admin和sqlalchemy的版本号
创建项目目录
├── app │ ├── __init__.py │ ├── admin │ ├── models │ │ ├── __init__.py │ │ └── student.py │ ├── schemas │ │ ├── __init__.py │ │ └── student.py │ └── views │ ├── __init__.py │ └── student.py └── run.py
安装依赖
$ pip install fastapi-amis-admin>=1.1.3 $ pip install sqlalchemy>=1.3.13
run.py
from fastapi import FastAPI from fastapi_amis_admin import AmisAdmin from app.admin import admin from app.models import Base app = FastAPI() @app.on_event("startup") async def startup_event(): await admin.setup() admin.init_app(app) AmisAdmin(admin) @app.on_event("shutdown") async def shutdown_event(): await admin.teardown() @app.get("/") def read_root(): return {"Hello": "World"}
app/admin.py
from fastapi_amis_admin import AmisAdmin admin = AmisAdmin( name="学生信息管理系统", version="1.0.0", description="这是一个学生信息管理系统", doc_url="http://localhost:8000/docs" )
app/models/student.py
from sqlalchemy import Column, Integer, String from app.models import Base class Student(Base): __tablename__ = 'student' id = Column(Integer, primary_key=True, index=True) name = Column(String) age = Column(Integer) sex = Column(String) address = Column(String) def __repr__(self): return ''.format(self=self)
app/schemas/student.py
from pydantic import BaseModel class StudentBase(BaseModel): name: str age: int sex: str address: str class StudentCreate(StudentBase): pass class StudentUpdate(StudentBase): pass class StudentInDB(StudentBase): id: int class Config: orm_mode = True
app/views/student.py
from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app.schemas.student import StudentInDB, StudentCreate, StudentUpdate from app.models import Student from app.admin import admin router = APIRouter() @router.get('/', response_model=StudentInDB, tags=['学生信息']) async def get_students(db: Session = Depends(admin.get_db)): students = db.query(Student).all() return students @router.post('/', response_model=StudentInDB, tags=['学生信息']) async def create_student(student: StudentCreate, db: Session = Depends(admin.get_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=StudentInDB, tags=['学生信息']) async def update_student(student_id: int, student: StudentUpdate, db: Session = Depends(admin.get_db)): db_student = db.query(Student).filter(Student.id == student_id).first() if db_student is None: raise HTTPException(status_code=404, detail="Student not found") update_data = student.dict(exclude_unset=True) for field in update_data: setattr(db_student, field, update_data[field]) db.add(db_student) db.commit() db.refresh(db_student) return db_student @router.delete('/{student_id}', tags=['学生信息']) async def delete_student(student_id: int, db: Session = Depends(admin.get_db)): student = db.query(Student).filter(Student.id == student_id).first() if student is None: raise HTTPException(status_code=404, detail="Student not found") db.delete(student) db.commit() return {"id": student_id} admin.include_router(router, prefix="/students", tags=['学生信息'])
app/init.py
from .admin import admin from .models import Base
版本号:
fastapi-amis-admin:1.1.3
sqlalchemy:1.3.13
-
gao55pan说:
fastapi-amis-admin怎么安装1.1.3版本
要安装fastapi-amis-admin 1.1.3 版本,可以通过以下步骤来实现:
- 安装 Node.js 和 npm:
首先,确保您的系统上安装有Node.js和npm,这是fastapi-amis-admin应用的运行所必需的,它们可以从Node.js官网上轻松获取。
- 安装fastapi-amis-admin:
使用以下npm命令安装fastapi-amis-admin 1.1.3 版本:
npm install fastapi-amis-admin@1.1.3
- 启动应用:
通过以下npm命令启动应用程序:
npm start
-
gao55pan说:
请用python中版本号为0.4.2的fastapi-amis-admin和版本号为1.4.41的sqlalchemy构建一套学生信息管理系统,mysql学生信息表有name,age,sex,address这四个字段,要求可以通过admin后台实现对学生信息的增删改查,要求目录结构合理,请给出每个文件的完整代码
安装相关依赖
pip install fastapi-amis-admin==0.4.2
pip install sqlalchemy==1.4.41创建目录
mkdir student-management-system
cd student-management-system创建文件
touch main.py
touch model.py
touch admin.pymain.py文件
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddlewarefrom admin import admin
from model import Studentapp = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=[""],
allow_credentials=True,
allow_methods=[""],
allow_headers=["*"]
)app.include_router(admin.router, prefix='/admin')
@app.on_event('startup')
async def startup():
await Student.create_table()@app.on_event('shutdown')
async def shutdown():
await Student.drop_table()model.py文件
from sqlalchemy import Column, String, Integer
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmakerBase = declarative_base()
class Student(Base):
tablename = 'students'
name = Column(String(50), primary_key=True)
age = Column(Integer)
sex = Column(String(20))
address = Column(String(100))@classmethod async def create_table(cls): engine = create_engine('mysql+pymysql://username:password@host:3306/db_name') Base.metadata.create_all(engine) @classmethod async def drop_table(cls): engine = create_engine('mysql+pymysql://username:password@host:3306/db_name') Base.metadata.drop_all(engine)
admin.py文件
from fastapi_amis_admin import AmisAdmin
from model import Studentadmin = AmisAdmin(
name='Students Management',
version='v1.0.0'
)@admin.register_crud(
name='students',
model=Student
)
def students_crud():
pass -
gao55pan说:
用python的fastapi框架和vue构建一套学生信息管理系统,mysql学生信息表有name,age,sex,address这四个字段,要求可以通过admin后台实现对学生信息的增删改查,要求目录结构合理,请给出每个文件的完整代码
一、完整的文件目录结构
├── api # api接口文件夹 │ ├── app.py # 后端app入口文件 │ ├── database.py # 数据库操作文件 │ └── routers.py # api接口文件 ├── vue # vue前端文件夹 │ ├── components # vue组件 │ │ ├── admin # 后台管理组件 │ │ │ ├── add.vue # 添加学生信息组件 │ │ │ ├── delete.vue # 删除学生信息组件 │ │ │ ├── update.vue # 修改学生信息组件 │ │ │ └── view.vue # 查看学生信息组件 │ │ └── App.vue # 入口组件 │ ├── main.js # vue入口文件 │ ├── router.js # vue路由文件 │ ├── store.js # vue状态管理文件 │ └── views # 视图文件 │ └── index.vue # 首页 ├── .gitignore # git忽略文件 └── README.md # 项目说明文件
二、每个文件的完整代码
from fastapi import FastAPI from routers import student_router app = FastAPI() app.include_router( student_router, prefix="/students", tags=["students"] )
# -*- coding: utf-8 -*- import pymysql # mysql数据库连接 def connect_mysql(): conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123456', database='student' ) return conn # 查询学生信息 def query_student(): conn = connect_mysql() cursor = conn.cursor() sql = "select * from student" cursor.execute(sql) res = cursor.fetchall() cursor.close() conn.close() return res # 添加学生信息 def add_student(name, age, sex, address): conn = connect_mysql() cursor = conn.cursor() sql = "insert into student values('%s', '%s', '%s', '%s')" % (name, age, sex, address) cursor.execute(sql) conn.commit() cursor.close() conn.close() # 删除学生信息 def delete_student(name): conn = connect_mysql() cursor = conn.cursor() sql = "delete from student where name='%s'" % name cursor.execute(sql) conn.commit() cursor.close() conn.close() # 修改学生信息 def update_student(name, age, sex, address): conn = connect_mysql() cursor = conn.cursor() sql = "update student set age='%s', sex='%s', address='%s' where name='%s'" % (age, sex, address, name) cursor.execute(sql) conn.commit() cursor.close() conn.close()
# -*- coding: utf-8 -*- from fastapi import APIRouter from database import query_student, add_student, delete_student, update_student student_router = APIRouter() # 获取学生信息 @student_router.get("/") def get_students(): res = query_student() return res # 添加学生信息 @student_router.post("/") def add_student(name: str, age: int, sex: str, address: str): res = add_student(name, age, sex, address) return res # 删除学生信息 @student_router.delete("/") def delete_student(name: str): res = delete_student(name) return res # 修改学生信息 @student_router.put("/") def update_student(name: str, age: int, sex: str, address: str): res = update_student(name, age, sex, address) return res
- add.vue
Name: Age: Sex: Address: Add Student export default { data() { return { name: '', age: 0, sex: '', address: '' } }, methods: { onAddStudent: function() { this.$axios.post('/students/', { name: this.name, age: this.age, sex: this.sex, address: this.address }).then(() => { alert('添加成功!') this.$router.push({ path: '/' }) }).catch((err) => { alert(err) }) } } }
- delete.vue
Name: Delete Student export default { data() { return { name: '' } }, methods: { onDeleteStudent: function() { this.$axios.delete('/students/', { params: { name: this.name } }).then(() => { alert('删除成功!') this.$router.push({ path: '/' }) }).catch((err) => { alert(err) }) } } }
- update.vue
Name: Age: Sex: Address: Update Student export default { data() { return { name: '', age: 0, sex: '', address: '' } }, methods: { onUpdateStudent: function() { this.$axios.put('/students/', { name: this.name, age: this.age, sex: this.sex, address: this.address }).then(() => { alert('修改成功!') this.$router.push({ path: '/' }) }).catch((err) => { alert(err) }) } } }
- view.vue
Name Age Sex Address {{ item.name }} {{ item.age }} {{ item.sex }} {{ item.address }} export default { data() { return { students: [] } }, mounted() { this.$axios.get('/students/').then((res) => { this.students = res.data }).catch((err) => { alert(err) }) } }
- App.vue
export default { data() { return { } } }
- main.js
import Vue from 'vue' import App from './App.vue' import router from './router' import store from './store' Vue.config.productionTip = false new Vue({ router, store, render: h => h(App) }).$mount('#app')
- router.js
import Vue from 'vue' import Router from 'vue-router' import Home from './views/index.vue' import Add from './components/admin/add.vue' import Delete from './components/admin/delete.vue' import Update from './components/admin/update.vue' import View from './components/admin/view.vue' Vue.use(Router) export default new Router({ mode: 'history', base: process.env.BASE_URL, routes: [ { path: '/', name: 'home', component: Home }, {