Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
financial-system
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
xianyang
financial-system
Commits
adf27ab2
Commit
adf27ab2
authored
Feb 08, 2023
by
xianyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
用户模型创建,用户添加
parent
d5a3f3a1
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
88 additions
and
50 deletions
+88
-50
crud.py
app/api/users/crud.py
+7
-16
schemas.py
app/api/users/schemas.py
+5
-3
views.py
app/api/users/views.py
+37
-15
env.py
core/config/env.py
+3
-9
db.py
core/storage/db.py
+2
-1
functions.py
libs/functions.py
+8
-0
main.py
main.py
+2
-1
__init__.py
models/__init__.py
+3
-0
users.py
models/users.py
+21
-5
No files found.
app/api/users/crud.py
View file @
adf27ab2
from
datetime
import
datetime
from
sqlalchemy.orm
import
Session
from
app.api.users
import
schemas
from
libs.functions
import
md5
from
models
import
users
as
models
...
...
@@ -8,8 +11,8 @@ def get_user(db: Session, user_id: int):
return
db
.
query
(
models
.
User
)
.
filter
(
models
.
User
.
id
==
user_id
)
.
first
()
def
get_user_by_
email
(
db
:
Session
,
email
:
str
):
return
db
.
query
(
models
.
User
)
.
filter
(
models
.
User
.
email
==
email
)
.
first
()
def
get_user_by_
name
(
db
:
Session
,
username
:
str
):
return
db
.
query
(
models
.
User
)
.
filter
(
models
.
User
.
username
==
username
)
.
first
()
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
):
fake_hashed_password
=
user
.
password
+
"notreallyhashed"
db_user
=
models
.
User
(
email
=
user
.
email
,
hashed_password
=
fake_hashed_password
)
db_user
=
models
.
User
(
username
=
user
.
username
,
description
=
user
.
description
,
unique
=
user
.
unique
,
config_key
=
user
.
config_key
,
hashed_password
=
md5
(
user
.
password
),
create_time
=
datetime
.
now
()
)
db
.
add
(
db_user
)
db
.
commit
()
db
.
refresh
(
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
app/api/users/schemas.py
View file @
adf27ab2
...
...
@@ -2,16 +2,18 @@ from pydantic import BaseModel
class
UserBase
(
BaseModel
):
email
:
str
username
:
str
class
UserCreate
(
UserBase
):
password
:
str
unique
:
str
description
:
str
config_key
:
str
class
User
(
UserBase
):
id
:
int
is_active
:
bool
class
Config
:
orm_mode
=
True
\ No newline at end of file
orm_mode
=
True
app/api/users/views.py
View file @
adf27ab2
from
typing
import
List
from
fastapi
import
Depends
,
APIRouter
,
HTTPException
,
FastAPI
from
fastapi.security
import
OAuth2PasswordRequestForm
from
sqlalchemy.orm
import
Session
import
models
from
app.api.users
import
crud
,
schemas
from
models
import
users
from
core.storage.db
import
SessionLocal
# models.Base.metadata.create_all(bind=engine)
router
=
APIRouter
()
# Dependency
def
get_db
():
db
=
SessionLocal
()
try
:
...
...
@@ -19,13 +17,12 @@ def get_db():
finally
:
db
.
close
()
@
router
.
post
(
"/"
,
response_model
=
schemas
.
User
)
def
create_user
(
user
:
schemas
.
UserCreate
,
db
:
Session
=
Depends
(
get_db
)):
db_user
=
crud
.
get_user_by_email
(
db
,
email
=
user
.
email
)
if
db_user
:
raise
HTTPException
(
status_code
=
400
,
detail
=
"Email already registered"
)
return
crud
.
create_user
(
db
=
db
,
user
=
user
)
# @router.post("/", response_model=schemas.User)
# def create_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
# db_user = crud.get_user_by_email(db, email=user.email)
# if db_user:
# raise HTTPException(status_code=400, detail="Email already registered")
# return crud.create_user(db=db, user=user)
@
router
.
get
(
"/"
,
response_model
=
List
[
schemas
.
User
])
...
...
@@ -42,7 +39,32 @@ def read_user(user_id: int, db: Session = Depends(get_db)):
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!'
}
core/config/env.py
View file @
adf27ab2
...
...
@@ -3,12 +3,8 @@
切换环境,修改文档后面的命令 env = ...
"""
import
os
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
):
...
...
@@ -20,14 +16,12 @@ class Env(BaseSettings):
class
TestingEnv
(
Env
):
'''
测试环境配置
'''
"""测试环境配置"""
TESTING
:
bool
=
True
class
ProdEnv
(
Env
):
'''生产环境配置'''
"""生产环境配置"""
DATABASE_URI
:
str
=
'mysql://user@localhost/foo'
DATABASE_USER
:
str
=
''
DATABASE_PWD
:
str
=
''
...
...
core/storage/db.py
View file @
adf27ab2
...
...
@@ -20,7 +20,7 @@ SQLALCHEMY_DATABASE_URL = f'sqlite:///{modul_path}/sql_app.db'
# engine = create_engine(
# 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/f
j-data-center
'
)
engine
=
create_engine
(
'mysql+mysqldb://data_center:KCMBfAjeJhbJXsSe@43.138.132.9:3398/f
inance
'
)
# 数据库 session 类,用于创建 session 实例
# autoflush 是指发送数据库语句到数据库,但数据库不一定执行写入到磁盘
...
...
@@ -28,3 +28,4 @@ SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# 创建 Base 类,用于 ORM 模型的继承
Base
=
declarative_base
()
Base
.
metadata
.
create_all
(
engine
)
libs/functions.py
0 → 100644
View file @
adf27ab2
import
hashlib
def
md5
(
s
):
"""md5加密"""
sign_str
=
hashlib
.
md5
()
sign_str
.
update
(
s
.
encode
(
'utf-8'
))
return
sign_str
.
hexdigest
()
main.py
View file @
adf27ab2
...
...
@@ -5,7 +5,7 @@ from fastapi import FastAPI
from
app.api.api_v1
import
api_router
from
starlette.middleware.cors
import
CORSMiddleware
from
core.storage.db
import
Base
,
engine
app
=
FastAPI
()
...
...
@@ -19,6 +19,7 @@ app.add_middleware(
allow_headers
=
[
'*'
])
# 允许跨域的headers,可以用来鉴别来源等作用。
app
.
include_router
(
api_router
,
prefix
=
"/api"
)
Base
.
metadata
.
create_all
(
bind
=
engine
)
if
__name__
==
'__main__'
:
uvicorn
.
run
(
app
=
app
,
host
=
"127.0.0.1"
,
port
=
8001
)
models/__init__.py
View file @
adf27ab2
from
core.storage.db
import
Base
,
engine
Base
.
metadata
.
create_all
(
bind
=
engine
)
models/users.py
View file @
adf27ab2
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
core.storage.db
import
Base
...
...
@@ -8,8 +8,24 @@ class User(Base):
__tablename__
=
"users"
id
=
Column
(
Integer
,
primary_key
=
True
,
index
=
True
)
email
=
Column
(
String
,
unique
=
True
,
index
=
True
)
hashed_password
=
Column
(
String
)
is_active
=
Column
(
Boolean
,
default
=
True
)
username
=
Column
(
String
(
100
),
unique
=
True
,
index
=
True
)
description
=
Column
(
String
(
255
))
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"
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment