Commit adf27ab2 authored by xianyang's avatar xianyang

用户模型创建,用户添加

parent d5a3f3a1
from datetime import datetime
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from app.api.users import schemas from app.api.users import schemas
from libs.functions import md5
from models import users as models from models import users as models
...@@ -8,8 +11,8 @@ def get_user(db: Session, user_id: int): ...@@ -8,8 +11,8 @@ def get_user(db: Session, user_id: int):
return db.query(models.User).filter(models.User.id == user_id).first() return db.query(models.User).filter(models.User.id == user_id).first()
def get_user_by_email(db: Session, email: str): def get_user_by_name(db: Session, username: str):
return db.query(models.User).filter(models.User.email == email).first() return db.query(models.User).filter(models.User.username == username).first()
def get_users(db: Session, skip: int = 0, limit: int = 100): def get_users(db: Session, skip: int = 0, limit: int = 100):
...@@ -17,21 +20,9 @@ def get_users(db: Session, skip: int = 0, limit: int = 100): ...@@ -17,21 +20,9 @@ def get_users(db: Session, skip: int = 0, limit: int = 100):
def create_user(db: Session, user: schemas.UserCreate): def create_user(db: Session, user: schemas.UserCreate):
fake_hashed_password = user.password + "notreallyhashed" db_user = models.User(username=user.username, description=user.description, unique=user.unique,
db_user = models.User(email=user.email, hashed_password=fake_hashed_password) config_key=user.config_key, hashed_password=md5(user.password), create_time=datetime.now())
db.add(db_user) db.add(db_user)
db.commit() db.commit()
db.refresh(db_user) db.refresh(db_user)
return db_user return db_user
def get_items(db: Session, skip: int = 0, limit: int = 100):
return db.query(models.Item).offset(skip).limit(limit).all()
# def create_user_item(db: Session, item: schemas.ItemCreate, user_id: int):
# db_item = models.Item(**item.dict(), owner_id=user_id)
# db.add(db_item)
# db.commit()
# db.refresh(db_item)
# return db_item
\ No newline at end of file
...@@ -2,16 +2,18 @@ from pydantic import BaseModel ...@@ -2,16 +2,18 @@ from pydantic import BaseModel
class UserBase(BaseModel): class UserBase(BaseModel):
email: str username: str
class UserCreate(UserBase): class UserCreate(UserBase):
password: str password: str
unique: str
description: str
config_key: str
class User(UserBase): class User(UserBase):
id: int id: int
is_active: bool
class Config: class Config:
orm_mode = True orm_mode = True
\ No newline at end of file
from typing import List from typing import List
from fastapi import Depends, APIRouter, HTTPException, FastAPI from fastapi import Depends, APIRouter, HTTPException, FastAPI
from fastapi.security import OAuth2PasswordRequestForm
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
import models
from app.api.users import crud, schemas from app.api.users import crud, schemas
from models import users
from core.storage.db import SessionLocal from core.storage.db import SessionLocal
# models.Base.metadata.create_all(bind=engine)
router = APIRouter() router = APIRouter()
# Dependency
def get_db(): def get_db():
db = SessionLocal() db = SessionLocal()
try: try:
...@@ -19,13 +17,12 @@ def get_db(): ...@@ -19,13 +17,12 @@ def get_db():
finally: finally:
db.close() db.close()
# @router.post("/", response_model=schemas.User)
@router.post("/", response_model=schemas.User) # def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)): # db_user = crud.get_user_by_email(db, email=user.email)
db_user = crud.get_user_by_email(db, email=user.email) # if db_user:
if db_user: # raise HTTPException(status_code=400, detail="Email already registered")
raise HTTPException(status_code=400, detail="Email already registered") # return crud.create_user(db=db, user=user)
return crud.create_user(db=db, user=user)
@router.get("/", response_model=List[schemas.User]) @router.get("/", response_model=List[schemas.User])
...@@ -42,7 +39,32 @@ def read_user(user_id: int, db: Session = Depends(get_db)): ...@@ -42,7 +39,32 @@ def read_user(user_id: int, db: Session = Depends(get_db)):
return db_user return db_user
@router.post("/login", tags=["POST"])
def login():
"""
OAuth2 compatible token login, get an access token for future requests.
"""
# bucket = get_default_bucket()
# user = crud.user.authenticate(
# bucket, username=form_data.username, password=form_data.password
# )
# if not user:
# raise HTTPException(status_code=400, detail="Incorrect email or password")
# elif not crud.user.is_active(user):
# raise HTTPException(status_code=400, detail="Inactive user")
# access_token_expires = timedelta(minutes=config.ACCESS_TOKEN_EXPIRE_MINUTES)
return {
"token_type": "bearer",
}
@router.post("/create", response_model=schemas.User)
def create_user(data: schemas.UserCreate, db: Session = Depends(get_db)):
"""添加用户"""
db_user = crud.get_user_by_name(db, username=data.username)
if db_user:
raise HTTPException(status_code=400, detail="用户已存在")
return crud.create_user(db=db, user=data)
@router.get("/items", tags=['GET', 'POST'])
def ceshi():
return {'message': 'Hello demo Adsadsadsadsadaspplications!'}
...@@ -3,12 +3,8 @@ ...@@ -3,12 +3,8 @@
切换环境,修改文档后面的命令 env = ... 切换环境,修改文档后面的命令 env = ...
""" """
import os
from pydantic import BaseSettings from pydantic import BaseSettings
# from starlette.middleware.cors import CORSMiddleware
# from main import app
#
# from app.api.api_v1 import api_router
class Env(BaseSettings): class Env(BaseSettings):
...@@ -20,14 +16,12 @@ class Env(BaseSettings): ...@@ -20,14 +16,12 @@ class Env(BaseSettings):
class TestingEnv(Env): class TestingEnv(Env):
''' """测试环境配置"""
测试环境配置
'''
TESTING: bool = True TESTING: bool = True
class ProdEnv(Env): class ProdEnv(Env):
'''生产环境配置''' """生产环境配置"""
DATABASE_URI: str = 'mysql://user@localhost/foo' DATABASE_URI: str = 'mysql://user@localhost/foo'
DATABASE_USER: str = '' DATABASE_USER: str = ''
DATABASE_PWD: str = '' DATABASE_PWD: str = ''
......
...@@ -20,7 +20,7 @@ SQLALCHEMY_DATABASE_URL = f'sqlite:///{modul_path}/sql_app.db' ...@@ -20,7 +20,7 @@ SQLALCHEMY_DATABASE_URL = f'sqlite:///{modul_path}/sql_app.db'
# engine = create_engine( # engine = create_engine(
# SQLALCHEMY_DATABASE_URL, encoding='utf-8', echo=True, connect_args={'check_same_thread': False} # SQLALCHEMY_DATABASE_URL, encoding='utf-8', echo=True, connect_args={'check_same_thread': False}
# ) # )
engine = create_engine('mysql+mysqldb://data_center:KCMBfAjeJhbJXsSe@43.138.132.9:3398/fj-data-center') engine = create_engine('mysql+mysqldb://data_center:KCMBfAjeJhbJXsSe@43.138.132.9:3398/finance')
# 数据库 session 类,用于创建 session 实例 # 数据库 session 类,用于创建 session 实例
# autoflush 是指发送数据库语句到数据库,但数据库不一定执行写入到磁盘 # autoflush 是指发送数据库语句到数据库,但数据库不一定执行写入到磁盘
...@@ -28,3 +28,4 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) ...@@ -28,3 +28,4 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建 Base 类,用于 ORM 模型的继承 # 创建 Base 类,用于 ORM 模型的继承
Base = declarative_base() Base = declarative_base()
Base.metadata.create_all(engine)
import hashlib
def md5(s):
"""md5加密"""
sign_str = hashlib.md5()
sign_str.update(s.encode('utf-8'))
return sign_str.hexdigest()
...@@ -5,7 +5,7 @@ from fastapi import FastAPI ...@@ -5,7 +5,7 @@ from fastapi import FastAPI
from app.api.api_v1 import api_router from app.api.api_v1 import api_router
from starlette.middleware.cors import CORSMiddleware from starlette.middleware.cors import CORSMiddleware
from core.storage.db import Base, engine
app = FastAPI() app = FastAPI()
...@@ -19,6 +19,7 @@ app.add_middleware( ...@@ -19,6 +19,7 @@ app.add_middleware(
allow_headers=['*']) # 允许跨域的headers,可以用来鉴别来源等作用。 allow_headers=['*']) # 允许跨域的headers,可以用来鉴别来源等作用。
app.include_router(api_router, prefix="/api") app.include_router(api_router, prefix="/api")
Base.metadata.create_all(bind=engine)
if __name__ == '__main__': if __name__ == '__main__':
uvicorn.run(app=app, host="127.0.0.1", port=8001) uvicorn.run(app=app, host="127.0.0.1", port=8001)
from core.storage.db import Base, engine
Base.metadata.create_all(bind=engine)
from sqlalchemy import Boolean, Column, ForeignKey, Integer, String from sqlalchemy import Boolean, Column, ForeignKey, Integer, String, DateTime, Float, ARRAY
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
from core.storage.db import Base from core.storage.db import Base
...@@ -8,8 +8,24 @@ class User(Base): ...@@ -8,8 +8,24 @@ class User(Base):
__tablename__ = "users" __tablename__ = "users"
id = Column(Integer, primary_key=True, index=True) id = Column(Integer, primary_key=True, index=True)
email = Column(String, unique=True, index=True) username = Column(String(100), unique=True, index=True)
hashed_password = Column(String) description = Column(String(255))
is_active = Column(Boolean, default=True) unique = Column(String(50), unique=True)
hashed_password = Column(String(50))
config_key = Column(String(50))
uuid = Column(String(50))
authority = Column(Integer)
remaining_sum = Column(Float)
entry_account = ARRAY(Column(Integer))
out_account = ARRAY(Column(Integer))
create_time = Column(DateTime)
update_time = Column(DateTime)
class Authority(Base):
__tablename__ = "authority"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(50), unique=True, index=True)
create_time = Column(DateTime)
items = relationship("Item", back_populates="owner")
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment